Source:
public MultipleCurrencyAmount presentValue(final SwaptionPhysicalFixedIbor swaption, final NormalSwaptionProviderInterface multicurveParameters) { ArgumentChecker.notNull(swaption, "Swaption"); ArgumentChecker.notNull(multicurveParameters, "normal volatility for swaption and multicurve"); MulticurveProviderInterface multicurve = multicurveParameters.getMulticurveProvider(); final GeneratorSwapFixedIbor generatorSwap = multicurveParameters.getGeneratorSwap(); DayCount dayCountModification = generatorSwap.getFixedLegDayCount(); Calendar calendar = generatorSwap.getCalendar(); final double pvbpModified = METHOD_SWAP.presentValueBasisPoint(swaption.getUnderlyingSwap(), dayCountModification, calendar, multicurve); final double forwardModified = PRDC.visitFixedCouponSwap(swaption.getUnderlyingSwap(), dayCountModification, multicurve); final double strikeModified = METHOD_SWAP.couponEquivalent(swaption.getUnderlyingSwap(), pvbpModified, multicurve); double expiry = swaption.getTimeToExpiry(); double volatility = multicurveParameters.getVolatility(expiry, swaption.getMaturityTime(), strikeModified, forwardModified); NormalFunctionData normalData = new NormalFunctionData(forwardModified, pvbpModified, volatility); final EuropeanVanillaOption option = new EuropeanVanillaOption(strikeModified, expiry, swaption.isCall()); NormalPriceFunction normalFunction = new NormalPriceFunction(); final Function1D<NormalFunctionData, Double> func = normalFunction.getPriceFunction(option); final double pv = func.evaluate(normalData) * (swaption.isLong() ? 1.0 : -1.0); return MultipleCurrencyAmount.of(swaption.getCurrency(), pv); }

Target:
public MultipleCurrencyAmount presentValue(final SwaptionPhysicalFixedIbor swaption, final NormalSwaptionProviderInterface multicurveParameters) { ArgumentChecker.notNull(swaption, "Swaption"); ArgumentChecker.notNull(multicurveParameters, "normal volatility for swaption and multicurve"); MulticurveProviderInterface multicurve = multicurveParameters.getMulticurveProvider(); GeneratorSwapFixedIbor generatorSwap = multicurveParameters.getGeneratorSwap(); DayCount dayCountModification = generatorSwap.getFixedLegDayCount(); Calendar calendar = generatorSwap.getCalendar(); double pvbpModified = METHOD_SWAP.presentValueBasisPoint(swaption.getUnderlyingSwap(), dayCountModification, calendar, multicurve); double forwardModified = PRDC.visitFixedCouponSwap(swaption.getUnderlyingSwap(), dayCountModification, multicurve); double strikeModified = METHOD_SWAP.couponEquivalent(swaption.getUnderlyingSwap(), pvbpModified, multicurve); double expiry = swaption.getTimeToExpiry(); double volatility = multicurveParameters.getVolatility(expiry, swaption.getMaturityTime(), strikeModified, forwardModified); NormalFunctionData normalData = new NormalFunctionData(forwardModified, pvbpModified, volatility); EuropeanVanillaOption option = new EuropeanVanillaOption(strikeModified, expiry, swaption.isCall()); NormalPriceFunction normalFunction = new NormalPriceFunction(); Function1D<NormalFunctionData, Double> func = normalFunction.getPriceFunction(option); double pv = func.evaluate(normalData) * (swaption.isLong() ? 1.0 : -1.0); return MultipleCurrencyAmount.of(swaption.getCurrency(), pv); }