20 class TSpline :
public TNamed,
public TAttLine,
21 public TAttFill,
public TAttMarker
33 TSpline(
const TSpline&);
34 TSpline& operator=(
const TSpline&);
35 virtual void BuildCoeff()=0;
38 TSpline() : fDelta(-1), fXmin(0), fXmax(0),
39 fNp(0), fKstep(kFALSE), fHistogram(0), fGraph(0), fNpx(100) {}
40 TSpline(
const char *title, Double_t delta, Double_t xmin,
41 Double_t xmax, Int_t np, Bool_t step) :
42 TNamed(
"Spline",title), TAttFill(0,1),
43 fDelta(delta), fXmin(xmin),
44 fXmax(xmax), fNp(np), fKstep(step),
45 fHistogram(0), fGraph(0), fNpx(100) {}
48 virtual void GetKnot(Int_t i, Double_t &x, Double_t &y)
const =0;
49 virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
50 virtual void Draw(Option_t *option=
"");
51 virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
52 virtual Double_t GetDelta()
const {
return fDelta;}
53 TH1F *GetHistogram()
const {
return fHistogram;}
54 virtual Int_t GetNp()
const {
return fNp;}
55 virtual Int_t GetNpx()
const {
return fNpx;}
56 virtual Double_t GetXmin()
const {
return fXmin;}
57 virtual Double_t GetXmax()
const {
return fXmax;}
58 virtual void Paint(Option_t *option=
"");
59 virtual Double_t Eval(Double_t x)
const=0;
60 virtual void SaveAs(
const char * ,Option_t * )
const {;}
61 void SetNpx(Int_t n) {fNpx=n;}
68 class TSplinePoly :
public TObject
77 TSplinePoly(Double_t x, Double_t y) :
79 TSplinePoly(TSplinePoly
const &other);
80 TSplinePoly &operator=(TSplinePoly
const &other);
82 Double_t &X() {
return fX;}
83 Double_t &Y() {
return fY;}
84 void GetKnot(Double_t &x, Double_t &y)
const {x=fX; y=fY;}
86 virtual Double_t Eval(Double_t)
const {
return fY;}
89 void CopyPoly(TSplinePoly
const &other);
91 ClassDef(TSplinePoly,2)
94 inline TSplinePoly::TSplinePoly(TSplinePoly
const &other)
96 TObject(other), fX(0), fY(0)
103 class TSplinePoly3 :
public TSplinePoly
112 fB(0), fC(0), fD(0) {}
113 TSplinePoly3(Double_t x, Double_t y, Double_t b, Double_t c, Double_t d) :
114 TSplinePoly(x,y), fB(b), fC(c), fD(d) {}
115 TSplinePoly3(TSplinePoly3
const &other);
116 TSplinePoly3 &operator=(TSplinePoly3
const &other);
118 Double_t &B() {
return fB;}
119 Double_t &C() {
return fC;}
120 Double_t &D() {
return fD;}
121 Double_t Eval(Double_t x)
const {
123 return (fY+dx*(fB+dx*(fC+dx*fD)));
125 Double_t Derivative(Double_t x)
const {
127 return (fB+dx*(2*fC+3*fD*dx));
131 void CopyPoly(TSplinePoly3
const &other);
133 ClassDef(TSplinePoly3,1)
136 inline TSplinePoly3::TSplinePoly3(TSplinePoly3
const &other)
138 TSplinePoly(other), fB(0), fC(0), fD(0)
144 class TSplinePoly5 :
public TSplinePoly
155 fB(0), fC(0), fD(0), fE(0), fF(0) {}
156 TSplinePoly5(Double_t x, Double_t y, Double_t b, Double_t c,
157 Double_t d, Double_t e, Double_t f) :
158 TSplinePoly(x,y), fB(b), fC(c), fD(d), fE(e), fF(f) {}
159 TSplinePoly5(TSplinePoly5
const &other);
160 TSplinePoly5 &operator=(TSplinePoly5
const &other);
162 Double_t &B() {
return fB;}
163 Double_t &C() {
return fC;}
164 Double_t &D() {
return fD;}
165 Double_t &E() {
return fE;}
166 Double_t &F() {
return fF;}
167 Double_t Eval(Double_t x)
const {
169 return (fY+dx*(fB+dx*(fC+dx*(fD+dx*(fE+dx*fF)))));
171 Double_t Derivative(Double_t x)
const{
173 return (fB+dx*(2*fC+dx*(3*fD+dx*(4*fE+dx*(5*fF)))));
177 void CopyPoly(TSplinePoly5
const &other);
179 ClassDef(TSplinePoly5,1)
182 inline TSplinePoly5::TSplinePoly5(TSplinePoly5
const &other)
184 TSplinePoly(other), fB(0), fC(0), fD(0), fE(0), fF(0)
191 class TSpline3 :
public TSpline
201 void SetCond(
const char *opt);
204 TSpline3() : TSpline() , fPoly(0), fValBeg(0), fValEnd(0),
205 fBegCond(-1), fEndCond(-1) {}
206 TSpline3(
const char *title,
207 Double_t x[], Double_t y[], Int_t n,
const char *opt=0,
208 Double_t valbeg=0, Double_t valend=0);
209 TSpline3(
const char *title,
210 Double_t xmin, Double_t xmax,
211 Double_t y[], Int_t n,
const char *opt=0,
212 Double_t valbeg=0, Double_t valend=0);
213 TSpline3(
const char *title,
214 Double_t x[],
const TF1 *func, Int_t n,
const char *opt=0,
215 Double_t valbeg=0, Double_t valend=0);
216 TSpline3(
const char *title,
217 Double_t xmin, Double_t xmax,
218 const TF1 *func, Int_t n,
const char *opt=0,
219 Double_t valbeg=0, Double_t valend=0);
220 TSpline3(
const char *title,
221 const TGraph *g,
const char *opt=0,
222 Double_t valbeg=0, Double_t valend=0);
223 TSpline3(
const TH1 *h,
const char *opt=0,
224 Double_t valbeg=0, Double_t valend=0);
225 TSpline3(
const TSpline3&);
226 TSpline3& operator=(
const TSpline3&);
227 Int_t FindX(Double_t x)
const;
228 Double_t Eval(Double_t x)
const;
229 Double_t Derivative(Double_t x)
const;
230 virtual ~TSpline3() {
if (fPoly)
delete [] fPoly;}
231 void GetCoeff(Int_t i, Double_t &x, Double_t &y, Double_t &b,
232 Double_t &c, Double_t &d) {x=fPoly[i].X();y=fPoly[i].Y();
233 b=fPoly[i].B();c=fPoly[i].C();d=fPoly[i].D();}
234 void GetKnot(Int_t i, Double_t &x, Double_t &y)
const
235 {x=fPoly[i].X(); y=fPoly[i].Y();}
236 virtual void SaveAs(
const char *filename,Option_t *option=
"")
const;
237 virtual void SavePrimitive(std::ostream &out, Option_t *option =
"");
238 virtual void SetPoint(Int_t i, Double_t x, Double_t y);
239 virtual void SetPointCoeff(Int_t i, Double_t b, Double_t c, Double_t d);
242 ClassDef (TSpline3,2)
247 class TSpline5 :
public TSpline
253 void BoundaryConditions(
const char *opt, Int_t &beg, Int_t &end,
254 const char *&cb1,
const char *&ce1,
const char *&cb2,
256 void SetBoundaries(Double_t b1, Double_t e1, Double_t b2, Double_t e2,
257 const char *cb1,
const char *ce1,
const char *cb2,
260 TSpline5() : TSpline() , fPoly(0) {}
261 TSpline5(
const char *title,
262 Double_t x[], Double_t y[], Int_t n,
263 const char *opt=0, Double_t b1=0, Double_t e1=0,
264 Double_t b2=0, Double_t e2=0);
265 TSpline5(
const char *title,
266 Double_t xmin, Double_t xmax,
267 Double_t y[], Int_t n,
268 const char *opt=0, Double_t b1=0, Double_t e1=0,
269 Double_t b2=0, Double_t e2=0);
270 TSpline5(
const char *title,
271 Double_t x[],
const TF1 *func, Int_t n,
272 const char *opt=0, Double_t b1=0, Double_t e1=0,
273 Double_t b2=0, Double_t e2=0);
274 TSpline5(
const char *title,
275 Double_t xmin, Double_t xmax,
276 const TF1 *func, Int_t n,
277 const char *opt=0, Double_t b1=0, Double_t e1=0,
278 Double_t b2=0, Double_t e2=0);
279 TSpline5(
const char *title,
281 const char *opt=0, Double_t b1=0, Double_t e1=0,
282 Double_t b2=0, Double_t e2=0);
283 TSpline5(
const TH1 *h,
284 const char *opt=0, Double_t b1=0, Double_t e1=0,
285 Double_t b2=0, Double_t e2=0);
286 TSpline5(
const TSpline5&);
287 TSpline5& operator=(
const TSpline5&);
288 Int_t FindX(Double_t x)
const;
289 Double_t Eval(Double_t x)
const;
290 Double_t Derivative(Double_t x)
const;
291 virtual ~TSpline5() {
if (fPoly)
delete [] fPoly;}
292 void GetCoeff(Int_t i, Double_t &x, Double_t &y, Double_t &b,
293 Double_t &c, Double_t &d, Double_t &e, Double_t &f)
294 {x=fPoly[i].X();y=fPoly[i].Y();b=fPoly[i].B();
295 c=fPoly[i].C();d=fPoly[i].D();
296 e=fPoly[i].E();f=fPoly[i].F();}
297 void GetKnot(Int_t i, Double_t &x, Double_t &y)
const
298 {x=fPoly[i].X(); y=fPoly[i].Y();}
299 virtual void SaveAs(
const char *filename,Option_t *option=
"")
const;
300 virtual void SavePrimitive(std::ostream &out, Option_t *option =
"");
301 virtual void SetPoint(Int_t i, Double_t x, Double_t y);
302 virtual void SetPointCoeff(Int_t i, Double_t b, Double_t c, Double_t d,
303 Double_t e, Double_t f);
306 ClassDef (TSpline5,2)