00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef ROOT_TFitterMinuit_H_
00011 #define ROOT_TFitterMinuit_H_
00012
00013 #ifndef ROOT_TVirtualFitter
00014 #include "TVirtualFitter.h"
00015 #endif
00016
00017 #include "Minuit2/MnUserParameterState.h"
00018 #include "Minuit2/MinosError.h"
00019 #include "Minuit2/ModularFunctionMinimizer.h"
00020 #include "Minuit2/FumiliMinimizer.h"
00021 #include "TFcnAdapter.h"
00022
00023
00024
00025
00026
00027 namespace ROOT {
00028 namespace Minuit2 {
00029 class FunctionMinimum;
00030 }
00031 }
00032
00033 class TFitterMinuit : public TVirtualFitter {
00034
00035 public:
00036
00037
00038 enum EMinimizerType {
00039 kMigrad,
00040 kSimplex,
00041 kCombined,
00042 kScan,
00043 kFumili
00044 };
00045
00046
00047 TFitterMinuit();
00048
00049 TFitterMinuit(Int_t maxpar);
00050
00051 virtual ~TFitterMinuit();
00052
00053 public:
00054
00055
00056 virtual Double_t Chisquare(Int_t npar, Double_t *params) const;
00057 virtual void Clear(Option_t *option="");
00058 virtual Int_t ExecuteCommand(const char *command, Double_t *args, Int_t nargs);
00059 virtual void FixParameter(Int_t ipar);
00060 virtual Double_t *GetCovarianceMatrix() const;
00061 virtual Double_t GetCovarianceMatrixElement(Int_t i, Int_t j) const;
00062 virtual Int_t GetErrors(Int_t ipar,Double_t &eplus, Double_t &eminus, Double_t &eparab, Double_t &globcc) const;
00063
00064 virtual Int_t GetNumberTotalParameters() const;
00065 virtual Int_t GetNumberFreeParameters() const;
00066
00067 virtual Double_t GetParError(Int_t ipar) const;
00068 virtual Double_t GetParameter(Int_t ipar) const;
00069 virtual Int_t GetParameter(Int_t ipar,char *name,Double_t &value,Double_t &verr,Double_t &vlow, Double_t &vhigh) const;
00070 virtual const char *GetParName(Int_t ipar) const;
00071 virtual Int_t GetStats(Double_t &amin, Double_t &edm, Double_t &errdef, Int_t &nvpar, Int_t &nparx) const;
00072 virtual Double_t GetSumLog(Int_t i);
00073
00074
00075 virtual Bool_t IsFixed(Int_t ipar) const ;
00076
00077 virtual void PrintResults(Int_t level, Double_t amin) const;
00078 virtual void ReleaseParameter(Int_t ipar);
00079 virtual void SetFitMethod(const char *name);
00080 virtual Int_t SetParameter(Int_t ipar,const char *parname,Double_t value,Double_t verr,Double_t vlow, Double_t vhigh);
00081
00082 virtual void SetFCN(void (*fcn)(Int_t &, Double_t *, Double_t &f, Double_t *, Int_t) );
00083
00084 virtual void SetFCN(void * );
00085
00086
00087
00088
00089 virtual void SetMinuitFCN( ROOT::Minuit2::FCNBase * f);
00090
00091
00092 virtual const ROOT::Minuit2::MnUserParameterState & State() const { return fState; }
00093
00094 virtual const ROOT::Minuit2::FCNBase * GetMinuitFCN() const { return fMinuitFCN; }
00095
00096 virtual const ROOT::Minuit2::ModularFunctionMinimizer * GetMinimizer() const { return fMinimizer; }
00097
00098
00099
00100 virtual int Minimize( int nfcn = 0, double edmval = 0.1);
00101
00102 int GetStrategy() { return fStrategy; }
00103
00104 int PrintLevel() { return fDebug; }
00105
00106 void SetStrategy( int stra) { fStrategy = stra; }
00107
00108 void SetPrintLevel(int level ) { fDebug = level; }
00109
00110
00111 void SetMinimumTolerance(double mintol) { fMinTolerance = mintol; }
00112
00113 double MinimumTolerance() const { return fMinTolerance; }
00114
00115
00116
00117
00118 virtual void CreateMinimizer(EMinimizerType = kMigrad );
00119
00120
00121 protected:
00122
00123
00124
00125 virtual ROOT::Minuit2::MnUserParameterState & State() { return fState; }
00126
00127 virtual void SetMinimizer( ROOT::Minuit2::ModularFunctionMinimizer * m) { fMinimizer = m; }
00128
00129
00130
00131
00132 virtual void CreateChi2FCN();
00133
00134 virtual void CreateChi2ExtendedFCN();
00135
00136 virtual void CreateBinLikelihoodFCN();
00137
00138 virtual void CreateUnbinLikelihoodFCN() {}
00139
00140
00141 virtual ROOT::Minuit2::FunctionMinimum DoMinimization( int nfcn = 0, double edmval = 0.1);
00142
00143
00144
00145
00146 virtual int ExamineMinimum(const ROOT::Minuit2::FunctionMinimum & );
00147
00148 virtual void Initialize();
00149
00150 private:
00151
00152 double fErrorDef;
00153 double fEDMVal;
00154 bool fGradient;
00155
00156 ROOT::Minuit2::MnUserParameterState fState;
00157 std::vector<ROOT::Minuit2::MinosError> fMinosErrors;
00158 ROOT::Minuit2::ModularFunctionMinimizer * fMinimizer;
00159 ROOT::Minuit2::FCNBase * fMinuitFCN;
00160 int fDebug;
00161 int fStrategy;
00162 double fMinTolerance;
00163 mutable std::vector<double> fCovar;
00164
00165
00166 ClassDef(TFitterMinuit,1)
00167
00168 };
00169
00170 R__EXTERN TFitterMinuit* gMinuit2;
00171
00172
00173 #endif //ROOT_TFitterMinuit_H_