00001
00002
00003
00004 #ifndef ROOT_TMultiDimFit
00005 #define ROOT_TMultiDimFit
00006
00007 #ifndef ROOT_TNamed
00008 #include "TNamed.h"
00009 #endif
00010 #ifndef ROOT_TVectorD
00011 #include "TVectorD.h"
00012 #endif
00013 #ifndef ROOT_TMatrixD
00014 #include "TMatrixD.h"
00015 #endif
00016 #ifndef ROOT_TList
00017 #include "TList.h"
00018 #endif
00019 #ifndef ROOT_TVirtualFitter
00020 #include "TVirtualFitter.h"
00021 #endif
00022
00023 class TBrowser;
00024
00025 class TMultiDimFit : public TNamed {
00026
00027 public:
00028 enum EMDFPolyType {
00029 kMonomials,
00030 kChebyshev,
00031 kLegendre
00032 };
00033
00034 private:
00035 static TMultiDimFit* fgInstance;
00036 protected:
00037
00038 TVectorD fQuantity;
00039 TVectorD fSqError;
00040 Double_t fMeanQuantity;
00041 Double_t fMaxQuantity;
00042 Double_t fMinQuantity;
00043 Double_t fSumSqQuantity;
00044 Double_t fSumSqAvgQuantity;
00045
00046 TVectorD fVariables;
00047 Int_t fNVariables;
00048 TVectorD fMeanVariables;
00049 TVectorD fMaxVariables;
00050 TVectorD fMinVariables;
00051
00052 Int_t fSampleSize;
00053
00054 TVectorD fTestQuantity;
00055 TVectorD fTestSqError;
00056 TVectorD fTestVariables;
00057
00058 Int_t fTestSampleSize;
00059
00060 Double_t fMinAngle;
00061 Double_t fMaxAngle;
00062 Int_t fMaxTerms;
00063 Double_t fMinRelativeError;
00064 Int_t *fMaxPowers;
00065 Double_t fPowerLimit;
00066
00067
00068 TMatrixD fFunctions;
00069 Int_t fMaxFunctions;
00070 Int_t *fFunctionCodes;
00071 Int_t fMaxStudy;
00072 Int_t fMaxFuncNV;
00073
00074 TMatrixD fOrthFunctions;
00075 TVectorD fOrthFunctionNorms;
00076
00077
00078 Int_t *fMaxPowersFinal;
00079 Int_t *fPowers;
00080 Int_t *fPowerIndex;
00081
00082 TVectorD fResiduals;
00083 Double_t fMaxResidual;
00084 Double_t fMinResidual;
00085 Int_t fMaxResidualRow;
00086 Int_t fMinResidualRow;
00087 Double_t fSumSqResidual;
00088
00089 Int_t fNCoefficients;
00090 TVectorD fOrthCoefficients;
00091 TMatrixD fOrthCurvatureMatrix;
00092 TVectorD fCoefficients;
00093 TVectorD fCoefficientsRMS;
00094 Double_t fRMS;
00095 Double_t fChi2;
00096 Int_t fParameterisationCode;
00097
00098 Double_t fError;
00099 Double_t fTestError;
00100 Double_t fPrecision;
00101 Double_t fTestPrecision;
00102 Double_t fCorrelationCoeff;
00103 TMatrixD fCorrelationMatrix;
00104 Double_t fTestCorrelationCoeff;
00105
00106 TList* fHistograms;
00107 Byte_t fHistogramMask;
00108 Int_t fBinVarX;
00109 Int_t fBinVarY;
00110
00111 TVirtualFitter* fFitter;
00112
00113 EMDFPolyType fPolyType;
00114 Bool_t fShowCorrelation;
00115 Bool_t fIsUserFunction;
00116 Bool_t fIsVerbose;
00117
00118 virtual Double_t EvalFactor(Int_t p, Double_t x) const;
00119 virtual Double_t EvalControl(const Int_t *powers) const;
00120 virtual void MakeCoefficientErrors();
00121 virtual void MakeCorrelation();
00122 virtual Double_t MakeGramSchmidt(Int_t function);
00123 virtual void MakeCoefficients();
00124 virtual void MakeCandidates();
00125 virtual void MakeNormalized();
00126 virtual void MakeParameterization();
00127 virtual void MakeRealCode(const char *filename,
00128 const char *classname,
00129 Option_t *option="");
00130 virtual Bool_t Select(const Int_t *iv);
00131 virtual Bool_t TestFunction(Double_t squareResidual,
00132 Double_t dResidur);
00133 public:
00134 TMultiDimFit();
00135 TMultiDimFit(Int_t dimension,
00136 EMDFPolyType type=kMonomials,
00137 Option_t *option="");
00138 virtual ~TMultiDimFit();
00139
00140 virtual void AddRow(const Double_t *x, Double_t D, Double_t E=0);
00141 virtual void AddTestRow(const Double_t *x, Double_t D, Double_t E=0);
00142 virtual void Browse(TBrowser* b);
00143 virtual void Clear(Option_t *option="");
00144 virtual void Draw(Option_t * ="d") { }
00145 virtual Double_t Eval(const Double_t *x, const Double_t *coeff=0) const;
00146 virtual Double_t EvalError(const Double_t *x, const Double_t *coeff=0) const;
00147 virtual void FindParameterization(Option_t* option="");
00148 virtual void Fit(Option_t *option="");
00149
00150 Double_t GetChi2() const { return fChi2; }
00151 const TMatrixD* GetCorrelationMatrix() const { return &fCorrelationMatrix; }
00152 const TVectorD* GetCoefficients() const { return &fCoefficients; }
00153 Double_t GetError() const { return fError; }
00154 Int_t* GetFunctionCodes() const { return fFunctionCodes; }
00155 const TMatrixD* GetFunctions() const { return &fFunctions; }
00156 virtual TList* GetHistograms() const { return fHistograms; }
00157 Double_t GetMaxAngle() const { return fMaxAngle; }
00158 Int_t GetMaxFunctions() const { return fMaxFunctions; }
00159 Int_t* GetMaxPowers() const { return fMaxPowers; }
00160 Double_t GetMaxQuantity() const { return fMaxQuantity; }
00161 Int_t GetMaxStudy() const { return fMaxStudy; }
00162 Int_t GetMaxTerms() const { return fMaxTerms; }
00163 const TVectorD* GetMaxVariables() const { return &fMaxVariables; }
00164 Double_t GetMeanQuantity() const { return fMeanQuantity; }
00165 const TVectorD* GetMeanVariables() const { return &fMeanVariables; }
00166 Double_t GetMinAngle() const { return fMinAngle; }
00167 Double_t GetMinQuantity() const { return fMinQuantity; }
00168 Double_t GetMinRelativeError() const { return fMinRelativeError; }
00169 const TVectorD* GetMinVariables() const { return &fMinVariables; }
00170 Int_t GetNVariables() const { return fNVariables; }
00171 Int_t GetNCoefficients() const { return fNCoefficients; }
00172 Int_t GetPolyType() const { return fPolyType; }
00173 Int_t* GetPowerIndex() const { return fPowerIndex; }
00174 Double_t GetPowerLimit() const { return fPowerLimit; }
00175 const Int_t* GetPowers() const { return fPowers; }
00176 Double_t GetPrecision() const { return fPrecision; }
00177 const TVectorD* GetQuantity() const { return &fQuantity; }
00178 Double_t GetResidualMax() const { return fMaxResidual; }
00179 Double_t GetResidualMin() const { return fMinResidual; }
00180 Int_t GetResidualMaxRow() const { return fMaxResidualRow; }
00181 Int_t GetResidualMinRow() const { return fMinResidualRow; }
00182 Double_t GetResidualSumSq() const { return fSumSqResidual; }
00183 Double_t GetRMS() const { return fRMS; }
00184 Int_t GetSampleSize() const { return fSampleSize; }
00185 const TVectorD* GetSqError() const { return &fSqError; }
00186 Double_t GetSumSqAvgQuantity() const { return fSumSqAvgQuantity; }
00187 Double_t GetSumSqQuantity() const { return fSumSqQuantity; }
00188 Double_t GetTestError() const { return fTestError; }
00189 Double_t GetTestPrecision() const { return fTestPrecision; }
00190 const TVectorD* GetTestQuantity() const { return &fTestQuantity; }
00191 Int_t GetTestSampleSize() const { return fTestSampleSize; }
00192 const TVectorD* GetTestSqError() const { return &fTestSqError; }
00193 const TVectorD* GetTestVariables() const { return &fTestVariables; }
00194 const TVectorD* GetVariables() const { return &fVariables; }
00195
00196 static TMultiDimFit* Instance();
00197 virtual Bool_t IsFolder() const { return kTRUE; }
00198 virtual Double_t MakeChi2(const Double_t* coeff=0);
00199 virtual void MakeCode(const char *functionName="MDF", Option_t *option="");
00200 virtual void MakeHistograms(Option_t* option="A");
00201 virtual void MakeMethod(const Char_t* className="MDF", Option_t* option="");
00202 virtual void Print(Option_t *option="ps") const;
00203
00204 void SetBinVarX(Int_t nbbinvarx) {fBinVarX = nbbinvarx;}
00205 void SetBinVarY(Int_t nbbinvary) {fBinVarY = nbbinvary;}
00206 void SetMaxAngle(Double_t angle=0);
00207 void SetMaxFunctions(Int_t n) { fMaxFunctions = n; }
00208 void SetMaxPowers(const Int_t *powers);
00209 void SetMaxStudy(Int_t n) { fMaxStudy = n; }
00210 void SetMaxTerms(Int_t terms) { fMaxTerms = terms; }
00211 void SetMinRelativeError(Double_t error);
00212 void SetMinAngle(Double_t angle=1);
00213 void SetPowerLimit(Double_t limit=1e-3);
00214 virtual void SetPowers(const Int_t *powers, Int_t terms);
00215
00216 ClassDef(TMultiDimFit,2)
00217 }
00218 ;
00219 #endif