00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef ROOT_Minuit2_MnApplication
00011 #define ROOT_Minuit2_MnApplication
00012
00013 #include "Minuit2/MnUserParameterState.h"
00014 #include "Minuit2/MnStrategy.h"
00015
00016 namespace ROOT {
00017
00018 namespace Minuit2 {
00019
00020
00021
00022 class FunctionMinimum;
00023 class MinuitParameter;
00024 class MnMachinePrecision;
00025 class ModularFunctionMinimizer;
00026 class FCNBase;
00027 class FCNGradientBase;
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 class MnApplication {
00038
00039 public:
00040
00041
00042
00043 MnApplication(const FCNBase& fcn, const MnUserParameterState& state, const MnStrategy& stra, unsigned int nfcn = 0);
00044
00045
00046 MnApplication(const FCNGradientBase& fcn, const MnUserParameterState& state, const MnStrategy& stra, unsigned int nfcn = 0);
00047
00048 virtual ~MnApplication() { }
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 virtual FunctionMinimum operator()(unsigned int maxfcn = 0, double tolerance = 0.1);
00060
00061 virtual const ModularFunctionMinimizer& Minimizer() const = 0;
00062
00063 const MnMachinePrecision& Precision() const {return fState.Precision();}
00064 const MnUserParameterState& State() const {return fState;}
00065 const MnUserParameters& Parameters() const {return fState.Parameters();}
00066 const MnUserCovariance& Covariance() const {return fState.Covariance();}
00067 virtual const FCNBase& Fcnbase() const {return fFCN;}
00068 const MnStrategy& Strategy() const {return fStrategy;}
00069 unsigned int NumOfCalls() const {return fNumCall;}
00070
00071 protected:
00072
00073 const FCNBase& fFCN;
00074 MnUserParameterState fState;
00075 MnStrategy fStrategy;
00076 unsigned int fNumCall;
00077 bool fUseGrad;
00078
00079 public:
00080
00081
00082
00083
00084
00085 const std::vector<ROOT::Minuit2::MinuitParameter>& MinuitParameters() const;
00086
00087 std::vector<double> Params() const;
00088 std::vector<double> Errors() const;
00089
00090
00091 const MinuitParameter& Parameter(unsigned int i) const;
00092
00093
00094 void Add(const char* Name, double val, double err);
00095
00096 void Add(const char* Name, double val, double err, double , double);
00097
00098 void Add(const char*, double);
00099
00100
00101 void Fix(unsigned int);
00102 void Release(unsigned int);
00103 void SetValue(unsigned int, double);
00104 void SetError(unsigned int, double);
00105 void SetLimits(unsigned int, double, double);
00106 void RemoveLimits(unsigned int);
00107
00108 double Value(unsigned int) const;
00109 double Error(unsigned int) const;
00110
00111
00112 void Fix(const char*);
00113 void Release(const char*);
00114 void SetValue(const char*, double);
00115 void SetError(const char*, double);
00116 void SetLimits(const char*, double, double);
00117 void RemoveLimits(const char*);
00118 void SetPrecision(double);
00119
00120 double Value(const char*) const;
00121 double Error(const char*) const;
00122
00123
00124 unsigned int Index(const char*) const;
00125
00126 const char* Name(unsigned int) const;
00127
00128
00129 double Int2ext(unsigned int, double) const;
00130 double Ext2int(unsigned int, double) const;
00131 unsigned int IntOfExt(unsigned int) const;
00132 unsigned int ExtOfInt(unsigned int) const;
00133 unsigned int VariableParameters() const;
00134
00135 };
00136
00137 }
00138
00139 }
00140
00141 #endif // ROOT_Minuit2_MnApplication