/// <summary>
 /// Obtains an instance specifying the measures to use.
 /// </summary>
 /// <param name="rootFinder">  the root finder to use </param>
 /// <param name="measures">  the calibration measures, used to compute the function for which the root is found </param>
 /// <param name="pvMeasures">  the present value measures, used to compute the present value sensitivity to market quotes
 ///   stored in the metadata </param>
 /// <returns> the curve calibrator </returns>
 public static RatesCurveCalibrator of(NewtonVectorRootFinder rootFinder, CalibrationMeasures measures, CalibrationMeasures pvMeasures)
 {
     return(new RatesCurveCalibrator(rootFinder, measures, pvMeasures));
 }
 //-------------------------------------------------------------------------
 // restricted constructor
 private RatesCurveCalibrator(NewtonVectorRootFinder rootFinder, CalibrationMeasures measures, CalibrationMeasures pvMeasures)
 {
     this.rootFinder = ArgChecker.notNull(rootFinder, "rootFinder");
     this.measures   = ArgChecker.notNull(measures, "measures");
     this.pvMeasures = ArgChecker.notNull(pvMeasures, "pvMeasures");
 }
        /// <summary>
        /// Obtains an instance specifying tolerances and measures to use.
        /// <para>
        /// This uses a Broyden root finder.
        ///
        /// </para>
        /// </summary>
        /// <param name="toleranceAbs">  the absolute tolerance </param>
        /// <param name="toleranceRel">  the relative tolerance </param>
        /// <param name="stepMaximum">  the maximum steps </param>
        /// <param name="measures">  the calibration measures, used to compute the function for which the root is found </param>
        /// <param name="pvMeasures">  the present value measures, used to compute the present value sensitivity to market quotes
        ///   stored in the metadata </param>
        /// <returns> the curve calibrator </returns>
        public static RatesCurveCalibrator of(double toleranceAbs, double toleranceRel, int stepMaximum, CalibrationMeasures measures, CalibrationMeasures pvMeasures)
        {
            NewtonVectorRootFinder rootFinder = NewtonVectorRootFinder.broyden(toleranceAbs, toleranceRel, stepMaximum);

            return(new RatesCurveCalibrator(rootFinder, measures, pvMeasures));
        }