00001 #ifndef TPOLINOM_H
00002 #define TPOLINOM_H
00003 #include "TObject.h"
00004 #include "TArrayD.h"
00005 #include "TMatrixD.h"
00006
00007 class TPolinom : public TObject
00008 {
00009 public:
00010 TPolinom(int npw=-1,const double *coefs=0);
00011 TPolinom(const TPolinom &from);
00012 TPolinom(double c0);
00013 TPolinom(double c0,double c1);
00014 TPolinom(double c0,double c1,double c2);
00015 TPolinom &operator=(const TPolinom &from);
00016 virtual ~TPolinom();
00017 void Backward();
00018 virtual void Print(const char* chopt = "") const;
00019 virtual void Clear(const char *opt ="");
00020 double Eval (double x) const;
00021 double operator()(double x) const {return Eval(x);}
00022 double Evrr (double x) const;
00023 double Deriv(double x) const;
00024 void Move(double x);
00025 const double *Coe() const {return fCoe;}
00026 const double *Emx() const {return fEmx;}
00027 double GetEmx(int i,int j) const;
00028 void SetCoefs(int npw=0,const double *coefs=0);
00029 void SetCoeff(int idx,double val) {fCoe[idx]=val;}
00030
00031 static double Eval (double x,int n,double *coe);
00032
00033
00034 protected:
00035 int fNP;
00036 double *fCoe;
00037 double *fEmx;
00038 double f2Coe[3];
00039 ClassDef(TPolinom,0)
00040 };
00041
00042
00043 class TPoliFitter: public TPolinom
00044 {
00045 public:
00046 TPoliFitter(int np);
00047 TPoliFitter(const TPoliFitter &from);
00048 virtual ~TPoliFitter(){;}
00049 void Add(double x, double y,double err2=1);
00050 void AddErr(double err2);
00051 const double *GetX(int i=0) const;
00052 double *GetX(int i=0);
00053 double Fit();
00054 void MakeErrs();
00055 double Chi2() const {return fChi2;}
00056 int NPts() const {return fN/3 ;}
00057 int Ndf() const {return fNdf ;}
00058 int Size() const {return fNuse;}
00059 double Wtot() const {return fWtot;}
00060 const double *CoeOrt() const {return fC ;}
00061 double EvalOrt(int idx,double x) const;
00062
00063 double EvalChi2();
00064 void Clear(const char *opt ="");
00065 void Print(const char* chopt = "") const;
00066 void Show() const;
00067 double FixAt(double x,double y);
00068 void Skip(int idx);
00069 void DCoeDy(int iy,double *dcoe) const;
00070 void SetNdf(int ndf);
00071 double MakeMatrix(TMatrixD &Aij) const;
00072 static void Test(int kase=0);
00073 static void TestCorr();
00074 static void Dest(int kase=0);
00075 static void Test2();
00076 private:
00077 void Prepare();
00078
00079 private:
00080 TArrayD fArr;
00081 char fBeg[1];
00082 int fN;
00083 int fNuse;
00084 double *fDat;
00085 double *fP;
00086 double *fC;
00087 double fWtot;
00088 double fChi2;
00089 int fNdf;
00090 char fEnd[1];
00091 ClassDef(TPoliFitter,0)
00092 };
00093
00094 #endif // TPOLINOM_H