Performance.java

/*
 * (c) Copyright Christian P. Fries, Germany. Contact: email@christian-fries.de.
 *
 * Created on 06.12.2015
 */
package net.finmath.marketdata2.products;

import net.finmath.marketdata2.model.AnalyticModel;
import net.finmath.stochastic.RandomVariable;

/**
 * Implements an analytic product given by the ratio
 * of two analytic products.
 *
 * This class may become handy when constructing calibrations products.
 * For example: The swap rate is the performance of a <code>SwapLeg</code> relative to a <code>SwapAnnuity</code>.
 *
 * Note: In the strict sense, the performance is an index an not a product (e.g. it does not have a currency unit).
 * With respect to the implementation we do not make a difference here and implement the AbstractAnalyticProduct interface.
 *
 * @author Christian Fries
 * @version 1.0
 */
public class Performance extends AbstractAnalyticProduct implements AnalyticProduct {

	private final AbstractAnalyticProduct productNumerator;
	private final AbstractAnalyticProduct productDenominator;

	/**
	 * Creates a Performance product.
	 *
	 * @param productNumerator A product implementing AbstractAnalyticProduct for the numerator.
	 * @param productDenominator A product implementing AbstractAnalyticProduct for the denominator.
	 */
	public Performance(final AbstractAnalyticProduct productNumerator, final AbstractAnalyticProduct productDenominator) {
		super();
		this.productNumerator = productNumerator;
		this.productDenominator = productDenominator;
	}

	@Override
	public RandomVariable getValue(final double evaluationTime, final AnalyticModel model) {

		final RandomVariable valueNumerator	= productNumerator.getValue(evaluationTime, model);
		final RandomVariable valueDenominator	= productDenominator.getValue(evaluationTime, model);

		final RandomVariable value = valueNumerator.div(valueDenominator);
		return value;
	}

	@Override
	public String toString() {
		return "Performance [productNumerator=" + productNumerator
				+ ", productDenominator=" + productDenominator + "]";
	}
}