BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
TRadSpline.h
Go to the documentation of this file.
1#ifndef ROOT_TRadSpline
2#define ROOT_TRadSpline
3
4class TRadSpline {
5protected:
6 double fDelta; // Distance between equidistant knots
7 double fXmin; // Minimum value of abscissa
8 double fXmax; // Maximum value of abscissa
9 int fNp; // Number of knots
10 bool fKstep; // True of equidistant knots
11 int fNpx; // Number of points used for graphical representation
12
13 virtual void BuildCoeff() = 0;
14
15public:
17 : fDelta( -1 ), fXmin( 0 ), fXmax( 0 ), fNp( 0 ), fKstep( false ), fNpx( 100 ) {}
18 TRadSpline( const char* title, double delta, double xmin, double xmax, int np, bool step )
19 : fDelta( delta )
20 , fXmin( xmin )
21 , fXmax( xmax )
22 , fNp( np )
23 , fKstep( step )
24 , fNpx( 100 ) {}
25 virtual ~TRadSpline() {}
26 virtual void GetKnot( int i, double& x, double& y ) const = 0;
27 // virtual void Draw(const char *option="");
28 virtual int GetNpx() const { return fNpx; }
29 // virtual void Paint(const char *option="");
30 virtual double Eval( double x ) const = 0;
31 virtual void SaveAs( const char* /*filename*/ ) const { ; }
32 void SetNpx( int n ) { fNpx = n; }
33};
34
35//________________________________________________________________________
37protected:
38 double fX; // abscissa
39 double fY; // constant term
40public:
41 TRadSplinePoly() : fX( 0 ), fY( 0 ) {}
42 TRadSplinePoly( double x, double y ) : fX( x ), fY( y ) {}
43 virtual ~TRadSplinePoly() {}
44 double& X() { return fX; }
45 double& Y() { return fY; }
46 void GetKnot( double& x, double& y ) const {
47 x = fX;
48 y = fY;
49 }
50
51 virtual double Eval( double ) const { return fY; }
52};
53
54//________________________________________________________________________
56private:
57 double fB; // first order expansion coefficient : fB*1! is the first derivative at x
58 double fC; // second order expansion coefficient : fC*2! is the second derivative at x
59 double fD; // third order expansion coefficient : fD*3! is the third derivative at x
60public:
61 TRadSplinePoly3() : fB( 0 ), fC( 0 ), fD( 0 ) {}
62 TRadSplinePoly3( double x, double y, double b, double c, double d )
63 : TRadSplinePoly( x, y ), fB( b ), fC( c ), fD( d ) {}
64 double& B() { return fB; }
65 double& C() { return fC; }
66 double& D() { return fD; }
67 double Eval( double x ) const {
68 double dx = x - fX;
69 return ( fY + dx * ( fB + dx * ( fC + dx * fD ) ) );
70 }
71 double Derivative( double x ) const {
72 double dx = x - fX;
73 return ( fB + 2 * fC * dx + 3 * fD * dx * dx );
74 }
75};
76
77//________________________________________________________________________
79private:
80 double fB; // first order expansion coefficient : fB*1! is the first derivative at x
81 double fC; // second order expansion coefficient : fC*2! is the second derivative at x
82 double fD; // third order expansion coefficient : fD*3! is the third derivative at x
83 double fE; // fourth order expansion coefficient : fE*4! is the fourth derivative at x
84 double fF; // fifth order expansion coefficient : fF*5! is the fifth derivative at x
85public:
86 TRadSplinePoly5() : fB( 0 ), fC( 0 ), fD( 0 ), fE( 0 ), fF( 0 ) {}
87 TRadSplinePoly5( double x, double y, double b, double c, double d, double e, double f )
88 : TRadSplinePoly( x, y ), fB( b ), fC( c ), fD( d ), fE( e ), fF( f ) {}
89 double& B() { return fB; }
90 double& C() { return fC; }
91 double& D() { return fD; }
92 double& E() { return fE; }
93 double& F() { return fF; }
94 double Eval( double x ) const {
95 double dx = x - fX;
96 return ( fY + dx * ( fB + dx * ( fC + dx * ( fD + dx * ( fE + dx * fF ) ) ) ) );
97 }
98 double Derivative( double x ) const {
99 double dx = x - fX;
100 return ( fB + 2 * fC * dx + 3 * fD * dx * dx + 4 * fE * dx * dx * dx +
101 5 * fF * dx * dx * dx * dx );
102 }
103};
104
105//________________________________________________________________________
106class TRadSpline3 : public TRadSpline {
107private:
108 TRadSplinePoly3* fPoly; //[fNp] Array of polynomial terms
109 double fValBeg; // Initial value of first or second derivative
110 double fValEnd; // End value of first or second derivative
111 int fBegCond; // 0=no beg cond, 1=first derivative, 2=second derivative
112 int fEndCond; // 0=no end cond, 1=first derivative, 2=second derivative
113
114 void BuildCoeff();
115 void SetCond( const char* opt );
116
117public:
118 TRadSpline3() : fPoly( 0 ), fValBeg( 0 ), fValEnd( 0 ), fBegCond( -1 ), fEndCond( -1 ) {}
119 TRadSpline3( const char* title, double x[], double y[], int n, const char* opt = 0,
120 double valbeg = 0, double valend = 0 );
121 TRadSpline3( const char* title, double xmin, double xmax, double y[], int n,
122 const char* opt = 0, double valbeg = 0, double valend = 0 );
123 TRadSpline3( const char* title, double xmin, double xmax, double ( *func )( const double& ),
124 int n, const char* opt = 0, double valbeg = 0, double valend = 0 );
125 int FindX( double x ) const;
126 double Eval( double x ) const;
127 double Derivative( double x ) const;
128 virtual ~TRadSpline3() {
129 if ( fPoly ) delete[] fPoly;
130 }
131 void GetCoeff( int i, double& x, double& y, double& b, double& c, double& d ) {
132 x = fPoly[i].X();
133 y = fPoly[i].Y();
134 b = fPoly[i].B();
135 c = fPoly[i].C();
136 d = fPoly[i].D();
137 }
138 void GetKnot( int i, double& x, double& y ) const {
139 x = fPoly[i].X();
140 y = fPoly[i].Y();
141 }
142 virtual void SaveAs( const char* filename ) const;
143 static void Test();
144};
145
146//________________________________________________________________________
147class TRadSpline5 : public TRadSpline {
148private:
149 TRadSplinePoly5* fPoly; //[fNp] Array of polynomial terms
150
151 void BuildCoeff();
152 void BoundaryConditions( const char* opt, int& beg, int& end, const char*& cb1,
153 const char*& ce1, const char*& cb2, const char*& ce2 );
154 void SetBoundaries( double b1, double e1, double b2, double e2, const char* cb1,
155 const char* ce1, const char* cb2, const char* ce2 );
156
157public:
158 TRadSpline5() : fPoly( 0 ) {}
159 TRadSpline5( const char* title, double x[], double y[], int n, const char* opt = 0,
160 double b1 = 0, double e1 = 0, double b2 = 0, double e2 = 0 );
161 TRadSpline5( const char* title, double xmin, double xmax, double y[], int n,
162 const char* opt = 0, double b1 = 0, double e1 = 0, double b2 = 0,
163 double e2 = 0 );
164 TRadSpline5( const char* title, double xmin, double xmax, double ( *func )( const double& ),
165 int n, const char* opt = 0, double b1 = 0, double e1 = 0, double b2 = 0,
166 double e2 = 0 );
167 int FindX( double x ) const;
168 double Eval( double x ) const;
169 double Derivative( double x ) const;
171 if ( fPoly ) delete[] fPoly;
172 }
173 void GetCoeff( int i, double& x, double& y, double& b, double& c, double& d, double& e,
174 double& f ) {
175 x = fPoly[i].X();
176 y = fPoly[i].Y();
177 b = fPoly[i].B();
178 c = fPoly[i].C();
179 d = fPoly[i].D();
180 e = fPoly[i].E();
181 f = fPoly[i].F();
182 }
183 void GetKnot( int i, double& x, double& y ) const {
184 x = fPoly[i].X();
185 y = fPoly[i].Y();
186 }
187 virtual void SaveAs( const char* filename ) const;
188 static void Test();
189};
190
191#endif
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
const Int_t n
Double_t e1
Double_t e2
titledef title[20]
void GetCoeff(int i, double &x, double &y, double &b, double &c, double &d)
Definition TRadSpline.h:131
int FindX(double x) const
virtual ~TRadSpline3()
Definition TRadSpline.h:128
double Derivative(double x) const
static void Test()
double Eval(double x) const
TRadSpline3(const char *title, double xmin, double xmax, double y[], int n, const char *opt=0, double valbeg=0, double valend=0)
void GetKnot(int i, double &x, double &y) const
Definition TRadSpline.h:138
TRadSpline3(const char *title, double xmin, double xmax, double(*func)(const double &), int n, const char *opt=0, double valbeg=0, double valend=0)
TRadSpline3(const char *title, double x[], double y[], int n, const char *opt=0, double valbeg=0, double valend=0)
virtual void SaveAs(const char *filename) const
TRadSpline5(const char *title, double x[], double y[], int n, const char *opt=0, double b1=0, double e1=0, double b2=0, double e2=0)
void GetCoeff(int i, double &x, double &y, double &b, double &c, double &d, double &e, double &f)
Definition TRadSpline.h:173
double Derivative(double x) const
int FindX(double x) const
virtual void SaveAs(const char *filename) const
double Eval(double x) const
TRadSpline5(const char *title, double xmin, double xmax, double y[], int n, const char *opt=0, double b1=0, double e1=0, double b2=0, double e2=0)
void GetKnot(int i, double &x, double &y) const
Definition TRadSpline.h:183
static void Test()
TRadSpline5(const char *title, double xmin, double xmax, double(*func)(const double &), int n, const char *opt=0, double b1=0, double e1=0, double b2=0, double e2=0)
double & C()
Definition TRadSpline.h:65
double & D()
Definition TRadSpline.h:66
double & B()
Definition TRadSpline.h:64
double Eval(double x) const
Definition TRadSpline.h:67
TRadSplinePoly3(double x, double y, double b, double c, double d)
Definition TRadSpline.h:62
double Derivative(double x) const
Definition TRadSpline.h:71
double Derivative(double x) const
Definition TRadSpline.h:98
double & B()
Definition TRadSpline.h:89
double & D()
Definition TRadSpline.h:91
double & C()
Definition TRadSpline.h:90
double & F()
Definition TRadSpline.h:93
double & E()
Definition TRadSpline.h:92
TRadSplinePoly5(double x, double y, double b, double c, double d, double e, double f)
Definition TRadSpline.h:87
double Eval(double x) const
Definition TRadSpline.h:94
virtual double Eval(double) const
Definition TRadSpline.h:51
virtual ~TRadSplinePoly()
Definition TRadSpline.h:43
double & Y()
Definition TRadSpline.h:45
double & X()
Definition TRadSpline.h:44
void GetKnot(double &x, double &y) const
Definition TRadSpline.h:46
TRadSplinePoly(double x, double y)
Definition TRadSpline.h:42
bool fKstep
Definition TRadSpline.h:10
virtual int GetNpx() const
Definition TRadSpline.h:28
virtual ~TRadSpline()
Definition TRadSpline.h:25
virtual void GetKnot(int i, double &x, double &y) const =0
TRadSpline(const char *title, double delta, double xmin, double xmax, int np, bool step)
Definition TRadSpline.h:18
virtual void BuildCoeff()=0
virtual double Eval(double x) const =0
double fXmin
Definition TRadSpline.h:7
void SetNpx(int n)
Definition TRadSpline.h:32
virtual void SaveAs(const char *) const
Definition TRadSpline.h:31
double fDelta
Definition TRadSpline.h:6
double fXmax
Definition TRadSpline.h:8