Logo ROOT   6.08/07
Reference Guide
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 #ifndef ROOT_TNamed
8 #include "TNamed.h"
9 #endif
10 #ifndef ROOT_TVectorD
11 #include "TVectorD.h"
12 #endif
13 #ifndef ROOT_TMatrixD
14 #include "TMatrixD.h"
15 #endif
16 #ifndef ROOT_TList
17 #include "TList.h"
18 #endif
19 #ifndef ROOT_TVirtualFitter
20 #include "TVirtualFitter.h"
21 #endif
22 
23 class TBrowser;
24 
25 class TMultiDimFit : public TNamed {
26 
27 public:
28  enum EMDFPolyType {
32  };
33 
34 private:
35  static TMultiDimFit* fgInstance; // Static instance
36 protected:
37 
38  TVectorD fQuantity; // Training sample, dependent quantity
39  TVectorD fSqError; // Training sample, error in quantity
40  Double_t fMeanQuantity; // Mean of dependent quantity
41  Double_t fMaxQuantity; // Max value of dependent quantity
42  Double_t fMinQuantity; // Min value of dependent quantity
43  Double_t fSumSqQuantity; // SumSquare of dependent quantity
44  Double_t fSumSqAvgQuantity; // Sum of squares away from mean
45 
46  TVectorD fVariables; // Training sample, independent variables
47  Int_t fNVariables; // Number of independent variables
48  TVectorD fMeanVariables; // mean value of independent variables
49  TVectorD fMaxVariables; // max value of independent variables
50  TVectorD fMinVariables; // min value of independent variables
51 
52  Int_t fSampleSize; // Size of training sample
53 
54  TVectorD fTestQuantity; // Test sample, dependent quantity
55  TVectorD fTestSqError; // Test sample, Error in quantity
56  TVectorD fTestVariables; // Test sample, independent variables
57 
58  Int_t fTestSampleSize; // Size of test sample
59 
60  Double_t fMinAngle; // Min angle for acepting new function
61  Double_t fMaxAngle; // Max angle for acepting new function
62  Int_t fMaxTerms; // Max terms expected in final expr.
63  Double_t fMinRelativeError; // Min relative error accepted
64  Int_t *fMaxPowers; // [fNVariables] maximum powers
65  Double_t fPowerLimit; // Control parameter
66 
67 
68  TMatrixD fFunctions; // Functions evaluated over sample
69  Int_t fMaxFunctions; // max number of functions
70  Int_t *fFunctionCodes; // [fMaxFunctions] acceptance code
71  Int_t fMaxStudy; // max functions to study
72  Int_t fMaxFuncNV; // fMaxFunctions*fNVariables
73 
74  TMatrixD fOrthFunctions; // As above, but orthogonalised
75  TVectorD fOrthFunctionNorms; // Norm of the evaluated functions
76 
77 
78  Int_t *fMaxPowersFinal; // [fNVariables] maximum powers from fit;
79  Int_t *fPowers; // [fMaxFuncNV] where fMaxFuncNV = fMaxFunctions*fNVariables
80  Int_t *fPowerIndex; // [fMaxTerms] Index of accepted powers
81 
82  TVectorD fResiduals; // Vector of the final residuals
83  Double_t fMaxResidual; // Max redsidual value
84  Double_t fMinResidual; // Min redsidual value
85  Int_t fMaxResidualRow; // Row giving max residual
86  Int_t fMinResidualRow; // Row giving min residual
87  Double_t fSumSqResidual; // Sum of Square residuals
88 
89  Int_t fNCoefficients; // Dimension of model coefficients
90  TVectorD fOrthCoefficients; // The model coefficients
91  TMatrixD fOrthCurvatureMatrix; // Model matrix
92  TVectorD fCoefficients; // Vector of the final coefficients
93  TVectorD fCoefficientsRMS; // Vector of RMS of coefficients
94  Double_t fRMS; // Root mean square of fit
95  Double_t fChi2; // Chi square of fit
96  Int_t fParameterisationCode; // Exit code of parameterisation
97 
98  Double_t fError; // Error from parameterization
99  Double_t fTestError; // Error from test
100  Double_t fPrecision; // Relative precision of param
101  Double_t fTestPrecision; // Relative precision of test
102  Double_t fCorrelationCoeff; // Multi Correlation coefficient
103  TMatrixD fCorrelationMatrix; // Correlation matrix
104  Double_t fTestCorrelationCoeff; // Multi Correlation coefficient
105 
106  TList* fHistograms; // List of histograms
107  Byte_t fHistogramMask; // Bit pattern of hisograms used
108  Int_t fBinVarX; // Number of bin in independent variables
109  Int_t fBinVarY; // Number of bin in dependent variables
110 
111  TVirtualFitter* fFitter; //! Fit object (MINUIT)
112 
113  EMDFPolyType fPolyType; // Type of polynomials to use
114  Bool_t fShowCorrelation; // print correlation matrix
115  Bool_t fIsUserFunction; // Flag for user defined function
117 
118  virtual Double_t EvalFactor(Int_t p, Double_t x) const;
119  virtual Double_t EvalControl(const Int_t *powers) const;
120  virtual void MakeCoefficientErrors();
121  virtual void MakeCorrelation();
122  virtual Double_t MakeGramSchmidt(Int_t function);
123  virtual void MakeCoefficients();
124  virtual void MakeCandidates();
125  virtual void MakeNormalized();
126  virtual void MakeParameterization();
127  virtual void MakeRealCode(const char *filename,
128  const char *classname,
129  Option_t *option="");
130  virtual Bool_t Select(const Int_t *iv);
131  virtual Bool_t TestFunction(Double_t squareResidual,
132  Double_t dResidur);
133 public:
134  TMultiDimFit();
135  TMultiDimFit(Int_t dimension,
137  Option_t *option="");
138  virtual ~TMultiDimFit();
139 
140  virtual void AddRow(const Double_t *x, Double_t D, Double_t E=0);
141  virtual void AddTestRow(const Double_t *x, Double_t D, Double_t E=0);
142  virtual void Browse(TBrowser* b);
143  virtual void Clear(Option_t *option=""); // *MENU*
144  virtual void Draw(Option_t * ="d") { }
145  virtual Double_t Eval(const Double_t *x, const Double_t *coeff=0) const;
146  virtual Double_t EvalError(const Double_t *x, const Double_t *coeff=0) const;
147  virtual void FindParameterization(Option_t* option=""); // *MENU*
148  virtual void Fit(Option_t *option=""); // *MENU*
149 
150  Double_t GetChi2() const { return fChi2; }
152  const TVectorD* GetCoefficients() const { return &fCoefficients; }
153  const TVectorD* GetCoefficientsRMS() const { return &fCoefficientsRMS; }
154  Double_t GetError() const { return fError; }
155  Int_t* GetFunctionCodes() const { return fFunctionCodes; }
156  const TMatrixD* GetFunctions() const { return &fFunctions; }
157  virtual TList* GetHistograms() const { return fHistograms; }
158  Double_t GetMaxAngle() const { return fMaxAngle; }
159  Int_t GetMaxFunctions() const { return fMaxFunctions; }
160  Int_t* GetMaxPowers() const { return fMaxPowers; }
162  Int_t GetMaxStudy() const { return fMaxStudy; }
163  Int_t GetMaxTerms() const { return fMaxTerms; }
164  const TVectorD* GetMaxVariables() const { return &fMaxVariables; }
166  const TVectorD* GetMeanVariables() const { return &fMeanVariables; }
167  Double_t GetMinAngle() const { return fMinAngle; }
170  const TVectorD* GetMinVariables() const { return &fMinVariables; }
171  Int_t GetNVariables() const { return fNVariables; }
173  Int_t GetPolyType() const { return fPolyType; }
174  Int_t* GetPowerIndex() const { return fPowerIndex; }
175  Double_t GetPowerLimit() const { return fPowerLimit; }
176  const Int_t* GetPowers() const { return fPowers; }
177  Double_t GetPrecision() const { return fPrecision; }
178  const TVectorD* GetQuantity() const { return &fQuantity; }
184  Double_t GetRMS() const { return fRMS; }
185  Int_t GetSampleSize() const { return fSampleSize; }
186  const TVectorD* GetSqError() const { return &fSqError; }
189  Double_t GetTestError() const { return fTestError; }
191  const TVectorD* GetTestQuantity() const { return &fTestQuantity; }
193  const TVectorD* GetTestSqError() const { return &fTestSqError; }
194  const TVectorD* GetTestVariables() const { return &fTestVariables; }
195  const TVectorD* GetVariables() const { return &fVariables; }
196 
197  static TMultiDimFit* Instance();
198  virtual Bool_t IsFolder() const { return kTRUE; }
199  virtual Double_t MakeChi2(const Double_t* coeff=0);
200  virtual void MakeCode(const char *functionName="MDF", Option_t *option=""); // *MENU*
201  virtual void MakeHistograms(Option_t* option="A"); // *MENU*
202  virtual void MakeMethod(const Char_t* className="MDF", Option_t* option=""); // *MENU*
203  virtual void Print(Option_t *option="ps") const; // *MENU*
204 
205  void SetBinVarX(Int_t nbbinvarx) {fBinVarX = nbbinvarx;}
206  void SetBinVarY(Int_t nbbinvary) {fBinVarY = nbbinvary;}
207  void SetMaxAngle(Double_t angle=0);
208  void SetMaxFunctions(Int_t n) { fMaxFunctions = n; }
209  void SetMaxPowers(const Int_t *powers);
210  void SetMaxStudy(Int_t n) { fMaxStudy = n; }
211  void SetMaxTerms(Int_t terms) { fMaxTerms = terms; }
212  void SetMinRelativeError(Double_t error);
213  void SetMinAngle(Double_t angle=1);
214  void SetPowerLimit(Double_t limit=1e-3);
215  virtual void SetPowers(const Int_t *powers, Int_t terms);
216 
217  ClassDef(TMultiDimFit,2) // Multi dimensional fit class
218 }
219 ;
220 #endif
Int_t * fMaxPowersFinal
Definition: TMultiDimFit.h:78
const TVectorD * GetSqError() const
Definition: TMultiDimFit.h:186
Double_t GetPrecision() const
Definition: TMultiDimFit.h:177
virtual Double_t MakeChi2(const Double_t *coeff=0)
Calculate Chi square over either the test sample.
TVirtualFitter * fFitter
Definition: TMultiDimFit.h:111
void SetBinVarX(Int_t nbbinvarx)
Definition: TMultiDimFit.h:205
virtual Double_t EvalFactor(Int_t p, Double_t x) const
PRIVATE METHOD: Evaluate function with power p at variable value x.
Double_t fError
Definition: TMultiDimFit.h:98
TVectorD fResiduals
Definition: TMultiDimFit.h:82
Int_t * fPowerIndex
Definition: TMultiDimFit.h:80
Double_t fPrecision
Definition: TMultiDimFit.h:100
const char Option_t
Definition: RtypesCore.h:62
virtual Double_t EvalError(const Double_t *x, const Double_t *coeff=0) const
Evaluate parameterization error at point x.
static TMultiDimFit * fgInstance
Definition: TMultiDimFit.h:35
Bool_t fShowCorrelation
Definition: TMultiDimFit.h:114
virtual void Fit(Option_t *option="")
Try to fit the found parameterisation to the test sample.
virtual ~TMultiDimFit()
Destructor.
Int_t fMaxFuncNV
Definition: TMultiDimFit.h:72
Int_t fTestSampleSize
Definition: TMultiDimFit.h:58
TVectorD fCoefficients
Definition: TMultiDimFit.h:92
Double_t fMinRelativeError
Definition: TMultiDimFit.h:63
void SetMaxPowers(const Int_t *powers)
Set the maximum power to be considered in the fit for each variable.
TMatrixD fOrthFunctions
Definition: TMultiDimFit.h:74
Double_t GetMaxQuantity() const
Definition: TMultiDimFit.h:161
TMatrixD fOrthCurvatureMatrix
Definition: TMultiDimFit.h:91
Int_t GetPolyType() const
Definition: TMultiDimFit.h:173
const Int_t * GetPowers() const
Definition: TMultiDimFit.h:176
Double_t fTestError
Definition: TMultiDimFit.h:99
Bool_t fIsUserFunction
Definition: TMultiDimFit.h:115
Int_t GetSampleSize() const
Definition: TMultiDimFit.h:185
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
virtual TList * GetHistograms() const
Definition: TMultiDimFit.h:157
Double_t GetTestPrecision() const
Definition: TMultiDimFit.h:190
virtual void Clear(Option_t *option="")
Clear internal structures and variables.
Double_t fMaxAngle
Definition: TMultiDimFit.h:61
Double_t GetTestError() const
Definition: TMultiDimFit.h:189
virtual void MakeNormalized()
PRIVATE METHOD: Normalize data to the interval [-1;1].
virtual void MakeRealCode(const char *filename, const char *classname, Option_t *option="")
PRIVATE METHOD: This is the method that actually generates the code for the evaluation the parameteri...
virtual Bool_t TestFunction(Double_t squareResidual, Double_t dResidur)
PRIVATE METHOD: Test whether the currently considered function contributes to the fit...
virtual void MakeParameterization()
PRIVATE METHOD: Find the parameterization over the training sample.
TVectorD fTestVariables
Definition: TMultiDimFit.h:56
Double_t fSumSqQuantity
Definition: TMultiDimFit.h:43
virtual void MakeCoefficientErrors()
PRIVATE METHOD: Compute the errors on the coefficients.
Double_t fMinAngle
Definition: TMultiDimFit.h:60
const TVectorD * GetMinVariables() const
Definition: TMultiDimFit.h:170
const TVectorD * GetTestQuantity() const
Definition: TMultiDimFit.h:191
TVectorD fTestQuantity
Definition: TMultiDimFit.h:54
Double_t GetChi2() const
Definition: TMultiDimFit.h:150
TVectorD fTestSqError
Definition: TMultiDimFit.h:55
Int_t * fFunctionCodes
Definition: TMultiDimFit.h:70
Double_t x[n]
Definition: legend1.C:17
Double_t GetRMS() const
Definition: TMultiDimFit.h:184
#define ClassDef(name, id)
Definition: Rtypes.h:254
void SetPowerLimit(Double_t limit=1e-3)
Set the user parameter for the function selection.
Int_t GetResidualMaxRow() const
Definition: TMultiDimFit.h:181
Double_t fSumSqAvgQuantity
Definition: TMultiDimFit.h:44
unsigned char Byte_t
Definition: RtypesCore.h:60
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:33
static TMultiDimFit * Instance()
Return the static instance.
TVectorD fSqError
Definition: TMultiDimFit.h:39
TMatrixD fCorrelationMatrix
Definition: TMultiDimFit.h:103
Int_t GetNCoefficients() const
Definition: TMultiDimFit.h:172
TVectorD fOrthFunctionNorms
Definition: TMultiDimFit.h:75
void SetMinAngle(Double_t angle=1)
Set the min angle (in degrees) between a new candidate function and the subspace spanned by the previ...
Double_t fMaxQuantity
Definition: TMultiDimFit.h:41
void SetMaxAngle(Double_t angle=0)
Set the max angle (in degrees) between the initial data vector to be fitted, and the new candidate fu...
Byte_t fHistogramMask
Definition: TMultiDimFit.h:107
const TVectorD * GetCoefficients() const
Definition: TMultiDimFit.h:152
TList * fHistograms
Definition: TMultiDimFit.h:106
virtual void AddRow(const Double_t *x, Double_t D, Double_t E=0)
Add a row consisting of fNVariables independent variables, the known, dependent quantity, and optionally, the square error in the dependent quantity, to the training sample to be used for the parameterization.
Int_t * GetFunctionCodes() const
Definition: TMultiDimFit.h:155
virtual Bool_t Select(const Int_t *iv)
Selection method.
const TVectorD * GetMaxVariables() const
Definition: TMultiDimFit.h:164
const TVectorD * GetQuantity() const
Definition: TMultiDimFit.h:178
Int_t fNVariables
Definition: TMultiDimFit.h:47
TVectorD fQuantity
Definition: TMultiDimFit.h:38
void SetMaxTerms(Int_t terms)
Definition: TMultiDimFit.h:211
TVectorD fMeanVariables
Definition: TMultiDimFit.h:48
virtual Double_t EvalControl(const Int_t *powers) const
PRIVATE METHOD: Calculate the control parameter from the passed powers.
Double_t GetResidualSumSq() const
Definition: TMultiDimFit.h:183
const TVectorD * GetMeanVariables() const
Definition: TMultiDimFit.h:166
Double_t fTestPrecision
Definition: TMultiDimFit.h:101
A doubly linked list.
Definition: TList.h:47
Int_t GetMaxStudy() const
Definition: TMultiDimFit.h:162
Double_t fMeanQuantity
Definition: TMultiDimFit.h:40
Double_t fMaxResidual
Definition: TMultiDimFit.h:83
Int_t * fPowers
Definition: TMultiDimFit.h:79
Int_t * fMaxPowers
Definition: TMultiDimFit.h:64
Using a TBrowser one can browse all ROOT objects.
Definition: TBrowser.h:41
Int_t GetNVariables() const
Definition: TMultiDimFit.h:171
Int_t fMaxFunctions
Definition: TMultiDimFit.h:69
virtual void Print(Option_t *option="ps") const
Print statistics etc.
virtual void MakeCandidates()
PRIVATE METHOD: Create list of candidate functions for the parameterisation.
Int_t fSampleSize
Definition: TMultiDimFit.h:52
Double_t fSumSqResidual
Definition: TMultiDimFit.h:87
Int_t fMaxTerms
Definition: TMultiDimFit.h:62
Double_t fChi2
Definition: TMultiDimFit.h:95
Double_t GetSumSqAvgQuantity() const
Definition: TMultiDimFit.h:187
Multidimensional Fits in ROOT.
Definition: TMultiDimFit.h:25
Int_t fParameterisationCode
Definition: TMultiDimFit.h:96
Double_t E()
Definition: TMath.h:54
virtual void FindParameterization(Option_t *option="")
Find the parameterization.
Int_t * GetPowerIndex() const
Definition: TMultiDimFit.h:174
Bool_t fIsVerbose
Definition: TMultiDimFit.h:116
Double_t fMinQuantity
Definition: TMultiDimFit.h:42
TVectorD fVariables
Definition: TMultiDimFit.h:46
virtual void SetPowers(const Int_t *powers, Int_t terms)
Define a user function.
Double_t GetMinRelativeError() const
Definition: TMultiDimFit.h:169
Double_t GetMeanQuantity() const
Definition: TMultiDimFit.h:165
virtual void AddTestRow(const Double_t *x, Double_t D, Double_t E=0)
Add a row consisting of fNVariables independent variables, the known, dependent quantity, and optionally, the square error in the dependent quantity, to the test sample to be used for the test of the parameterization.
TMatrixD fFunctions
Definition: TMultiDimFit.h:68
virtual void MakeMethod(const Char_t *className="MDF", Option_t *option="")
Generate the file <classname>MDF.cxx which contains the implementation of the method: ...
Int_t GetMaxFunctions() const
Definition: TMultiDimFit.h:159
Double_t fMinResidual
Definition: TMultiDimFit.h:84
virtual Double_t Eval(const Double_t *x, const Double_t *coeff=0) const
Evaluate parameterization at point x.
virtual void MakeHistograms(Option_t *option="A")
Make histograms of the result of the analysis.
Int_t * GetMaxPowers() const
Definition: TMultiDimFit.h:160
EMDFPolyType fPolyType
Fit object (MINUIT)
Definition: TMultiDimFit.h:113
const TVectorD * GetVariables() const
Definition: TMultiDimFit.h:195
Double_t GetPowerLimit() const
Definition: TMultiDimFit.h:175
double Double_t
Definition: RtypesCore.h:55
int type
Definition: TGX11.cxx:120
void SetMinRelativeError(Double_t error)
Set the acceptable relative error for when sum of square residuals is considered minimized.
Double_t GetError() const
Definition: TMultiDimFit.h:154
Int_t fMinResidualRow
Definition: TMultiDimFit.h:86
virtual Bool_t IsFolder() const
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects)...
Definition: TMultiDimFit.h:198
TVectorD fCoefficientsRMS
Definition: TMultiDimFit.h:93
Int_t fNCoefficients
Definition: TMultiDimFit.h:89
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
Definition: TRolke.cxx:630
virtual void MakeCode(const char *functionName="MDF", Option_t *option="")
Generate the file <filename> with .C appended if argument doesn&#39;t end in .cxx or .C.
TMultiDimFit()
Empty CTOR. Do not use.
const TVectorD * GetCoefficientsRMS() const
Definition: TMultiDimFit.h:153
Int_t fMaxStudy
Definition: TMultiDimFit.h:71
Double_t fPowerLimit
Definition: TMultiDimFit.h:65
Abstract Base Class for Fitting.
Int_t fMaxResidualRow
Definition: TMultiDimFit.h:85
char Char_t
Definition: RtypesCore.h:29
Double_t GetResidualMax() const
Definition: TMultiDimFit.h:179
Double_t GetMaxAngle() const
Definition: TMultiDimFit.h:158
Double_t GetSumSqQuantity() const
Definition: TMultiDimFit.h:188
Double_t fRMS
Definition: TMultiDimFit.h:94
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
Definition: TRolke.cxx:630
void SetBinVarY(Int_t nbbinvary)
Definition: TMultiDimFit.h:206
Double_t GetMinAngle() const
Definition: TMultiDimFit.h:167
virtual void MakeCorrelation()
PRIVATE METHOD: Compute the correlation matrix.
virtual Double_t MakeGramSchmidt(Int_t function)
PRIVATE METHOD: Make Gram-Schmidt orthogonalisation.
Double_t fCorrelationCoeff
Definition: TMultiDimFit.h:102
const Bool_t kTRUE
Definition: Rtypes.h:91
TVectorD fMinVariables
Definition: TMultiDimFit.h:50
Int_t GetResidualMinRow() const
Definition: TMultiDimFit.h:182
TVectorD fOrthCoefficients
Definition: TMultiDimFit.h:90
void SetMaxStudy(Int_t n)
Definition: TMultiDimFit.h:210
Int_t GetMaxTerms() const
Definition: TMultiDimFit.h:163
void SetMaxFunctions(Int_t n)
Definition: TMultiDimFit.h:208
const Int_t n
Definition: legend1.C:16
const TVectorD * GetTestVariables() const
Definition: TMultiDimFit.h:194
virtual void Draw(Option_t *="d")
Default Draw method for all objects.
Definition: TMultiDimFit.h:144
const TMatrixD * GetCorrelationMatrix() const
Definition: TMultiDimFit.h:151
virtual void MakeCoefficients()
PRIVATE METHOD: Invert the model matrix B, and compute final coefficients.
TVectorD fMaxVariables
Definition: TMultiDimFit.h:49
Int_t GetTestSampleSize() const
Definition: TMultiDimFit.h:192
const TVectorD * GetTestSqError() const
Definition: TMultiDimFit.h:193
Double_t GetMinQuantity() const
Definition: TMultiDimFit.h:168
Double_t GetResidualMin() const
Definition: TMultiDimFit.h:180
virtual void Browse(TBrowser *b)
Browse the TMultiDimFit object in the TBrowser.
const TMatrixD * GetFunctions() const
Definition: TMultiDimFit.h:156
Double_t fTestCorrelationCoeff
Definition: TMultiDimFit.h:104