public void calibrate(final DATA_TYPE data) {
computeCalibrationPrice(data);
_calibrationObjective.setMulticurves(data.getMulticurveProvider());
final int nbInstruments = getBasket().size();
final SuccessiveRootFinderLMMDDCalibrationObjective objective = (SuccessiveRootFinderLMMDDCalibrationObjective) _calibrationObjective;
final RidderSingleRootFinder rootFinder = new RidderSingleRootFinder(_calibrationObjective.getFunctionValueAccuracy(), _calibrationObjective.getVariableAbsoluteAccuracy());
final BracketRoot bracketer = new BracketRoot();
for (int loopins = 0; loopins < nbInstruments; loopins++) {
final InstrumentDerivative instrument = getBasket().get(loopins);
_calibrationObjective.setInstrument(instrument);
objective.setStartIndex(_instrumentIndex.get(loopins));
objective.setEndIndex(_instrumentIndex.get(loopins + 1) - 1);
_calibrationObjective.setPrice(getCalibrationPrices().get(loopins));
final double[] range = bracketer.getBracketedPoints(_calibrationObjective, objective.getMinimumParameter(), objective.getMaximumParameter());
rootFinder.getRoot(_calibrationObjective, range[0], range[1]);
}
}