code: @Override
  	public RandomVariable getValue(double evaluationTime, AssetModelMonteCarloSimulationModel model) throws CalculationException {
  		// Get underlying and numeraire
  
  		// Get S(T)
  		RandomVariable underlyingAtMaturity	= model.getAssetValue(maturity, underlyingIndex);
  
  		// The payoff: values = indicator(underlying - strike, 0) = V(T) = max(S(T)-K,0)
  		RandomVariable values = underlyingAtMaturity.sub(strike).choose(new Scalar(1.0), new Scalar(0.0));
  
  		// Discounting...
  		RandomVariable numeraireAtMaturity		= model.getNumeraire(maturity);
  		RandomVariable monteCarloWeights		= model.getMonteCarloWeights(maturity);
  		values = values.div(numeraireAtMaturity).mult(monteCarloWeights);
  
  		// ...to evaluation time.
  		RandomVariable	numeraireAtEvalTime					= model.getNumeraire(evaluationTime);
  		RandomVariable	monteCarloProbabilitiesAtEvalTime	= model.getMonteCarloWeights(evaluationTime);
  		values = values.mult(numeraireAtEvalTime).div(monteCarloProbabilitiesAtEvalTime);
  
  		return values;
  	}
docs: This method returns the value random variable of the product within the specified model, evaluated at a given evalutationTime.
  Note: For a lattice this is often the value conditional to evalutationTime, for a Monte-Carlo simulation this is the (sum of) value discounted to evaluation time.
  Cashflows prior evaluationTime are not considered.
  
  @param evaluationTime The time on which this products value should be observed.
  @param model The model used to price the product.
  @return The random variable representing the value of the product discounted to evaluation time
  @throws net.finmath.exception.CalculationException Thrown if the valuation fails, specific cause may be available via the <code>cause()</code> method.