* @return The present value curve sensitivity.
*/
public InterestRateCurveSensitivity presentValueSensitivity(final SwaptionCashFixedIbor swaption, final SABRInterestRateDataBundle sabrData) {
ArgumentChecker.notNull(swaption, "swaption");
ArgumentChecker.notNull(sabrData, "SARB data");
final AnnuityCouponFixed annuityFixed = swaption.getUnderlyingSwap().getFixedLeg();
final double forward = swaption.getUnderlyingSwap().accept(PRC, sabrData);
// Derivative of the forward with respect to the rates.
final InterestRateCurveSensitivity forwardDr = new InterestRateCurveSensitivity(swaption.getUnderlyingSwap().accept(PRSC, sabrData));
final double pvbp = METHOD_SWAP.getAnnuityCash(swaption.getUnderlyingSwap(), forward);
// Derivative of the annuity with respect to the forward.
final double pvbpDf = METHOD_SWAP.getAnnuityCashDerivative(swaption.getUnderlyingSwap(), forward);
final String discountCurveName = annuityFixed.getNthPayment(0).getFundingCurveName();
final double discountFactorSettle = sabrData.getCurve(discountCurveName).getDiscountFactor(swaption.getSettlementTime());
final double maturity = annuityFixed.getNthPayment(annuityFixed.getNumberOfPayments() - 1).getPaymentTime() - swaption.getSettlementTime();
// Implementation note: option required to pass the strike (in case the swap has non-constant coupon).
final double dfDr = -swaption.getSettlementTime() * discountFactorSettle;
final List<DoublesPair> list = new ArrayList<>();
list.add(new DoublesPair(swaption.getSettlementTime(), dfDr));
final Map<String, List<DoublesPair>> resultMap = new HashMap<>();