Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TMultiDimFit.h
Go to the documentation of this file.
1 // @(#)root/hist:$Id$
2 // Author: Christian Holm Christensen 07/11/2000
3 
4 #ifndef ROOT_TMultiDimFit
5 #define ROOT_TMultiDimFit
6 
7 #include "TNamed.h"
8 #include "TVectorD.h"
9 #include "TMatrixD.h"
10 #include "TList.h"
11 #include "TVirtualFitter.h"
12 
13 class TBrowser;
14 
15 class TMultiDimFit : public TNamed {
16 
17 public:
18  enum EMDFPolyType {
19  kMonomials,
20  kChebyshev,
21  kLegendre
22  };
23 
24 private:
25  static TMultiDimFit* fgInstance; // Static instance
26 protected:
27 
28  TVectorD fQuantity; // Training sample, dependent quantity
29  TVectorD fSqError; // Training sample, error in quantity
30  Double_t fMeanQuantity; // Mean of dependent quantity
31  Double_t fMaxQuantity; // Max value of dependent quantity
32  Double_t fMinQuantity; // Min value of dependent quantity
33  Double_t fSumSqQuantity; // SumSquare of dependent quantity
34  Double_t fSumSqAvgQuantity; // Sum of squares away from mean
35 
36  TVectorD fVariables; // Training sample, independent variables
37  Int_t fNVariables; // Number of independent variables
38  TVectorD fMeanVariables; // mean value of independent variables
39  TVectorD fMaxVariables; // max value of independent variables
40  TVectorD fMinVariables; // min value of independent variables
41 
42  Int_t fSampleSize; // Size of training sample
43 
44  TVectorD fTestQuantity; // Test sample, dependent quantity
45  TVectorD fTestSqError; // Test sample, Error in quantity
46  TVectorD fTestVariables; // Test sample, independent variables
47 
48  Int_t fTestSampleSize; // Size of test sample
49 
50  Double_t fMinAngle; // Min angle for acepting new function
51  Double_t fMaxAngle; // Max angle for acepting new function
52  Int_t fMaxTerms; // Max terms expected in final expr.
53  Double_t fMinRelativeError; // Min relative error accepted
54  Int_t *fMaxPowers; // [fNVariables] maximum powers
55  Double_t fPowerLimit; // Control parameter
56 
57 
58  TMatrixD fFunctions; // Functions evaluated over sample
59  Int_t fMaxFunctions; // max number of functions
60  Int_t *fFunctionCodes; // [fMaxFunctions] acceptance code
61  Int_t fMaxStudy; // max functions to study
62  Int_t fMaxFuncNV; // fMaxFunctions*fNVariables
63 
64  TMatrixD fOrthFunctions; // As above, but orthogonalised
65  TVectorD fOrthFunctionNorms; // Norm of the evaluated functions
66 
67 
68  Int_t *fMaxPowersFinal; // [fNVariables] maximum powers from fit;
69  Int_t *fPowers; // [fMaxFuncNV] where fMaxFuncNV = fMaxFunctions*fNVariables
70  Int_t *fPowerIndex; // [fMaxTerms] Index of accepted powers
71 
72  TVectorD fResiduals; // Vector of the final residuals
73  Double_t fMaxResidual; // Max redsidual value
74  Double_t fMinResidual; // Min redsidual value
75  Int_t fMaxResidualRow; // Row giving max residual
76  Int_t fMinResidualRow; // Row giving min residual
77  Double_t fSumSqResidual; // Sum of Square residuals
78 
79  Int_t fNCoefficients; // Dimension of model coefficients
80  TVectorD fOrthCoefficients; // The model coefficients
81  TMatrixD fOrthCurvatureMatrix; // Model matrix
82  TVectorD fCoefficients; // Vector of the final coefficients
83  TVectorD fCoefficientsRMS; // Vector of RMS of coefficients
84  Double_t fRMS; // Root mean square of fit
85  Double_t fChi2; // Chi square of fit
86  Int_t fParameterisationCode; // Exit code of parameterisation
87 
88  Double_t fError; // Error from parameterization
89  Double_t fTestError; // Error from test
90  Double_t fPrecision; // Relative precision of param
91  Double_t fTestPrecision; // Relative precision of test
92  Double_t fCorrelationCoeff; // Multi Correlation coefficient
93  TMatrixD fCorrelationMatrix; // Correlation matrix
94  Double_t fTestCorrelationCoeff; // Multi Correlation coefficient
95 
96  TList* fHistograms; // List of histograms
97  Byte_t fHistogramMask; // Bit pattern of hisograms used
98  Int_t fBinVarX; // Number of bin in independent variables
99  Int_t fBinVarY; // Number of bin in dependent variables
100 
101  TVirtualFitter* fFitter; //! Fit object (MINUIT)
102 
103  EMDFPolyType fPolyType; // Type of polynomials to use
104  Bool_t fShowCorrelation; // print correlation matrix
105  Bool_t fIsUserFunction; // Flag for user defined function
106  Bool_t fIsVerbose; //
107 
108  virtual Double_t EvalFactor(Int_t p, Double_t x) const;
109  virtual Double_t EvalControl(const Int_t *powers) const;
110  virtual void MakeCoefficientErrors();
111  virtual void MakeCorrelation();
112  virtual Double_t MakeGramSchmidt(Int_t function);
113  virtual void MakeCoefficients();
114  virtual void MakeCandidates();
115  virtual void MakeNormalized();
116  virtual void MakeParameterization();
117  virtual void MakeRealCode(const char *filename,
118  const char *classname,
119  Option_t *option="");
120  virtual Bool_t Select(const Int_t *iv);
121  virtual Bool_t TestFunction(Double_t squareResidual,
122  Double_t dResidur);
123 public:
124  TMultiDimFit();
125  TMultiDimFit(Int_t dimension,
126  EMDFPolyType type=kMonomials,
127  Option_t *option="");
128  virtual ~TMultiDimFit();
129 
130  virtual void AddRow(const Double_t *x, Double_t D, Double_t E=0);
131  virtual void AddTestRow(const Double_t *x, Double_t D, Double_t E=0);
132  virtual void Browse(TBrowser* b);
133  virtual void Clear(Option_t *option=""); // *MENU*
134  virtual void Draw(Option_t * ="d") { }
135  virtual Double_t Eval(const Double_t *x, const Double_t *coeff=0) const;
136  virtual Double_t EvalError(const Double_t *x, const Double_t *coeff=0) const;
137  virtual void FindParameterization(Option_t* option=""); // *MENU*
138  virtual void Fit(Option_t *option=""); // *MENU*
139 
140  Double_t GetChi2() const { return fChi2; }
141  const TMatrixD* GetCorrelationMatrix() const { return &fCorrelationMatrix; }
142  const TVectorD* GetCoefficients() const { return &fCoefficients; }
143  const TVectorD* GetCoefficientsRMS() const { return &fCoefficientsRMS; }
144  Double_t GetError() const { return fError; }
145  Int_t* GetFunctionCodes() const { return fFunctionCodes; }
146  const TMatrixD* GetFunctions() const { return &fFunctions; }
147  virtual TList* GetHistograms() const { return fHistograms; }
148  Double_t GetMaxAngle() const { return fMaxAngle; }
149  Int_t GetMaxFunctions() const { return fMaxFunctions; }
150  Int_t* GetMaxPowers() const { return fMaxPowers; }
151  Double_t GetMaxQuantity() const { return fMaxQuantity; }
152  Int_t GetMaxStudy() const { return fMaxStudy; }
153  Int_t GetMaxTerms() const { return fMaxTerms; }
154  const TVectorD* GetMaxVariables() const { return &fMaxVariables; }
155  Double_t GetMeanQuantity() const { return fMeanQuantity; }
156  const TVectorD* GetMeanVariables() const { return &fMeanVariables; }
157  Double_t GetMinAngle() const { return fMinAngle; }
158  Double_t GetMinQuantity() const { return fMinQuantity; }
159  Double_t GetMinRelativeError() const { return fMinRelativeError; }
160  const TVectorD* GetMinVariables() const { return &fMinVariables; }
161  Int_t GetNVariables() const { return fNVariables; }
162  Int_t GetNCoefficients() const { return fNCoefficients; }
163  Int_t GetPolyType() const { return fPolyType; }
164  Int_t* GetPowerIndex() const { return fPowerIndex; }
165  Double_t GetPowerLimit() const { return fPowerLimit; }
166  const Int_t* GetPowers() const { return fPowers; }
167  Double_t GetPrecision() const { return fPrecision; }
168  const TVectorD* GetQuantity() const { return &fQuantity; }
169  Double_t GetResidualMax() const { return fMaxResidual; }
170  Double_t GetResidualMin() const { return fMinResidual; }
171  Int_t GetResidualMaxRow() const { return fMaxResidualRow; }
172  Int_t GetResidualMinRow() const { return fMinResidualRow; }
173  Double_t GetResidualSumSq() const { return fSumSqResidual; }
174  Double_t GetRMS() const { return fRMS; }
175  Int_t GetSampleSize() const { return fSampleSize; }
176  const TVectorD* GetSqError() const { return &fSqError; }
177  Double_t GetSumSqAvgQuantity() const { return fSumSqAvgQuantity; }
178  Double_t GetSumSqQuantity() const { return fSumSqQuantity; }
179  Double_t GetTestError() const { return fTestError; }
180  Double_t GetTestPrecision() const { return fTestPrecision; }
181  const TVectorD* GetTestQuantity() const { return &fTestQuantity; }
182  Int_t GetTestSampleSize() const { return fTestSampleSize; }
183  const TVectorD* GetTestSqError() const { return &fTestSqError; }
184  const TVectorD* GetTestVariables() const { return &fTestVariables; }
185  const TVectorD* GetVariables() const { return &fVariables; }
186 
187  static TMultiDimFit* Instance();
188  virtual Bool_t IsFolder() const { return kTRUE; }
189  virtual Double_t MakeChi2(const Double_t* coeff=0);
190  virtual void MakeCode(const char *functionName="MDF", Option_t *option=""); // *MENU*
191  virtual void MakeHistograms(Option_t* option="A"); // *MENU*
192  virtual void MakeMethod(const Char_t* className="MDF", Option_t* option=""); // *MENU*
193  virtual void Print(Option_t *option="ps") const; // *MENU*
194 
195  void SetBinVarX(Int_t nbbinvarx) {fBinVarX = nbbinvarx;}
196  void SetBinVarY(Int_t nbbinvary) {fBinVarY = nbbinvary;}
197  void SetMaxAngle(Double_t angle=0);
198  void SetMaxFunctions(Int_t n) { fMaxFunctions = n; }
199  void SetMaxPowers(const Int_t *powers);
200  void SetMaxStudy(Int_t n) { fMaxStudy = n; }
201  void SetMaxTerms(Int_t terms) { fMaxTerms = terms; }
202  void SetMinRelativeError(Double_t error);
203  void SetMinAngle(Double_t angle=1);
204  void SetPowerLimit(Double_t limit=1e-3);
205  virtual void SetPowers(const Int_t *powers, Int_t terms);
206 
207  ClassDef(TMultiDimFit,2) // Multi dimensional fit class
208 }
209 ;
210 #endif