final double discountFactorSettle = multicurves.getDiscountFactor(ccy, 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<>();
resultMap.put(multicurves.getName(ccy), list);
MulticurveSensitivity result = MulticurveSensitivity.ofYieldDiscounting(resultMap);
final DoublesPair expiryMaturity = new DoublesPair(swaption.getTimeToExpiry(), maturity);
final double alpha = sabrData.getSABRParameter().getAlpha(expiryMaturity);
final double beta = sabrData.getSABRParameter().getBeta(expiryMaturity);
final double rho = sabrData.getSABRParameter().getRho(expiryMaturity);
final double nu = sabrData.getSABRParameter().getNu(expiryMaturity);
final SABRFormulaData sabrParam = new SABRFormulaData(alpha, beta, rho, nu);