4 #ifndef ROOT_TMultiDimFit
5 #define ROOT_TMultiDimFit
15 class TMultiDimFit :
public TNamed {
25 static TMultiDimFit* fgInstance;
30 Double_t fMeanQuantity;
31 Double_t fMaxQuantity;
32 Double_t fMinQuantity;
33 Double_t fSumSqQuantity;
34 Double_t fSumSqAvgQuantity;
38 TVectorD fMeanVariables;
39 TVectorD fMaxVariables;
40 TVectorD fMinVariables;
44 TVectorD fTestQuantity;
45 TVectorD fTestSqError;
46 TVectorD fTestVariables;
48 Int_t fTestSampleSize;
53 Double_t fMinRelativeError;
60 Int_t *fFunctionCodes;
64 TMatrixD fOrthFunctions;
65 TVectorD fOrthFunctionNorms;
68 Int_t *fMaxPowersFinal;
73 Double_t fMaxResidual;
74 Double_t fMinResidual;
75 Int_t fMaxResidualRow;
76 Int_t fMinResidualRow;
77 Double_t fSumSqResidual;
80 TVectorD fOrthCoefficients;
81 TMatrixD fOrthCurvatureMatrix;
82 TVectorD fCoefficients;
83 TVectorD fCoefficientsRMS;
86 Int_t fParameterisationCode;
91 Double_t fTestPrecision;
92 Double_t fCorrelationCoeff;
93 TMatrixD fCorrelationMatrix;
94 Double_t fTestCorrelationCoeff;
97 Byte_t fHistogramMask;
101 TVirtualFitter* fFitter;
103 EMDFPolyType fPolyType;
104 Bool_t fShowCorrelation;
105 Bool_t fIsUserFunction;
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,
125 TMultiDimFit(Int_t dimension,
126 EMDFPolyType type=kMonomials,
127 Option_t *option=
"");
128 virtual ~TMultiDimFit();
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=
"");
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=
"");
138 virtual void Fit(Option_t *option=
"");
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; }
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=
"");
191 virtual void MakeHistograms(Option_t* option=
"A");
192 virtual void MakeMethod(
const Char_t* className=
"MDF", Option_t* option=
"");
193 virtual void Print(Option_t *option=
"ps")
const;
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);
207 ClassDef(TMultiDimFit,2)