code: @Override
  	public RandomVariable getValue(double evaluationTime, LIBORModelMonteCarloSimulationModel model) throws CalculationException {
  
  		// Set payment date and period length
  		double	paymentDate		= periodEnd;
  		double	periodLength	= periodEnd - periodStart;
  
  		// Get random variables
  		RandomVariable	libor		= model.getLIBOR(optionMaturity, periodStart, periodEnd);
  
  		RandomVariable 			trigger		= libor.sub(strike).mult(periodLength);
  		RandomVariable				values		= trigger.choose((new RandomVariableFromDoubleArray(periodLength)), (new RandomVariableFromDoubleArray(0.0)));
  
  		// Get numeraire and probabilities for payment time
  		RandomVariable	numeraire					= model.getNumeraire(paymentDate);
  		RandomVariable	monteCarloProbabilities		= model.getMonteCarloWeights(paymentDate);
  
  		values = values.div(numeraire).mult(monteCarloProbabilities);
  
  		// Get numeraire and probabilities for evaluation time
  		RandomVariable	numeraireAtEvaluationTime					= model.getNumeraire(evaluationTime);
  		RandomVariable	monteCarloProbabilitiesAtEvaluationTime		= model.getMonteCarloWeights(evaluationTime);
  
  		values = values.mult(numeraireAtEvaluationTime).div(monteCarloProbabilitiesAtEvaluationTime);
  
  		// Return values
  		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.