00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_TVirtualFitter
00013 #define ROOT_TVirtualFitter
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef ROOT_TNamed
00025 #include "TNamed.h"
00026 #endif
00027 #ifndef ROOT_TMethodCall
00028 #include "TMethodCall.h"
00029 #endif
00030 #include "Foption.h"
00031
00032
00033 class TVirtualFitter : public TNamed {
00034
00035 protected:
00036 Foption_t fOption;
00037 Int_t fXfirst;
00038 Int_t fXlast;
00039 Int_t fYfirst;
00040 Int_t fYlast;
00041 Int_t fZfirst;
00042 Int_t fZlast;
00043 Int_t fNpoints;
00044 Int_t fPointSize;
00045 Int_t fCacheSize;
00046 Double_t *fCache;
00047 TObject *fObjectFit;
00048 TObject *fUserFunc;
00049 TMethodCall *fMethodCall;
00050 void (*fFCN)(Int_t &npar, Double_t *gin, Double_t &f, Double_t *u, Int_t flag);
00051
00052 static TVirtualFitter *fgFitter;
00053 static Int_t fgMaxpar;
00054 static Int_t fgMaxiter;
00055 static Double_t fgErrorDef;
00056 static Double_t fgPrecision;
00057 static TString fgDefault;
00058
00059 TVirtualFitter(const TVirtualFitter& tvf);
00060 TVirtualFitter& operator=(const TVirtualFitter& tvf);
00061
00062 public:
00063 TVirtualFitter();
00064 virtual ~TVirtualFitter();
00065 virtual Double_t Chisquare(Int_t npar, Double_t *params) const = 0;
00066
00067 virtual void Clear(Option_t *option="") = 0;
00068 virtual Int_t ExecuteCommand(const char *command, Double_t *args, Int_t nargs) = 0;
00069 virtual void FixParameter(Int_t ipar) = 0;
00070 virtual void GetConfidenceIntervals(Int_t n, Int_t ndim, const Double_t *x, Double_t *ci, Double_t cl=0.95);
00071 virtual void GetConfidenceIntervals(TObject *obj, Double_t cl=0.95);
00072 virtual Double_t *GetCovarianceMatrix() const = 0;
00073 virtual Double_t GetCovarianceMatrixElement(Int_t i, Int_t j) const = 0;
00074 virtual Int_t GetErrors(Int_t ipar,Double_t &eplus, Double_t &eminus, Double_t &eparab, Double_t &globcc) const = 0;
00075 typedef void (* FCNFunc_t )(Int_t &npar, Double_t *gin, Double_t &f, Double_t *u, Int_t flag);
00076 virtual FCNFunc_t GetFCN() { return fFCN; }
00077 virtual Foption_t GetFitOption() const {return fOption;}
00078 TMethodCall *GetMethodCall() const {return fMethodCall;}
00079 virtual Int_t GetNumberTotalParameters() const = 0;
00080 virtual Int_t GetNumberFreeParameters() const = 0;
00081 virtual TObject *GetObjectFit() const {return fObjectFit;}
00082 virtual Double_t GetParError(Int_t ipar) const = 0;
00083 virtual Double_t GetParameter(Int_t ipar) const = 0;
00084 virtual Int_t GetParameter(Int_t ipar,char *name,Double_t &value,Double_t &verr,Double_t &vlow, Double_t &vhigh) const = 0;
00085 virtual const char *GetParName(Int_t ipar) const = 0;
00086 virtual Int_t GetStats(Double_t &amin, Double_t &edm, Double_t &errdef, Int_t &nvpar, Int_t &nparx) const = 0;
00087 virtual Double_t GetSumLog(Int_t i) = 0;
00088 virtual TObject *GetUserFunc() const {return fUserFunc;}
00089 virtual Int_t GetXfirst() const {return fXfirst;}
00090 virtual Int_t GetXlast() const {return fXlast;}
00091 virtual Int_t GetYfirst() const {return fYfirst;}
00092 virtual Int_t GetYlast() const {return fYlast;}
00093 virtual Int_t GetZfirst() const {return fZfirst;}
00094 virtual Int_t GetZlast() const {return fZlast;}
00095 virtual Bool_t IsFixed(Int_t ipar) const = 0;
00096 virtual void PrintResults(Int_t level, Double_t amin) const = 0;
00097 virtual void ReleaseParameter(Int_t ipar) = 0;
00098 virtual Double_t *SetCache(Int_t npoints, Int_t psize);
00099 virtual void SetFCN(void *fcn);
00100 virtual void SetFCN(void (*fcn)(Int_t &, Double_t *, Double_t &f, Double_t *, Int_t));
00101 virtual void SetFitMethod(const char *name) = 0;
00102 virtual void SetFitOption(Foption_t option) {fOption = option;}
00103 virtual void SetObjectFit(TObject *obj) {fObjectFit = obj;}
00104 virtual Int_t SetParameter(Int_t ipar,const char *parname,Double_t value,Double_t verr,Double_t vlow, Double_t vhigh) = 0;
00105 virtual void SetUserFunc(TObject *userfunc) {fUserFunc = userfunc;}
00106 virtual void SetXfirst(Int_t first) {fXfirst = first;}
00107 virtual void SetXlast (Int_t last) {fXlast = last;}
00108 virtual void SetYfirst(Int_t first) {fYfirst = first;}
00109 virtual void SetYlast (Int_t last) {fYlast = last;}
00110 virtual void SetZfirst(Int_t first) {fZfirst = first;}
00111 virtual void SetZlast (Int_t last) {fZlast = last;}
00112
00113 static TVirtualFitter *GetFitter();
00114 static TVirtualFitter *Fitter(TObject *obj, Int_t maxpar = 25);
00115 static const char *GetDefaultFitter();
00116 static Int_t GetMaxIterations();
00117 static Double_t GetErrorDef();
00118 static Double_t GetPrecision();
00119 static void SetDefaultFitter(const char* name = "");
00120 static void SetFitter(TVirtualFitter *fitter, Int_t maxpar = 25);
00121 static void SetMaxIterations(Int_t niter=5000);
00122 static void SetErrorDef(Double_t errdef=1);
00123 static void SetPrecision(Double_t prec=1e-6);
00124
00125 ClassDef(TVirtualFitter,0)
00126 };
00127
00128 #endif