Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
MnApplication.h
Go to the documentation of this file.
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_MnApplication
11 #define ROOT_Minuit2_MnApplication
12 
14 #include "Minuit2/MnStrategy.h"
15 
16 namespace ROOT {
17 
18  namespace Minuit2 {
19 
20 
21 
22 class FunctionMinimum;
23 class MinuitParameter;
24 class MnMachinePrecision;
25 class ModularFunctionMinimizer;
26 class FCNBase;
27 class FCNGradientBase;
28 
29 //___________________________________________________________________________
30 /**
31  application interface class for minimizers (migrad, simplex, Minimize,
32  Scan)
33  User normally instantiates the derived class like ROOT::Minuit2::MnMigrad
34  for using Migrad for minimization
35  */
36 
37 class MnApplication {
38 
39 public:
40 
41 
42  /// constructor from non-gradient functions
43  MnApplication(const FCNBase& fcn, const MnUserParameterState& state, const MnStrategy& stra, unsigned int nfcn = 0);
44 
45  /// constructor from gradient function
46  MnApplication(const FCNGradientBase& fcn, const MnUserParameterState& state, const MnStrategy& stra, unsigned int nfcn = 0);
47 
48  virtual ~MnApplication() { }
49 
50  /**
51  Minimize the function
52  @param maxfcn : max number of function calls (if = 0) default is used which is set to
53  200 + 100 * npar + 5 * npar**2
54  @param tolerance : value used for terminating iteration procedure.
55  For example, MIGRAD will stop iterating when edm (expected distance from minimum) will be:
56  edm < tolerance * 10**-3
57  Default value of tolerance used is 0.1
58  */
59  virtual FunctionMinimum operator()(unsigned int maxfcn = 0, double tolerance = 0.1);
60 
61  virtual ModularFunctionMinimizer& Minimizer() = 0;
62  virtual const ModularFunctionMinimizer& Minimizer() const = 0;
63 
64  const MnMachinePrecision& Precision() const {return fState.Precision();}
65  const MnUserParameterState& State() const {return fState;}
66  const MnUserParameters& Parameters() const {return fState.Parameters();}
67  const MnUserCovariance& Covariance() const {return fState.Covariance();}
68  virtual const FCNBase& Fcnbase() const {return fFCN;}
69  const MnStrategy& Strategy() const {return fStrategy;}
70  unsigned int NumOfCalls() const {return fNumCall;}
71 
72 protected:
73 
74  const FCNBase& fFCN;
75  MnUserParameterState fState;
76  MnStrategy fStrategy;
77  unsigned int fNumCall;
78  bool fUseGrad;
79 
80 public:
81 
82 // facade: forward interface of MnUserParameters and MnUserTransformation
83 // via MnUserParameterState
84 
85  //access to parameters (row-wise)
86  const std::vector<ROOT::Minuit2::MinuitParameter>& MinuitParameters() const;
87  //access to parameters and errors in column-wise representation
88  std::vector<double> Params() const;
89  std::vector<double> Errors() const;
90 
91  //access to single Parameter
92  const MinuitParameter& Parameter(unsigned int i) const;
93 
94  //add free Parameter
95  void Add(const char* Name, double val, double err);
96  //add limited Parameter
97  void Add(const char* Name, double val, double err, double , double);
98  //add const Parameter
99  void Add(const char*, double);
100 
101  //interaction via external number of Parameter
102  void Fix(unsigned int);
103  void Release(unsigned int);
104  void SetValue(unsigned int, double);
105  void SetError(unsigned int, double);
106  void SetLimits(unsigned int, double, double);
107  void RemoveLimits(unsigned int);
108 
109  double Value(unsigned int) const;
110  double Error(unsigned int) const;
111 
112  //interaction via Name of Parameter
113  void Fix(const char*);
114  void Release(const char*);
115  void SetValue(const char*, double);
116  void SetError(const char*, double);
117  void SetLimits(const char*, double, double);
118  void RemoveLimits(const char*);
119  void SetPrecision(double);
120 
121  double Value(const char*) const;
122  double Error(const char*) const;
123 
124  //convert Name into external number of Parameter
125  unsigned int Index(const char*) const;
126  //convert external number into Name of Parameter
127  const char* Name(unsigned int) const;
128 
129  // transformation internal <-> external
130  double Int2ext(unsigned int, double) const;
131  double Ext2int(unsigned int, double) const;
132  unsigned int IntOfExt(unsigned int) const;
133  unsigned int ExtOfInt(unsigned int) const;
134  unsigned int VariableParameters() const;
135 
136 };
137 
138  } // namespace Minuit2
139 
140 } // namespace ROOT
141 
142 #endif // ROOT_Minuit2_MnApplication