Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TSpline.h
Go to the documentation of this file.
1// @(#)root/hist:$Id$
2// Author: Federico Carminati 28/02/2000
3
4/*************************************************************************
5 * Copyright (C) 1995-2022, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_TSpline
13#define ROOT_TSpline
14
15#ifdef R__LESS_INCLUDES
16#include "TNamed.h"
17#include "TAttLine.h"
18#include "TAttFill.h"
19#include "TAttMarker.h"
20#else
21#include "TGraph.h"
22#endif
23
24class TH1;
25class TH1F;
26class TF1;
27class TGraph;
28
29class TSpline : public TNamed, public TAttLine,
30 public TAttFill, public TAttMarker
31{
32protected:
33 Double_t fDelta; ///< Distance between equidistant knots
34 Double_t fXmin; ///< Minimum value of abscissa
35 Double_t fXmax; ///< Maximum value of abscissa
36 Int_t fNp; ///< Number of knots
37 Bool_t fKstep; ///< True of equidistant knots
38 TH1F *fHistogram; ///< Temporary histogram
39 TGraph *fGraph; ///< Graph for drawing the knots
40 Int_t fNpx; ///< Number of points used for graphical representation
41
42 TSpline(const TSpline&);
43 TSpline& operator=(const TSpline&);
44 virtual void BuildCoeff()=0;
45
46public:
47 TSpline() : fDelta(-1), fXmin(0), fXmax(0),
48 fNp(0), fKstep(kFALSE), fHistogram(nullptr), fGraph(nullptr), fNpx(100) {}
49 TSpline(const char *title, Double_t delta, Double_t xmin,
50 Double_t xmax, Int_t np, Bool_t step) :
51 TNamed("Spline",title), TAttFill(0,1),
52 fDelta(delta), fXmin(xmin),
53 fXmax(xmax), fNp(np), fKstep(step),
54 fHistogram(nullptr), fGraph(nullptr), fNpx(100) {}
55 ~TSpline() override;
56
57 virtual void GetKnot(Int_t i, Double_t &x, Double_t &y) const =0;
58 Int_t DistancetoPrimitive(Int_t px, Int_t py) override;
59 void Draw(Option_t *option="") override;
60 void ExecuteEvent(Int_t event, Int_t px, Int_t py) override;
61 virtual Double_t GetDelta() const {return fDelta;}
62 TH1F *GetHistogram() const {return fHistogram;}
63 virtual Int_t GetNp() const {return fNp;}
64 virtual Int_t GetNpx() const {return fNpx;}
65 virtual Double_t GetXmin() const {return fXmin;}
66 virtual Double_t GetXmax() const {return fXmax;}
67 void Paint(Option_t *option="") override;
68 virtual Double_t Eval(Double_t x) const=0;
69 void SaveAs(const char * /*filename*/,Option_t * /*option*/) const override {}
70 void SetNpx(Int_t n) {fNpx=n;}
71
72 ClassDefOverride(TSpline,2) // Spline base class
73};
74
75
76//______________________________________________________________________________
77class TSplinePoly : public TObject
78{
79protected:
80 Double_t fX; ///< Abscissa
81 Double_t fY; ///< Constant term
82
83public:
85 fX(0), fY(0) {}
87 fX(x), fY(y) {}
88 TSplinePoly(TSplinePoly const &other);
89 TSplinePoly &operator=(TSplinePoly const &other);
90
91 Double_t &X() {return fX;}
92 Double_t &Y() {return fY;}
93 void GetKnot(Double_t &x, Double_t &y) const {x=fX; y=fY;}
94
95 virtual Double_t Eval(Double_t) const {return fY;}
96
97 private:
98 void CopyPoly(TSplinePoly const &other);
99
100 ClassDefOverride(TSplinePoly,2) // Spline polynomial terms
101};
102
104:
105 TObject(other), fX(0), fY(0)
106{
107 CopyPoly(other);
108}
109
110
111//______________________________________________________________________________
113{
114private:
115 Double_t fB; ///< First order expansion coefficient : fB*1! is the first derivative at x
116 Double_t fC; ///< Second order expansion coefficient : fC*2! is the second derivative at x
117 Double_t fD; ///< Third order expansion coefficient : fD*3! is the third derivative at x
118
119public:
121 fB(0), fC(0), fD(0) {}
123 TSplinePoly(x,y), fB(b), fC(c), fD(d) {}
124 TSplinePoly3(TSplinePoly3 const &other);
125 TSplinePoly3 &operator=(TSplinePoly3 const &other);
126
127 Double_t &B() {return fB;}
128 Double_t &C() {return fC;}
129 Double_t &D() {return fD;}
130 Double_t Eval(Double_t x) const override {
131 Double_t dx=x-fX;
132 return (fY+dx*(fB+dx*(fC+dx*fD)));
133 }
135 Double_t dx=x-fX;
136 return (fB+dx*(2*fC+3*fD*dx));
137 }
138
139private:
140 void CopyPoly(TSplinePoly3 const &other);
141
142 ClassDefOverride(TSplinePoly3,1) // Third spline polynomial terms
143};
144
146 :
147 TSplinePoly(other), fB(0), fC(0), fD(0)
148{
149 CopyPoly(other);
150}
151
152//______________________________________________________________________________
154{
155private:
156 Double_t fB; ///< First order expansion coefficient : fB*1! is the first derivative at x
157 Double_t fC; ///< Second order expansion coefficient : fC*2! is the second derivative at x
158 Double_t fD; ///< Third order expansion coefficient : fD*3! is the third derivative at x
159 Double_t fE; ///< Fourth order expansion coefficient : fE*4! is the fourth derivative at x
160 Double_t fF; ///< Fifth order expansion coefficient : fF*5! is the fifth derivative at x
161
162public:
164 fB(0), fC(0), fD(0), fE(0), fF(0) {}
167 TSplinePoly(x,y), fB(b), fC(c), fD(d), fE(e), fF(f) {}
168 TSplinePoly5(TSplinePoly5 const &other);
169 TSplinePoly5 &operator=(TSplinePoly5 const &other);
170
171 Double_t &B() {return fB;}
172 Double_t &C() {return fC;}
173 Double_t &D() {return fD;}
174 Double_t &E() {return fE;}
175 Double_t &F() {return fF;}
176 Double_t Eval(Double_t x) const override {
177 Double_t dx=x-fX;
178 return (fY+dx*(fB+dx*(fC+dx*(fD+dx*(fE+dx*fF)))));
179 }
181 Double_t dx=x-fX;
182 return (fB+dx*(2*fC+dx*(3*fD+dx*(4*fE+dx*(5*fF)))));
183 }
184
185private:
186 void CopyPoly(TSplinePoly5 const &other);
187
188 ClassDefOverride(TSplinePoly5,1) // Quintic spline polynomial terms
189};
190
192:
193 TSplinePoly(other), fB(0), fC(0), fD(0), fE(0), fF(0)
194{
195 CopyPoly(other);
196}
197
198
199//______________________________________________________________________________
200class TSpline3 : public TSpline
201{
202protected:
203 TSplinePoly3 *fPoly; ///<[fNp] Array of polynomial terms
204 Double_t fValBeg; ///< Initial value of first or second derivative
205 Double_t fValEnd; ///< End value of first or second derivative
206 Int_t fBegCond; ///< 0=no beg cond, 1=first derivative, 2=second derivative
207 Int_t fEndCond; ///< 0=no end cond, 1=first derivative, 2=second derivative
208
209 void BuildCoeff() override;
210 void SetCond(const char *opt);
211
212public:
213 TSpline3() : TSpline() , fPoly(nullptr), fValBeg(0), fValEnd(0),
214 fBegCond(-1), fEndCond(-1) {}
215 TSpline3(const char *title,
216 Double_t x[], Double_t y[], Int_t n, const char *opt=nullptr,
217 Double_t valbeg=0, Double_t valend=0);
218 TSpline3(const char *title,
220 Double_t y[], Int_t n, const char *opt=nullptr,
221 Double_t valbeg=0, Double_t valend=0);
222 TSpline3(const char *title,
223 Double_t x[], const TF1 *func, Int_t n, const char *opt=nullptr,
224 Double_t valbeg=0, Double_t valend=0);
225 TSpline3(const char *title,
227 const TF1 *func, Int_t n, const char *opt=nullptr,
228 Double_t valbeg=0, Double_t valend=0);
229 TSpline3(const char *title,
230 const TGraph *g, const char *opt=nullptr,
231 Double_t valbeg=0, Double_t valend=0);
232 TSpline3(const TH1 *h, const char *opt=nullptr,
233 Double_t valbeg=0, Double_t valend=0);
234 TSpline3(const TSpline3&);
235 TSpline3& operator=(const TSpline3&);
236 Int_t FindX(Double_t x) const;
237 Double_t Eval(Double_t x) const override;
239 ~TSpline3() override {if (fPoly) delete [] fPoly;}
241 Double_t &c, Double_t &d) const
242 {x=fPoly[i].X();y=fPoly[i].Y();
243 b=fPoly[i].B();c=fPoly[i].C();d=fPoly[i].D();}
244 void GetKnot(Int_t i, Double_t &x, Double_t &y) const override
245 {x=fPoly[i].X(); y=fPoly[i].Y();}
246 void SaveAs(const char *filename,Option_t *option="") const override;
247 void SavePrimitive(std::ostream &out, Option_t *option = "") override;
248 virtual void SetPoint(Int_t i, Double_t x, Double_t y);
249 virtual void SetPointCoeff(Int_t i, Double_t b, Double_t c, Double_t d);
250 static void Test();
251
252 ClassDefOverride(TSpline3,2) // Class to create third natural splines
253};
254
255
256//______________________________________________________________________________
257class TSpline5 : public TSpline
258{
259protected:
260 TSplinePoly5 *fPoly; ///<[fNp] Array of polynomial terms
261
262 void BuildCoeff() override;
263 void BoundaryConditions(const char *opt, Int_t &beg, Int_t &end,
264 const char *&cb1, const char *&ce1, const char *&cb2,
265 const char *&ce2);
266 void SetBoundaries(Double_t b1, Double_t e1, Double_t b2, Double_t e2,
267 const char *cb1, const char *ce1, const char *cb2,
268 const char *ce2);
269public:
270 TSpline5() : TSpline() , fPoly(nullptr) {}
271 TSpline5(const char *title,
272 Double_t x[], Double_t y[], Int_t n,
273 const char *opt=nullptr, Double_t b1=0, Double_t e1=0,
274 Double_t b2=0, Double_t e2=0);
275 TSpline5(const char *title,
277 Double_t y[], Int_t n,
278 const char *opt=nullptr, Double_t b1=0, Double_t e1=0,
279 Double_t b2=0, Double_t e2=0);
280 TSpline5(const char *title,
281 Double_t x[], const TF1 *func, Int_t n,
282 const char *opt=nullptr, Double_t b1=0, Double_t e1=0,
283 Double_t b2=0, Double_t e2=0);
284 TSpline5(const char *title,
286 const TF1 *func, Int_t n,
287 const char *opt=nullptr, Double_t b1=0, Double_t e1=0,
288 Double_t b2=0, Double_t e2=0);
289 TSpline5(const char *title,
290 const TGraph *g,
291 const char *opt=nullptr, Double_t b1=0, Double_t e1=0,
292 Double_t b2=0, Double_t e2=0);
293 TSpline5(const TH1 *h,
294 const char *opt=nullptr, Double_t b1=0, Double_t e1=0,
295 Double_t b2=0, Double_t e2=0);
296 TSpline5(const TSpline5&);
297 TSpline5& operator=(const TSpline5&);
298 Int_t FindX(Double_t x) const;
299 Double_t Eval(Double_t x) const override;
301 ~TSpline5() override {if (fPoly) delete [] fPoly;}
303 Double_t &c, Double_t &d, Double_t &e, Double_t &f) const
304 {x=fPoly[i].X();y=fPoly[i].Y();b=fPoly[i].B();
305 c=fPoly[i].C();d=fPoly[i].D();
306 e=fPoly[i].E();f=fPoly[i].F();}
307 void GetKnot(Int_t i, Double_t &x, Double_t &y) const override
308 {x=fPoly[i].X(); y=fPoly[i].Y();}
309 void SaveAs(const char *filename,Option_t *option="") const override;
310 void SavePrimitive(std::ostream &out, Option_t *option = "") override;
311 virtual void SetPoint(Int_t i, Double_t x, Double_t y);
312 virtual void SetPointCoeff(Int_t i, Double_t b, Double_t c, Double_t d,
314 static void Test();
315
316 ClassDefOverride(TSpline5,2) // Class to create quintic natural splines
317};
318
319#endif
#define d(i)
Definition RSha256.hxx:102
#define b(i)
Definition RSha256.hxx:100
#define f(i)
Definition RSha256.hxx:104
#define c(i)
Definition RSha256.hxx:101
#define g(i)
Definition RSha256.hxx:105
#define h(i)
Definition RSha256.hxx:106
#define e(i)
Definition RSha256.hxx:103
int Int_t
Definition RtypesCore.h:45
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
double Double_t
Definition RtypesCore.h:59
const char Option_t
Definition RtypesCore.h:66
#define ClassDefOverride(name, id)
Definition Rtypes.h:341
Option_t Option_t option
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t np
float xmin
float xmax
Fill Area Attributes class.
Definition TAttFill.h:19
Line Attributes class.
Definition TAttLine.h:18
Marker Attributes class.
Definition TAttMarker.h:19
1-Dim function class
Definition TF1.h:213
A TGraph is an object made of two arrays X and Y with npoints each.
Definition TGraph.h:41
1-D histogram with a float per channel (see TH1 documentation)}
Definition TH1.h:577
TH1 is the base class of all histogram classes in ROOT.
Definition TH1.h:58
The TNamed class is the base class for all named ROOT classes.
Definition TNamed.h:29
Mother of all ROOT objects.
Definition TObject.h:41
Class to create third splines to interpolate knots Arbitrary conditions can be introduced for first a...
Definition TSpline.h:201
Int_t fEndCond
0=no end cond, 1=first derivative, 2=second derivative
Definition TSpline.h:207
Int_t fBegCond
0=no beg cond, 1=first derivative, 2=second derivative
Definition TSpline.h:206
Int_t FindX(Double_t x) const
Find X.
Definition TSpline.cxx:744
void SaveAs(const char *filename, Option_t *option="") const override
Write this spline as a C++ function that can be executed without ROOT the name of the function is the...
Definition TSpline.cxx:807
void GetKnot(Int_t i, Double_t &x, Double_t &y) const override
Definition TSpline.h:244
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save primitive as a C++ statement(s) on output stream out.
Definition TSpline.cxx:966
~TSpline3() override
Definition TSpline.h:239
void GetCoeff(Int_t i, Double_t &x, Double_t &y, Double_t &b, Double_t &c, Double_t &d) const
Definition TSpline.h:240
static void Test()
Test method for TSpline5.
Definition TSpline.cxx:613
Double_t fValBeg
Initial value of first or second derivative.
Definition TSpline.h:204
void BuildCoeff() override
Build coefficients.
Definition TSpline.cxx:1048
Double_t Eval(Double_t x) const override
Eval this spline at x.
Definition TSpline.cxx:786
Double_t fValEnd
End value of first or second derivative.
Definition TSpline.h:205
void SetCond(const char *opt)
Check the boundary conditions.
Definition TSpline.cxx:574
Double_t Derivative(Double_t x) const
Derivative.
Definition TSpline.cxx:796
TSplinePoly3 * fPoly
[fNp] Array of polynomial terms
Definition TSpline.h:203
TSpline3 & operator=(const TSpline3 &)
Assignment operator.
Definition TSpline.cxx:554
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
Set point number i.
Definition TSpline.cxx:995
TSpline3()
Definition TSpline.h:213
virtual void SetPointCoeff(Int_t i, Double_t b, Double_t c, Double_t d)
Set point coefficient number i.
Definition TSpline.cxx:1005
Class to create quintic natural splines to interpolate knots Arbitrary conditions can be introduced f...
Definition TSpline.h:258
void GetCoeff(Int_t i, Double_t &x, Double_t &y, Double_t &b, Double_t &c, Double_t &d, Double_t &e, Double_t &f) const
Definition TSpline.h:302
static void Test()
Test method for TSpline5.
Definition TSpline.cxx:2082
Double_t Eval(Double_t x) const override
Eval this spline at x.
Definition TSpline.cxx:1562
void SaveAs(const char *filename, Option_t *option="") const override
Write this spline as a C++ function that can be executed without ROOT the name of the function is the...
Definition TSpline.cxx:1581
void GetKnot(Int_t i, Double_t &x, Double_t &y) const override
Definition TSpline.h:307
void BuildCoeff() override
Algorithm 600, collected algorithms from acm.
Definition TSpline.cxx:1904
TSplinePoly5 * fPoly
[fNp] Array of polynomial terms
Definition TSpline.h:260
virtual void SetPointCoeff(Int_t i, Double_t b, Double_t c, Double_t d, Double_t e, Double_t f)
Set point coefficient number i.
Definition TSpline.cxx:1816
TSpline5()
Definition TSpline.h:270
Double_t Derivative(Double_t x) const
Derivative.
Definition TSpline.cxx:1571
void BoundaryConditions(const char *opt, Int_t &beg, Int_t &end, const char *&cb1, const char *&ce1, const char *&cb2, const char *&ce2)
Check the boundary conditions and the amount of extra double knots needed.
Definition TSpline.cxx:1446
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save primitive as a C++ statement(s) on output stream out.
Definition TSpline.cxx:1772
void SetBoundaries(Double_t b1, Double_t e1, Double_t b2, Double_t e2, const char *cb1, const char *ce1, const char *cb2, const char *ce2)
Set the boundary conditions at double/triple knots.
Definition TSpline.cxx:1477
~TSpline5() override
Definition TSpline.h:301
Int_t FindX(Double_t x) const
Find X.
Definition TSpline.cxx:1526
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
Set point number i.
Definition TSpline.cxx:1805
TSpline5 & operator=(const TSpline5 &)
Assignment operator.
Definition TSpline.cxx:1429
Class for TSpline3 knot.
Definition TSpline.h:113
TSplinePoly3(Double_t x, Double_t y, Double_t b, Double_t c, Double_t d)
Definition TSpline.h:122
Double_t fC
Second order expansion coefficient : fC*2! is the second derivative at x.
Definition TSpline.h:116
Double_t Eval(Double_t x) const override
Definition TSpline.h:130
Double_t & D()
Definition TSpline.h:129
Double_t fD
Third order expansion coefficient : fD*3! is the third derivative at x.
Definition TSpline.h:117
Double_t Derivative(Double_t x) const
Definition TSpline.h:134
Double_t & C()
Definition TSpline.h:128
Double_t fB
First order expansion coefficient : fB*1! is the first derivative at x.
Definition TSpline.h:115
Double_t & B()
Definition TSpline.h:127
void CopyPoly(TSplinePoly3 const &other)
Utility called by the copy constructors and = operator.
Definition TSpline.cxx:311
TSplinePoly3 & operator=(TSplinePoly3 const &other)
Assignment operator.
Definition TSpline.cxx:299
Class for TSpline5 knot.
Definition TSpline.h:154
Double_t & C()
Definition TSpline.h:172
void CopyPoly(TSplinePoly5 const &other)
Utility called by the copy constructors and = operator.
Definition TSpline.cxx:338
TSplinePoly5 & operator=(TSplinePoly5 const &other)
Assignment operator.
Definition TSpline.cxx:326
Double_t fF
Fifth order expansion coefficient : fF*5! is the fifth derivative at x.
Definition TSpline.h:160
Double_t Derivative(Double_t x) const
Definition TSpline.h:180
Double_t fB
First order expansion coefficient : fB*1! is the first derivative at x.
Definition TSpline.h:156
Double_t fC
Second order expansion coefficient : fC*2! is the second derivative at x.
Definition TSpline.h:157
Double_t & B()
Definition TSpline.h:171
TSplinePoly5(Double_t x, Double_t y, Double_t b, Double_t c, Double_t d, Double_t e, Double_t f)
Definition TSpline.h:165
Double_t & F()
Definition TSpline.h:175
Double_t fD
Third order expansion coefficient : fD*3! is the third derivative at x.
Definition TSpline.h:158
Double_t & E()
Definition TSpline.h:174
Double_t Eval(Double_t x) const override
Definition TSpline.h:176
Double_t fE
Fourth order expansion coefficient : fE*4! is the fourth derivative at x.
Definition TSpline.h:159
Double_t & D()
Definition TSpline.h:173
Base class for TSpline knot.
Definition TSpline.h:78
virtual Double_t Eval(Double_t) const
Definition TSpline.h:95
Double_t & Y()
Definition TSpline.h:92
Double_t & X()
Definition TSpline.h:91
void CopyPoly(TSplinePoly const &other)
Utility called by the copy constructors and = operator.
Definition TSpline.cxx:285
TSplinePoly & operator=(TSplinePoly const &other)
Assignment operator.
Definition TSpline.cxx:273
TSplinePoly()
Definition TSpline.h:84
Double_t fY
Constant term.
Definition TSpline.h:81
void GetKnot(Double_t &x, Double_t &y) const
Definition TSpline.h:93
TSplinePoly(Double_t x, Double_t y)
Definition TSpline.h:86
Double_t fX
Abscissa.
Definition TSpline.h:80
Base class for spline implementation containing the Draw/Paint methods.
Definition TSpline.h:31
virtual Double_t Eval(Double_t x) const =0
void ExecuteEvent(Int_t event, Int_t px, Int_t py) override
Execute action corresponding to one event.
Definition TSpline.cxx:122
TH1F * GetHistogram() const
Definition TSpline.h:62
TGraph * fGraph
Graph for drawing the knots.
Definition TSpline.h:39
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
Compute distance from point px,py to a spline.
Definition TSpline.cxx:113
Double_t fXmin
Minimum value of abscissa.
Definition TSpline.h:34
void SetNpx(Int_t n)
Definition TSpline.h:70
TH1F * fHistogram
Temporary histogram.
Definition TSpline.h:38
TSpline()
Definition TSpline.h:47
Double_t fDelta
Distance between equidistant knots.
Definition TSpline.h:33
virtual void GetKnot(Int_t i, Double_t &x, Double_t &y) const =0
TSpline & operator=(const TSpline &)
Assignment operator.
Definition TSpline.cxx:69
virtual Int_t GetNpx() const
Definition TSpline.h:64
void Paint(Option_t *option="") override
Paint this function with its current attributes.
Definition TSpline.cxx:131
Bool_t fKstep
True of equidistant knots.
Definition TSpline.h:37
virtual Int_t GetNp() const
Definition TSpline.h:63
Int_t fNp
Number of knots.
Definition TSpline.h:36
~TSpline() override
Destructor.
Definition TSpline.cxx:60
virtual void BuildCoeff()=0
TSpline(const char *title, Double_t delta, Double_t xmin, Double_t xmax, Int_t np, Bool_t step)
Definition TSpline.h:49
void SaveAs(const char *, Option_t *) const override
Save this object in the file specified by filename.
Definition TSpline.h:69
virtual Double_t GetXmin() const
Definition TSpline.h:65
virtual Double_t GetDelta() const
Definition TSpline.h:61
virtual Double_t GetXmax() const
Definition TSpline.h:66
Double_t fXmax
Maximum value of abscissa.
Definition TSpline.h:35
Int_t fNpx
Number of points used for graphical representation.
Definition TSpline.h:40
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17
const Int_t n
Definition legend1.C:16
th1 Draw()