final Map<String, List<DoublesPair>> resultMapPrice = new HashMap<>();
final List<DoublesPair> listPrice = new ArrayList<>();
listPrice.add(new DoublesPair(cap.getReferenceEndTime()[0], cap.getWeight() / cap.getIndexStartValue() * convexityAdjustment));
listPrice.add(new DoublesPair(cap.getReferenceEndTime()[1], (1 - cap.getWeight()) / cap.getIndexStartValue() * convexityAdjustment));
resultMapPrice.put(inflation.getName(cap.getPriceIndex()), listPrice);
final InflationSensitivity forwardDi = InflationSensitivity.ofPriceIndex(resultMapPrice);
final double dfDr = -cap.getPaymentTime() * df;
final double volatility = black.getBlackParameters().getVolatility(cap.getReferenceEndTime()[1], cap.getStrike());
final BlackFunctionData dataBlack = new BlackFunctionData(forward, 1.0, volatility);
final double[] bsAdjoint = BLACK_FUNCTION.getPriceAdjoint(option, dataBlack);
final List<DoublesPair> list = new ArrayList<>();
list.add(new DoublesPair(cap.getPaymentTime(), dfDr));
final Map<String, List<DoublesPair>> resultMap = new HashMap<>();
resultMap.put(inflation.getName(cap.getCurrency()), list);
InflationSensitivity result = InflationSensitivity.ofYieldDiscounting(resultMap);
result = result.multipliedBy(bsAdjoint[0]);
result = result.plus(forwardDi.multipliedBy(df * bsAdjoint[1]));
result = result.multipliedBy(cap.getNotional() * cap.getPaymentYearFraction());
return MultipleCurrencyInflationSensitivity.of(cap.getCurrency(), result);
}