/*
* (c) Copyright Christian P. Fries, Germany. All rights reserved. Contact: email@christianfries.com.
*
* Created on 22.05.2014
*/
package net.finmath.marketdata.model.curves;
import net.finmath.marketdata.model.AnalyticModelInterface;
/**
* @author Christian Fries
*
*/
public class ForwardCurveWithFixings extends PiecewiseCurve implements ForwardCurveInterface {
/**
* Create a piecewise forward curve.
*
* @param curveInterface Base curve, to be used by default.
* @param fixedPartCurve Curve to be used for the open time interval from fixedPartStartTime to fixedPartEndTime.
* @param fixedPartStartTime Start time of the interval where we use the fixedPartCurve.
* @param fixedPartEndTime End time of the interval where we use the fixedPartCurve.
*/
public ForwardCurveWithFixings(ForwardCurveInterface curveInterface, ForwardCurveInterface fixedPartCurve, double fixedPartStartTime, double fixedPartEndTime) {
super(curveInterface, fixedPartCurve, fixedPartStartTime, fixedPartEndTime);
}
@Override
public double getForward(AnalyticModelInterface model, double fixingTime) {
if(fixingTime > this.getFixedPartStartTime() && fixingTime < this.getFixedPartEndTime()) {
return ((ForwardCurveInterface)getFixedPartCurve()).getForward(model, fixingTime);
}
else {
return ((ForwardCurveInterface)getBaseCurve()).getForward(model, fixingTime);
}
}
@Override
public double getForward(AnalyticModelInterface model, double fixingTime, double paymentOffset) {
if(fixingTime > this.getFixedPartStartTime() && fixingTime < this.getFixedPartEndTime()) {
return ((ForwardCurveInterface)getFixedPartCurve()).getForward(model, fixingTime, paymentOffset);
}
else {
return ((ForwardCurveInterface)getBaseCurve()).getForward(model, fixingTime, paymentOffset);
}
}
/**
* Returns the forwards for a given vector fixing times.
*
* @param model An analytic model providing a context. The discount curve (if needed) is obtained from this model.
* @param fixingTimes The given fixing times.
* @return The forward rates.
*/
public double[] getForwards(AnalyticModelInterface model, double[] fixingTimes)
{
double[] values = new double[fixingTimes.length];
for(int i=0; i<fixingTimes.length; i++) values[i] = getForward(model, fixingTimes[i]);
return values;
}
@Override
public String getDiscountCurveName() {
return ((ForwardCurveInterface)getBaseCurve()).getDiscountCurveName();
}
@Override
public double getPaymentOffset(double fixingTime) {
return ((ForwardCurveInterface)getBaseCurve()).getPaymentOffset(fixingTime);
}
@Override
public CurveInterface getCloneForParameter(double[] value) throws CloneNotSupportedException {
return new ForwardCurveWithFixings((ForwardCurveInterface)getBaseCurve().getCloneForParameter(value), (ForwardCurveInterface)getFixedPartCurve(), getFixedPartStartTime(), getFixedPartEndTime());
}
@Override
public ForwardCurveWithFixings clone() throws CloneNotSupportedException {
return new ForwardCurveWithFixings((ForwardCurveInterface)getBaseCurve().clone(), (ForwardCurveInterface)getFixedPartCurve(), getFixedPartStartTime(), getFixedPartEndTime());
}
}