public override void partialRollback(DiscretizedAsset asset, double to) { double from = asset.time(); if (Utils.close(from, to)) { return; } Utils.QL_REQUIRE(from > to, () => " cannot roll the asset back to tile to it is already at time from "); DiscretizedConvertible convertible = asset as DiscretizedConvertible; int iFrom = t_.index(from); int iTo = t_.index(to); for (var i = iFrom - 1; i >= iTo; --i) { Vector newValues = new Vector(size(i)); Vector newSpreadAdjustedRate = new Vector(size(i)); Vector newConversionProbability = new Vector(size(i)); stepback(i, convertible.values(), convertible.conversionProbability(), convertible.spreadAdjustedRate(), newValues, newConversionProbability, newSpreadAdjustedRate); convertible.setTime(t_[i]); convertible.setValues(newValues); convertible.spreadAdjustedRate_ = newSpreadAdjustedRate; convertible.conversionProbability_ = newConversionProbability; // skip the very last adjustement if (i != iTo) { convertible.adjustValues(); } } }