ROOT  6.06/09
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
Double_t GetPowerLimit() const
Definition: TMultiDimFit.h:175
const TVectorD * GetCoefficients() const
Definition: TMultiDimFit.h:152
virtual Double_t MakeChi2(const Double_t *coeff=0)
Calculate Chi square over either the test sample.
const TVectorD * GetTestVariables() const
Definition: TMultiDimFit.h:194
TVirtualFitter * fFitter
Definition: TMultiDimFit.h:111
void SetBinVarX(Int_t nbbinvarx)
Definition: TMultiDimFit.h:205
Double_t GetSumSqAvgQuantity() const
Definition: TMultiDimFit.h:187
Double_t GetResidualMin() const
Definition: TMultiDimFit.h:180
Double_t fError
Definition: TMultiDimFit.h:98
Int_t GetMaxFunctions() const
Definition: TMultiDimFit.h:159
TVectorD fResiduals
Definition: TMultiDimFit.h:82
Int_t * fPowerIndex
Definition: TMultiDimFit.h:80
const TVectorD * GetMaxVariables() const
Definition: TMultiDimFit.h:164
Double_t fPrecision
Definition: TMultiDimFit.h:100
const char Option_t
Definition: RtypesCore.h:62
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
Double_t GetChi2() const
Definition: TMultiDimFit.h:150
Int_t fTestSampleSize
Definition: TMultiDimFit.h:58
Int_t GetMaxStudy() const
Definition: TMultiDimFit.h:162
TVectorD fCoefficients
Definition: TMultiDimFit.h:92
virtual void Print(Option_t *option="ps") const
Print statistics etc.
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
TMatrixD fOrthCurvatureMatrix
Definition: TMultiDimFit.h:91
static const char * filename()
Double_t fTestError
Definition: TMultiDimFit.h:99
Bool_t fIsUserFunction
Definition: TMultiDimFit.h:115
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
virtual Double_t EvalFactor(Int_t p, Double_t x) const
PRIVATE METHOD: Evaluate function with power p at variable value x.
virtual void Clear(Option_t *option="")
Clear internal structures and variables.
Double_t fMaxAngle
Definition: TMultiDimFit.h:61
Double_t GetMinAngle() const
Definition: TMultiDimFit.h:167
Int_t GetResidualMaxRow() const
Definition: TMultiDimFit.h:181
Double_t GetMeanQuantity() const
Definition: TMultiDimFit.h:165
virtual void MakeNormalized()
PRIVATE METHOD: Normalize data to the interval [-1;1].
Int_t GetNVariables() const
Definition: TMultiDimFit.h:171
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...
Double_t GetSumSqQuantity() const
Definition: TMultiDimFit.h:188
Int_t GetNCoefficients() const
Definition: TMultiDimFit.h:172
virtual void MakeParameterization()
PRIVATE METHOD: Find the parameterization over the training sample.
TVectorD fTestVariables
Definition: TMultiDimFit.h:56
const TMatrixD * GetCorrelationMatrix() const
Definition: TMultiDimFit.h:151
Double_t fSumSqQuantity
Definition: TMultiDimFit.h:43
const TVectorD * GetSqError() const
Definition: TMultiDimFit.h:186
virtual void MakeCoefficientErrors()
PRIVATE METHOD: Compute the errors on the coefficients.
Double_t fMinAngle
Definition: TMultiDimFit.h:60
Int_t GetPolyType() const
Definition: TMultiDimFit.h:173
virtual Double_t Eval(const Double_t *x, const Double_t *coeff=0) const
Evaluate parameterization at point x.
TVectorD fTestQuantity
Definition: TMultiDimFit.h:54
TVectorD fTestSqError
Definition: TMultiDimFit.h:55
Int_t * fFunctionCodes
Definition: TMultiDimFit.h:70
Double_t x[n]
Definition: legend1.C:17
Double_t GetResidualMax() const
Definition: TMultiDimFit.h:179
#define ClassDef(name, id)
Definition: Rtypes.h:254
void SetPowerLimit(Double_t limit=1e-3)
Set the user parameter for the function selection.
Double_t fSumSqAvgQuantity
Definition: TMultiDimFit.h:44
virtual Double_t EvalControl(const Int_t *powers) const
PRIVATE METHOD: Calculate the control parameter from the passed powers.
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 * GetMaxPowers() const
Definition: TMultiDimFit.h:160
Int_t GetTestSampleSize() const
Definition: TMultiDimFit.h:192
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
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.
Double_t GetResidualSumSq() const
Definition: TMultiDimFit.h:183
virtual Bool_t Select(const Int_t *iv)
Selection method.
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
const TMatrixD * GetFunctions() const
Definition: TMultiDimFit.h:156
Double_t fTestPrecision
Definition: TMultiDimFit.h:101
A doubly linked list.
Definition: TList.h:47
const TVectorD * GetMinVariables() const
Definition: TMultiDimFit.h:170
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
Double_t GetPrecision() const
Definition: TMultiDimFit.h:177
Int_t fMaxFunctions
Definition: TMultiDimFit.h:69
Double_t GetMaxQuantity() const
Definition: TMultiDimFit.h:161
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
Multidimensional Fits in ROOT.
Definition: TMultiDimFit.h:25
Double_t GetRMS() const
Definition: TMultiDimFit.h:184
Int_t fParameterisationCode
Definition: TMultiDimFit.h:96
Double_t E()
Definition: TMath.h:54
virtual void FindParameterization(Option_t *option="")
Find the parameterization.
Double_t GetMaxAngle() const
Definition: TMultiDimFit.h:158
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.
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 MDF.cxx which contains the implementation of the method: ...
Double_t fMinResidual
Definition: TMultiDimFit.h:84
virtual void MakeHistograms(Option_t *option="A")
Make histograms of the result of the analysis.
Int_t GetSampleSize() const
Definition: TMultiDimFit.h:185
const Int_t * GetPowers() const
Definition: TMultiDimFit.h:176
EMDFPolyType fPolyType
Fit object (MINUIT)
Definition: TMultiDimFit.h:113
Int_t * GetFunctionCodes() const
Definition: TMultiDimFit.h:155
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.
Int_t fMinResidualRow
Definition: TMultiDimFit.h:86
TVectorD fCoefficientsRMS
Definition: TMultiDimFit.h:93
Int_t fNCoefficients
Definition: TMultiDimFit.h:89
Double_t GetMinRelativeError() const
Definition: TMultiDimFit.h:169
Double_t GetError() const
Definition: TMultiDimFit.h:154
virtual void MakeCode(const char *functionName="MDF", Option_t *option="")
Generate the file with .C appended if argument doesn't end in .cxx or .C.
TMultiDimFit()
Empty CTOR. Do not use.
const TVectorD * GetMeanVariables() const
Definition: TMultiDimFit.h:166
Int_t fMaxStudy
Definition: TMultiDimFit.h:71
virtual Double_t EvalError(const Double_t *x, const Double_t *coeff=0) const
Evaluate parameterization error at point x.
Double_t fPowerLimit
Definition: TMultiDimFit.h:65
const TVectorD * GetTestSqError() const
Definition: TMultiDimFit.h:193
Abstract Base Class for Fitting.
Int_t fMaxResidualRow
Definition: TMultiDimFit.h:85
const TVectorD * GetQuantity() const
Definition: TMultiDimFit.h:178
char Char_t
Definition: RtypesCore.h:29
Int_t GetMaxTerms() const
Definition: TMultiDimFit.h:163
const TVectorD * GetCoefficientsRMS() const
Definition: TMultiDimFit.h:153
Double_t fRMS
Definition: TMultiDimFit.h:94
virtual Bool_t IsFolder() const
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects)...
Definition: TMultiDimFit.h:198
const TVectorD * GetTestQuantity() const
Definition: TMultiDimFit.h:191
Int_t GetResidualMinRow() const
Definition: TMultiDimFit.h:182
void SetBinVarY(Int_t nbbinvary)
Definition: TMultiDimFit.h:206
virtual TList * GetHistograms() const
Definition: TMultiDimFit.h:157
virtual void MakeCorrelation()
PRIVATE METHOD: Compute the correlation matrix.
const TVectorD * GetVariables() const
Definition: TMultiDimFit.h:195
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
TVectorD fOrthCoefficients
Definition: TMultiDimFit.h:90
void SetMaxStudy(Int_t n)
Definition: TMultiDimFit.h:210
void SetMaxFunctions(Int_t n)
Definition: TMultiDimFit.h:208
Int_t * GetPowerIndex() const
Definition: TMultiDimFit.h:174
const Int_t n
Definition: legend1.C:16
virtual void Draw(Option_t *="d")
Default Draw method for all objects.
Definition: TMultiDimFit.h:144
virtual void MakeCoefficients()
PRIVATE METHOD: Invert the model matrix B, and compute final coefficients.
Double_t GetTestError() const
Definition: TMultiDimFit.h:189
Double_t GetTestPrecision() const
Definition: TMultiDimFit.h:190
Double_t GetMinQuantity() const
Definition: TMultiDimFit.h:168
TVectorD fMaxVariables
Definition: TMultiDimFit.h:49
virtual void Browse(TBrowser *b)
Browse the TMultiDimFit object in the TBrowser.
Double_t fTestCorrelationCoeff
Definition: TMultiDimFit.h:104