*/
public MultipleCurrencyInterestRateCurveSensitivity presentValueCurveSensitivity(final ForexOptionVanilla optionForex, final SmileDeltaTermStructureVannaVolgaDataBundle smile) {
ArgumentChecker.notNull(optionForex, "Forex option");
ArgumentChecker.notNull(smile, "Smile");
ArgumentChecker.isTrue(smile.checkCurrencies(optionForex.getCurrency1(), optionForex.getCurrency2()), "Option currencies not compatible with smile data");
final SmileDeltaParameters smileAtTime = smile.getSmile(optionForex.getCurrency1(), optionForex.getCurrency2(), optionForex.getTimeToExpiry());
final double payTime = optionForex.getUnderlyingForex().getPaymentTime();
final String domesticCurveName = optionForex.getUnderlyingForex().getPaymentCurrency2().getFundingCurveName();
final String foreignCurveName = optionForex.getUnderlyingForex().getPaymentCurrency1().getFundingCurveName();
// Forward sweep
final double dfDomestic = smile.getCurve(domesticCurveName).getDiscountFactor(payTime);
final double dfForeign = smile.getCurve(foreignCurveName).getDiscountFactor(payTime);
final double spot = smile.getFxRates().getFxRate(optionForex.getCurrency1(), optionForex.getCurrency2());
final double forward = spot * dfForeign / dfDomestic;
final double[] strikesVV = smileAtTime.getStrike(forward);
final double[] volVV = smileAtTime.getVolatility();
final double volATM = volVV[1];
final double[][] priceVVAdjATM = new double[3][];
final double[][] priceVVAdjsmile = new double[3][];
final BlackFunctionData dataBlackATM = new BlackFunctionData(forward, dfDomestic, volATM);
for (int loopvv = 0; loopvv < 3; loopvv = loopvv + 2) { // Implementation note: The adjustment for K2 is 0