bumpedVols[k] = vols[t][k] - SHIFT;
final Function1D<Double, Double> thisExpirysSmile = strikeInterpolator.getVolatilityFunction(forwards[t], strikes[t], expiries[t], bumpedVols);
final Function1D<Double, Double>[] scenarioSmileFits = Arrays.copyOf(smileFitsBase, smileFitsBase.length);
scenarioSmileFits[t] = thisExpirysSmile;
final BlackVolatilitySurfaceMoneynessFcnBackedByGrid shiftedSurface = surfaceInterpolator.combineIndependentSmileFits(scenarioSmileFits, volGrid);
final StaticReplicationDataBundle shiftedMarket = market.withShiftedSurface(shiftedSurface);
// Sensitivities
for (int v = 0; v < nVanillas; v++) {
final Double shiftedPV = vanillas[v].accept(PVC, shiftedMarket);
Validate.notNull(shiftedPV, "Null PV in shifted scenario, T = " + expiries[t] + ", k = " + strikes[t][k]);
final Double vega = (shiftedPV - basePrices[v]) / -SHIFT;