1 // @(#)root/minuit2:$Id$
2 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei   2003-2005
3 
4 /**********************************************************************
5  *                                                                    *
6  * Copyright (c) 2005 LCG ROOT Math team,  CERN/PH-SFT                *
7  *                                                                    *
8  **********************************************************************/
9 
10 #ifndef ROOT_Minuit2_HessianGradientCalculator
11 #define ROOT_Minuit2_HessianGradientCalculator
12 
13 #include "Minuit2/GradientCalculator.h"
14 #include "Minuit2/MnMatrix.h"
15 #include <utility>
16 
17 namespace ROOT {
18 
19 namespace Minuit2 {
20 
21 class MnFcn;
22 class MnUserTransformation;
23 class MnMachinePrecision;
24 class MnStrategy;
25 
26 /**
27    HessianGradientCalculator: class to calculate Gradient for Hessian
28  */
29 
30 class HessianGradientCalculator : public GradientCalculator {
31 
32 public:
HessianGradientCalculator(const MnFcn & fcn,const MnUserTransformation & par,const MnStrategy & stra)33    HessianGradientCalculator(const MnFcn &fcn, const MnUserTransformation &par, const MnStrategy &stra)
34       : fFcn(fcn), fTransformation(par), fStrategy(stra)
35    {
36    }
37 
~HessianGradientCalculator()38    virtual ~HessianGradientCalculator() {}
39 
40    virtual FunctionGradient operator()(const MinimumParameters &) const;
41 
42    virtual FunctionGradient operator()(const MinimumParameters &, const FunctionGradient &) const;
43 
44    std::pair<FunctionGradient, MnAlgebraicVector>
45    DeltaGradient(const MinimumParameters &, const FunctionGradient &) const;
46 
Fcn()47    const MnFcn &Fcn() const { return fFcn; }
Trafo()48    const MnUserTransformation &Trafo() const { return fTransformation; }
49    const MnMachinePrecision &Precision() const;
Strategy()50    const MnStrategy &Strategy() const { return fStrategy; }
51 
52    unsigned int Ncycle() const;
53    double StepTolerance() const;
54    double GradTolerance() const;
55 
56 private:
57    const MnFcn &fFcn;
58    const MnUserTransformation &fTransformation;
59    const MnStrategy &fStrategy;
60 };
61 
62 } // namespace Minuit2
63 
64 } // namespace ROOT
65 
66 #endif // ROOT_Minuit2_HessianGradientCalculator
67