@Override
 public void calibrate(final DATA_TYPE data) {
   computeCalibrationPrice(data);
   _calibrationObjective.setMulticurves(data.getMulticurveProvider());
   final int nbInstruments = getBasket().size();
   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);
     _calibrationObjective.setPrice(getCalibrationPrices().get(loopins));
     final double[] range =
         bracketer.getBracketedPoints(
             _calibrationObjective,
             _calibrationObjective.getMinimumParameter(),
             _calibrationObjective.getMaximumParameter());
     rootFinder.getRoot(_calibrationObjective, range[0], range[1]);
     if (loopins < nbInstruments - 1) {
       ((SuccessiveRootFinderHullWhiteCalibrationObjective) _calibrationObjective)
           .setNextCalibrationTime(_calibrationTimes.get(loopins));
     }
   }
 }
 /**
  * Constructor of the calibration engine.
  *
  * @param calibrationObjective The calibration objective.
  */
 public SuccessiveRootFinderHullWhiteCalibrationEngine(
     final SuccessiveRootFinderCalibrationObjectiveWithMultiCurves calibrationObjective) {
   super(calibrationObjective.getFXMatrix(), calibrationObjective.getCcy());
   _calibrationObjective = calibrationObjective;
 }