50 {
51
52 if (fixing == Null<Rate>())
53 fixing = coupon_->indexFixing();
54
55
56
57 Date d1 = coupon_->fixingDate(), referenceDate = capletVolatility()->referenceDate();
58
59 if (d1 > referenceDate) {
60 Time t1 = capletVolatility()->timeFromReference(d1);
62 Volatility sigma = capletVolatility()->volatility(d1, fixing);
64
65
66
67
68 if (capletVolatility()->volatilityType() == ShiftedLognormal) {
69 Real dQuantoAdj = std::exp(sigma * fxsigma * rho * t1);
70 Real shift = capletVolatility()->displacement();
71 fixing = (fixing + shift) * dQuantoAdj - shift;
72 } else {
73 Real dQuantoAdj = sigma * fxsigma * rho * t1;
74 fixing += dQuantoAdj;
75 }
76 }
77
78 return BlackIborCouponPricer::adjustedFixing(fixing);
79}