12 #ifndef ROOT_TLinearFitter
13 #define ROOT_TLinearFitter
147 #include "TFormula.h"
151 class TLinearFitter:
public TVirtualFitter {
155 TMatrixDSym fParCovar;
159 TMatrixDSym fDesignTemp;
160 TMatrixDSym fDesignTemp2;
161 TMatrixDSym fDesignTemp3;
168 static std::map<TString,TFormula*> fgFormulaMap;
169 TObjArray fFunctions;
175 TFormula *fInputFunction;
194 Bool_t *fFixedParams;
197 void AddToDesign(Double_t *x, Double_t y, Double_t e);
198 void ComputeTValues();
199 Int_t GraphLinearFitter(Double_t h);
200 Int_t Graph2DLinearFitter(Double_t h);
201 Int_t HistLinearFitter();
202 Int_t MultiGraphLinearFitter(Double_t h);
205 Int_t Partition(Int_t nmini, Int_t *indsubdat);
206 void RDraw(Int_t *subdat, Int_t *indsubdat);
207 void CreateSubset(Int_t ntotal, Int_t h, Int_t *index);
208 Double_t CStep(Int_t step, Int_t h, Double_t *residuals, Int_t *index, Int_t *subdat, Int_t start, Int_t end);
213 TLinearFitter(Int_t ndim,
const char *formula, Option_t *opt=
"D");
214 TLinearFitter(Int_t ndim);
215 TLinearFitter(TFormula *
function, Option_t *opt=
"D");
216 TLinearFitter(
const TLinearFitter& tlf);
217 virtual ~TLinearFitter();
219 TLinearFitter& operator=(
const TLinearFitter& tlf);
220 virtual void Add(TLinearFitter *tlf);
221 virtual void AddPoint(Double_t *x, Double_t y, Double_t e=1);
222 virtual void AddTempMatrices();
223 virtual void AssignData(Int_t npoints, Int_t xncols, Double_t *x, Double_t *y, Double_t *e=0);
225 virtual void Clear(Option_t *option=
"");
226 virtual void ClearPoints();
227 virtual void Chisquare();
228 virtual Int_t Eval();
229 virtual Int_t EvalRobust(Double_t h=-1);
230 virtual Int_t ExecuteCommand(
const char *command, Double_t *args, Int_t nargs);
231 virtual void FixParameter(Int_t ipar);
232 virtual void FixParameter(Int_t ipar, Double_t parvalue);
233 virtual void GetAtbVector(TVectorD &v);
234 virtual Double_t GetChisquare();
235 virtual void GetConfidenceIntervals(Int_t n, Int_t ndim,
const Double_t *x, Double_t *ci, Double_t cl=0.95);
236 virtual void GetConfidenceIntervals(TObject *obj, Double_t cl=0.95);
237 virtual Double_t* GetCovarianceMatrix()
const;
238 virtual void GetCovarianceMatrix(TMatrixD &matr);
239 virtual Double_t GetCovarianceMatrixElement(Int_t i, Int_t j)
const {
return fParCovar(i, j);}
240 virtual void GetDesignMatrix(TMatrixD &matr);
241 virtual void GetErrors(TVectorD &vpar);
242 virtual Int_t GetNumberTotalParameters()
const {
return fNfunctions;}
243 virtual Int_t GetNumberFreeParameters()
const {
return fNfunctions-fNfixed;}
244 virtual Int_t GetNpoints() {
return fNpoints; }
245 virtual void GetParameters(TVectorD &vpar);
246 virtual Double_t GetParameter(Int_t ipar)
const {
return fParams(ipar);}
247 virtual Int_t GetParameter(Int_t ipar,
char* name,Double_t& value,Double_t& ,Double_t& , Double_t& )
const;
248 virtual const char *GetParName(Int_t ipar)
const;
249 virtual Double_t GetParError(Int_t ipar)
const;
250 virtual Double_t GetParTValue(Int_t ipar);
251 virtual Double_t GetParSignificance(Int_t ipar);
252 virtual void GetFitSample(TBits& bits);
253 virtual Double_t GetY2()
const {
return fY2;}
254 virtual Bool_t IsFixed(Int_t ipar)
const {
return fFixedParams[ipar];}
255 virtual Int_t Merge(TCollection *list);
256 virtual void PrintResults(Int_t level, Double_t amin=0)
const;
257 virtual void ReleaseParameter(Int_t ipar);
258 virtual void SetBasisFunctions(TObjArray * functions);
259 virtual void SetDim(Int_t n);
260 virtual void SetFormula(
const char* formula);
261 virtual void SetFormula(TFormula *
function);
262 virtual void StoreData(Bool_t store) {fStoreData=store;}
264 virtual Bool_t UpdateMatrix();
267 virtual Double_t Chisquare(Int_t , Double_t * )
const {
return 0;}
268 virtual Int_t GetErrors(Int_t ,Double_t & , Double_t & , Double_t & , Double_t & )
const {
return 0;}
270 virtual Int_t GetStats(Double_t& , Double_t& , Double_t& , Int_t& , Int_t& )
const {
return 0;}
271 virtual Double_t GetSumLog(Int_t ) {
return 0;}
272 virtual void SetFitMethod(
const char * ) {;}
273 virtual Int_t SetParameter(Int_t ,
const char * ,Double_t ,Double_t ,Double_t , Double_t ) {
return 0;}
275 ClassDef(TLinearFitter, 2)