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 = -1.; ///< Distance between equidistant knots
34 Double_t fXmin = 0.; ///< Minimum value of abscissa
35 Double_t fXmax = 0.; ///< Maximum value of abscissa
36 Int_t fNp = 0; ///< Number of knots
37 Bool_t fKstep = kFALSE; ///< True of equidistant knots
38 TH1F *fHistogram = nullptr; ///< Temporary histogram
39 TGraph *fGraph = nullptr; ///< Graph for drawing the knots
40 Int_t fNpx = 100; ///< Number of points used for graphical representation
41
42 TSpline(const TSpline &);
43 TSpline &operator=(const TSpline &);
44 virtual void BuildCoeff() = 0;
45
46public:
48 TSpline(const char *title, Double_t delta, Double_t xmin, Double_t xmax, Int_t np, Bool_t step)
49 : TNamed("Spline", title), TAttFill(0, 1), fDelta(delta), fXmin(xmin), fXmax(xmax), fNp(np), fKstep(step)
50 {
51 }
52 ~TSpline() override;
53
54 virtual void GetKnot(Int_t i, Double_t &x, Double_t &y) const =0;
55 Int_t DistancetoPrimitive(Int_t px, Int_t py) override;
56 void Draw(Option_t *option="") override;
57 void ExecuteEvent(Int_t event, Int_t px, Int_t py) override;
58 virtual Double_t GetDelta() const {return fDelta;}
59 TH1F *GetHistogram() const {return fHistogram;}
60 virtual Int_t GetNp() const {return fNp;}
61 virtual Int_t GetNpx() const {return fNpx;}
62 virtual Double_t GetXmin() const {return fXmin;}
63 virtual Double_t GetXmax() const {return fXmax;}
64 void Paint(Option_t *option="") override;
65 virtual Double_t Eval(Double_t x) const=0;
66 void SaveAs(const char * /*filename*/ = "",Option_t * /*option*/ = "") const override {}
67 void SetNpx(Int_t n) {fNpx=n;}
68
69 ClassDefOverride(TSpline,2) // Spline base class
70};
71
72
73//______________________________________________________________________________
74class TSplinePoly : public TObject
75{
76protected:
77 Double_t fX = 0.; ///< Abscissa
78 Double_t fY = 0.; ///< Constant term
79
80public:
83 TSplinePoly(TSplinePoly const &other) : TObject(other), fX(0), fY(0) { CopyPoly(other); }
84
85 TSplinePoly &operator=(TSplinePoly const &other);
86
87 Double_t &X() { return fX; }
88 Double_t &Y() { return fY; }
89 void GetKnot(Double_t &x, Double_t &y) const
90 {
91 x = fX;
92 y = fY;
93 }
94
95 virtual Double_t Eval(Double_t) const { return fY; }
96
97private:
98 void CopyPoly(TSplinePoly const &other);
99
100 ClassDefOverride(TSplinePoly,2) // Spline polynomial terms
101};
102
103//______________________________________________________________________________
105{
106private:
107 Double_t fB = 0.; ///< First order expansion coefficient : fB*1! is the first derivative at x
108 Double_t fC = 0.; ///< Second order expansion coefficient : fC*2! is the second derivative at x
109 Double_t fD = 0.; ///< Third order expansion coefficient : fD*3! is the third derivative at x
110
111public:
114 TSplinePoly3(TSplinePoly3 const &other) : TSplinePoly(other) { CopyPoly(other); }
115
116 TSplinePoly3 &operator=(TSplinePoly3 const &other);
117
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 override
122 {
123 Double_t dx = x - fX;
124 return (fY + dx * (fB + dx * (fC + dx * fD)));
125 }
127 {
128 Double_t dx = x - fX;
129 return (fB + dx * (2 * fC + 3 * fD * dx));
130 }
131
132private:
133 void CopyPoly(TSplinePoly3 const &other);
134
135 ClassDefOverride(TSplinePoly3,1) // Third spline polynomial terms
136};
137
138//______________________________________________________________________________
140{
141private:
142 Double_t fB = 0.; ///< First order expansion coefficient : fB*1! is the first derivative at x
143 Double_t fC = 0.; ///< Second order expansion coefficient : fC*2! is the second derivative at x
144 Double_t fD = 0.; ///< Third order expansion coefficient : fD*3! is the third derivative at x
145 Double_t fE = 0.; ///< Fourth order expansion coefficient : fE*4! is the fourth derivative at x
146 Double_t fF = 0.; ///< Fifth order expansion coefficient : fF*5! is the fifth derivative at x
147
148public:
151 : TSplinePoly(x, y), fB(b), fC(c), fD(d), fE(e), fF(f)
152 {
153 }
154 TSplinePoly5(TSplinePoly5 const &other) : TSplinePoly(other) { CopyPoly(other); }
155
156 TSplinePoly5 &operator=(TSplinePoly5 const &other);
157
158 Double_t &B() { return fB; }
159 Double_t &C() { return fC; }
160 Double_t &D() { return fD; }
161 Double_t &E() { return fE; }
162 Double_t &F() { return fF; }
163 Double_t Eval(Double_t x) const override
164 {
165 Double_t dx=x-fX;
166 return (fY+dx*(fB+dx*(fC+dx*(fD+dx*(fE+dx*fF)))));
167 }
169 Double_t dx=x-fX;
170 return (fB+dx*(2*fC+dx*(3*fD+dx*(4*fE+dx*(5*fF)))));
171 }
172
173private:
174 void CopyPoly(TSplinePoly5 const &other);
175
176 ClassDefOverride(TSplinePoly5,1) // Quintic spline polynomial terms
177};
178
179
180//______________________________________________________________________________
181class TSpline3 : public TSpline
182{
183protected:
184 TSplinePoly3 *fPoly = nullptr; ///<[fNp] Array of polynomial terms
185 Double_t fValBeg = 0.; ///< Initial value of first or second derivative
186 Double_t fValEnd = 0.; ///< End value of first or second derivative
187 Int_t fBegCond = -1; ///< 0=no beg cond, 1=first derivative, 2=second derivative
188 Int_t fEndCond = -1; ///< 0=no end cond, 1=first derivative, 2=second derivative
189
190 void BuildCoeff() override;
191 void SetCond(const char *opt);
192
193public:
195 TSpline3(const char *title,
196 Double_t x[], Double_t y[], Int_t n, const char *opt=nullptr,
197 Double_t valbeg=0, Double_t valend=0);
198 TSpline3(const char *title,
200 Double_t y[], Int_t n, const char *opt=nullptr,
201 Double_t valbeg=0, Double_t valend=0);
202 TSpline3(const char *title,
203 Double_t x[], const TF1 *func, Int_t n, const char *opt=nullptr,
204 Double_t valbeg=0, Double_t valend=0);
205 TSpline3(const char *title,
207 const TF1 *func, Int_t n, const char *opt=nullptr,
208 Double_t valbeg=0, Double_t valend=0);
209 TSpline3(const char *title,
210 const TGraph *g, const char *opt=nullptr,
211 Double_t valbeg=0, Double_t valend=0);
212 TSpline3(const TH1 *h, const char *opt=nullptr,
213 Double_t valbeg=0, Double_t valend=0);
214 TSpline3(const TSpline3&);
215 TSpline3& operator=(const TSpline3&);
216 Int_t FindX(Double_t x) const;
217 Double_t Eval(Double_t x) const override;
219 ~TSpline3() override {if (fPoly) delete [] fPoly;}
221 Double_t &c, Double_t &d) const
222 {x=fPoly[i].X();y=fPoly[i].Y();
223 b=fPoly[i].B();c=fPoly[i].C();d=fPoly[i].D();}
224 void GetKnot(Int_t i, Double_t &x, Double_t &y) const override
225 {x=fPoly[i].X(); y=fPoly[i].Y();}
226 void SaveAs(const char *filename="",Option_t *option="") const override;
227 void SavePrimitive(std::ostream &out, Option_t *option = "") override;
228 virtual void SetPoint(Int_t i, Double_t x, Double_t y);
229 virtual void SetPointCoeff(Int_t i, Double_t b, Double_t c, Double_t d);
230 static void Test();
231
232 ClassDefOverride(TSpline3,2) // Class to create third natural splines
233};
234
235
236//______________________________________________________________________________
237class TSpline5 : public TSpline
238{
239protected:
240 TSplinePoly5 *fPoly = nullptr; ///<[fNp] Array of polynomial terms
241
242 void BuildCoeff() override;
243 void BoundaryConditions(const char *opt, Int_t &beg, Int_t &end,
244 const char *&cb1, const char *&ce1, const char *&cb2,
245 const char *&ce2);
246 void SetBoundaries(Double_t b1, Double_t e1, Double_t b2, Double_t e2,
247 const char *cb1, const char *ce1, const char *cb2,
248 const char *ce2);
249public:
251 TSpline5(const char *title,
252 Double_t x[], Double_t y[], Int_t n,
253 const char *opt=nullptr, Double_t b1=0, Double_t e1=0,
254 Double_t b2=0, Double_t e2=0);
255 TSpline5(const char *title,
257 Double_t y[], Int_t n,
258 const char *opt=nullptr, Double_t b1=0, Double_t e1=0,
259 Double_t b2=0, Double_t e2=0);
260 TSpline5(const char *title,
261 Double_t x[], const TF1 *func, Int_t n,
262 const char *opt=nullptr, Double_t b1=0, Double_t e1=0,
263 Double_t b2=0, Double_t e2=0);
264 TSpline5(const char *title,
266 const TF1 *func, Int_t n,
267 const char *opt=nullptr, Double_t b1=0, Double_t e1=0,
268 Double_t b2=0, Double_t e2=0);
269 TSpline5(const char *title,
270 const TGraph *g,
271 const char *opt=nullptr, Double_t b1=0, Double_t e1=0,
272 Double_t b2=0, Double_t e2=0);
273 TSpline5(const TH1 *h,
274 const char *opt=nullptr, Double_t b1=0, Double_t e1=0,
275 Double_t b2=0, Double_t e2=0);
276 TSpline5(const TSpline5&);
277 TSpline5& operator=(const TSpline5&);
278 Int_t FindX(Double_t x) const;
279 Double_t Eval(Double_t x) const override;
281 ~TSpline5() override {if (fPoly) delete [] fPoly;}
283 Double_t &c, Double_t &d, Double_t &e, Double_t &f) const
284 {x=fPoly[i].X();y=fPoly[i].Y();b=fPoly[i].B();
285 c=fPoly[i].C();d=fPoly[i].D();
286 e=fPoly[i].E();f=fPoly[i].F();}
287 void GetKnot(Int_t i, Double_t &x, Double_t &y) const override
288 {x=fPoly[i].X(); y=fPoly[i].Y();}
289 void SaveAs(const char *filename="",Option_t *option="") const override;
290 void SavePrimitive(std::ostream &out, Option_t *option = "") override;
291 virtual void SetPoint(Int_t i, Double_t x, Double_t y);
292 virtual void SetPointCoeff(Int_t i, Double_t b, Double_t c, Double_t d,
294 static void Test();
295
296 ClassDefOverride(TSpline5,2) // Class to create quintic natural splines
297};
298
299#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:94
double Double_t
Definition RtypesCore.h:59
const char Option_t
Definition RtypesCore.h:66
#define ClassDefOverride(name, id)
Definition Rtypes.h:346
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:233
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:622
TH1 is the base class of all histogram classes in ROOT.
Definition TH1.h:59
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:182
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
Int_t fEndCond
0=no end cond, 1=first derivative, 2=second derivative
Definition TSpline.h:188
Int_t fBegCond
0=no beg cond, 1=first derivative, 2=second derivative
Definition TSpline.h:187
Int_t FindX(Double_t x) const
Find X.
Definition TSpline.cxx:744
void GetKnot(Int_t i, Double_t &x, Double_t &y) const override
Definition TSpline.h:224
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:219
void GetCoeff(Int_t i, Double_t &x, Double_t &y, Double_t &b, Double_t &c, Double_t &d) const
Definition TSpline.h:220
static void Test()
Test method for TSpline5.
Definition TSpline.cxx:613
Double_t fValBeg
Initial value of first or second derivative.
Definition TSpline.h:185
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:186
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:184
TSpline3 & operator=(const TSpline3 &)
Assignment operator.
Definition TSpline.cxx:550
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
Set point number i.
Definition TSpline.cxx:995
TSpline3()
Definition TSpline.h:194
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:238
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:282
static void Test()
Test method for TSpline5.
Definition TSpline.cxx:2083
Double_t Eval(Double_t x) const override
Eval this spline at x.
Definition TSpline.cxx:1563
void GetKnot(Int_t i, Double_t &x, Double_t &y) const override
Definition TSpline.h:287
void BuildCoeff() override
Algorithm 600, collected algorithms from acm.
Definition TSpline.cxx:1905
TSplinePoly5 * fPoly
[fNp] Array of polynomial terms
Definition TSpline.h:240
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:1817
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:1582
TSpline5()
Definition TSpline.h:250
Double_t Derivative(Double_t x) const
Derivative.
Definition TSpline.cxx:1572
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:1447
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save primitive as a C++ statement(s) on output stream out.
Definition TSpline.cxx:1773
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:1478
~TSpline5() override
Definition TSpline.h:281
Int_t FindX(Double_t x) const
Find X.
Definition TSpline.cxx:1527
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
Set point number i.
Definition TSpline.cxx:1806
TSpline5 & operator=(const TSpline5 &)
Assignment operator.
Definition TSpline.cxx:1427
Class for TSpline3 knot.
Definition TSpline.h:105
TSplinePoly3(Double_t x, Double_t y, Double_t b, Double_t c, Double_t d)
Definition TSpline.h:113
Double_t fC
Second order expansion coefficient : fC*2! is the second derivative at x.
Definition TSpline.h:108
Double_t Eval(Double_t x) const override
Definition TSpline.h:121
Double_t & D()
Definition TSpline.h:120
Double_t fD
Third order expansion coefficient : fD*3! is the third derivative at x.
Definition TSpline.h:109
Double_t Derivative(Double_t x) const
Definition TSpline.h:126
Double_t & C()
Definition TSpline.h:119
Double_t fB
First order expansion coefficient : fB*1! is the first derivative at x.
Definition TSpline.h:107
TSplinePoly3(TSplinePoly3 const &other)
Definition TSpline.h:114
Double_t & B()
Definition TSpline.h:118
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:140
Double_t & C()
Definition TSpline.h:159
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:146
Double_t Derivative(Double_t x) const
Definition TSpline.h:168
TSplinePoly5(TSplinePoly5 const &other)
Definition TSpline.h:154
Double_t fB
First order expansion coefficient : fB*1! is the first derivative at x.
Definition TSpline.h:142
Double_t fC
Second order expansion coefficient : fC*2! is the second derivative at x.
Definition TSpline.h:143
Double_t & B()
Definition TSpline.h:158
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:150
Double_t & F()
Definition TSpline.h:162
Double_t fD
Third order expansion coefficient : fD*3! is the third derivative at x.
Definition TSpline.h:144
Double_t & E()
Definition TSpline.h:161
Double_t Eval(Double_t x) const override
Definition TSpline.h:163
Double_t fE
Fourth order expansion coefficient : fE*4! is the fourth derivative at x.
Definition TSpline.h:145
Double_t & D()
Definition TSpline.h:160
Base class for TSpline knot.
Definition TSpline.h:75
TSplinePoly(TSplinePoly const &other)
Definition TSpline.h:83
virtual Double_t Eval(Double_t) const
Definition TSpline.h:95
Double_t & Y()
Definition TSpline.h:88
Double_t & X()
Definition TSpline.h:87
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:81
Double_t fY
Constant term.
Definition TSpline.h:78
void GetKnot(Double_t &x, Double_t &y) const
Definition TSpline.h:89
TSplinePoly(Double_t x, Double_t y)
Definition TSpline.h:82
Double_t fX
Abscissa.
Definition TSpline.h:77
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:59
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
void SaveAs(const char *="", Option_t *="") const override
Save this object in the file specified by filename.
Definition TSpline.h:66
Double_t fXmin
Minimum value of abscissa.
Definition TSpline.h:34
void SetNpx(Int_t n)
Definition TSpline.h:67
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:61
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:60
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:48
virtual Double_t GetXmin() const
Definition TSpline.h:62
virtual Double_t GetDelta() const
Definition TSpline.h:58
virtual Double_t GetXmax() const
Definition TSpline.h:63
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()