/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.provider.sensitivity.parameter;
import java.util.Set;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivative;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivativeVisitor;
import com.opengamma.analytics.financial.provider.description.interestrate.ParameterProviderInterface;
import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MultipleCurrencyMulticurveSensitivity;
import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MultipleCurrencyParameterSensitivity;
import com.opengamma.util.ArgumentChecker;
/**
* For an instrument, computes the sensitivity of a multiple currency value (often the present value) to the parameters used in the curve.
* The meaning of "parameters" will depend of the way the curve is stored (interpolated yield, function parameters, etc.) and also on the way
* the parameters sensitivities are aggregated (the same parameter can be used in several curves).
* @param <DATA_TYPE> Data type.
*/
public abstract class ParameterSensitivityParameterAbstractCalculator<DATA_TYPE extends ParameterProviderInterface> {
/**
* The sensitivity calculator to compute the sensitivity of the value with respect to the zero-coupon continuously compounded rates at different times (discounting) or forward rates.
*/
private final InstrumentDerivativeVisitor<DATA_TYPE, MultipleCurrencyMulticurveSensitivity> _curveSensitivityCalculator;
/**
* The constructor from a curve sensitivity calculator.
* @param curveSensitivityCalculator The calculator.
*/
public ParameterSensitivityParameterAbstractCalculator(final InstrumentDerivativeVisitor<DATA_TYPE, MultipleCurrencyMulticurveSensitivity> curveSensitivityCalculator) {
ArgumentChecker.notNull(curveSensitivityCalculator, "curve sensitivity calculator");
_curveSensitivityCalculator = curveSensitivityCalculator;
}
/**
* Computes the sensitivity with respect to the parameters for the supplied curve names.
* @param instrument The instrument. Not null.
* @param parameterMulticurves The parameters and multi-curves provider.
* @param curvesSet The set of curves for which the sensitivity will be computed. The multi-curve may contain more curves and other curves can be in the
* instrument sensitivity but only the one in the set will be in the output. The curve order in the output is the set order.
* @return The sensitivity (as a ParameterSensitivity).
*/
public MultipleCurrencyParameterSensitivity calculateSensitivity(final InstrumentDerivative instrument, final DATA_TYPE parameterMulticurves, final Set<String> curvesSet) {
ArgumentChecker.notNull(instrument, "derivative");
ArgumentChecker.notNull(parameterMulticurves, "Black data");
ArgumentChecker.notNull(curvesSet, "curves");
final MultipleCurrencyMulticurveSensitivity sensitivity = instrument.accept(_curveSensitivityCalculator, parameterMulticurves);
return pointToParameterSensitivity(sensitivity, parameterMulticurves, curvesSet);
}
/**
* Computes the sensitivity with respect to the parameters for all curves.
* @param instrument The instrument. Not null.
* @param parameterMulticurves The parameters and multi-curves provider.
* @return The sensitivity (as a ParameterSensitivity).
*/
public MultipleCurrencyParameterSensitivity calculateSensitivity(final InstrumentDerivative instrument, final DATA_TYPE parameterMulticurves) {
ArgumentChecker.notNull(instrument, "derivative");
ArgumentChecker.notNull(parameterMulticurves, "Black data");
final MultipleCurrencyMulticurveSensitivity sensitivity = instrument.accept(_curveSensitivityCalculator, parameterMulticurves);
return pointToParameterSensitivity(sensitivity, parameterMulticurves);
}
/**
* Computes the sensitivity with respect to the parameters from the point sensitivities to the continuously compounded rate for the
* supplied curve names.
* @param sensitivity The point sensitivity.
* @param parameterMulticurves The parameters and multi-curves provider.
* @param curvesSet The set of curves for which the sensitivity will be computed. The multi-curve may contain more curves and other curves can be in the
* instrument sensitivity but only the one in the set will be in the output. The curve order in the output is the set order.
* @return The sensitivity (as a ParameterSensitivity).
*/
public abstract MultipleCurrencyParameterSensitivity pointToParameterSensitivity(final MultipleCurrencyMulticurveSensitivity sensitivity, final DATA_TYPE parameterMulticurves,
final Set<String> curvesSet);
/**
* Computes the sensitivity with respect to the parameters from the point sensitivities to the continuously compounded rate for all curves.
* @param sensitivity The point sensitivity.
* @param parameterMulticurves The parameters and multi-curves provider.
* instrument sensitivity but only the one in the set will be in the output. The curve order in the output is the set order.
* @return The sensitivity (as a ParameterSensitivity).
*/
public abstract MultipleCurrencyParameterSensitivity pointToParameterSensitivity(final MultipleCurrencyMulticurveSensitivity sensitivity, final DATA_TYPE parameterMulticurves);
}