Logo ROOT   6.18/05
Reference Guide
TKDE.h
Go to the documentation of this file.
1// @(#)root/hist:$Id$
2// Authors: Bartolomeu Rabacal 07/2010
3/**********************************************************************
4 * *
5 * Copyright (c) 2006 , LCG ROOT MathLib Team *
6 * *
7 * *
8 **********************************************************************/
9// Header file for TKDE
10
11#ifndef ROOT_TKDE
12#define ROOT_TKDE
13
15
16#include "TNamed.h"
17
18#include "Math/Math.h"
19
20//#include "TF1.h"
21class TGraphErrors;
22class TF1;
23
24/*
25 Kernel Density Estimation class. The three main references are (1) "Scott DW, Multivariate Density Estimation.
26Theory, Practice and Visualization. New York: Wiley", (2) "Jann Ben - ETH Zurich, Switzerland -, Univariate kernel density estimation document for KDENS: Stata module for univariate kernel density estimation." and (3) "Hardle W, Muller M, Sperlich S, Werwatz A, Nonparametric and Semiparametric Models. Springer."
27 The algorithm is briefly described in (4) "Cranmer KS, Kernel Estimation in High-Energy
28Physics. Computer Physics Communications 136:198-207,2001" - e-Print Archive: hep ex/0011057.
29 A binned version is also implemented to address the performance issue due to its data size dependence.
30*/
31class TKDE : public TNamed {
32public:
33
34 enum EKernelType { // Kernel function type option
39 kUserDefined, // Internal use only for the class's template constructor
40 kTotalKernels // Internal use only for member initialization
41 };
42
43 enum EIteration { // KDE fitting option
45 kFixed
46 };
47
48 enum EMirror { // Data "mirroring" option to address the probability "spill out" boundary effect
58 };
59
60 enum EBinning{ // Data binning option
62 kRelaxedBinning, // The algorithm is allowed to use binning if the data is large enough
64 };
65
66
67 TKDE(); // defaul constructor used only by I/O
68
69 TKDE(UInt_t events, const Double_t* data, Double_t xMin = 0.0, Double_t xMax = 0.0, const Option_t* option =
70 "KernelType:Gaussian;Iteration:Adaptive;Mirror:noMirror;Binning:RelaxedBinning", Double_t rho = 1.0) {
71 Instantiate( nullptr, events, data, nullptr, xMin, xMax, option, rho);
72 }
73
74 TKDE(UInt_t events, const Double_t* data, const Double_t* dataWeight, Double_t xMin = 0.0, Double_t xMax = 0.0, const Option_t* option =
75 "KernelType:Gaussian;Iteration:Adaptive;Mirror:noMirror;Binning:RelaxedBinning", Double_t rho = 1.0) {
76 Instantiate( nullptr, events, data, dataWeight, xMin, xMax, option, rho);
77 }
78
79 template<class KernelFunction>
80 TKDE(const Char_t* /*name*/, const KernelFunction& kernfunc, UInt_t events, const Double_t* data, Double_t xMin = 0.0, Double_t xMax = 0.0, const Option_t* option = "KernelType:UserDefined;Iteration:Adaptive;Mirror:noMirror;Binning:RelaxedBinning", Double_t rho = 1.0) {
81 Instantiate(new ROOT::Math::WrappedFunction<const KernelFunction&>(kernfunc), events, data, nullptr, xMin, xMax, option, rho);
82 }
83 template<class KernelFunction>
84 TKDE(const Char_t* /*name*/, const KernelFunction& kernfunc, UInt_t events, const Double_t* data, const Double_t * dataWeight, Double_t xMin = 0.0, Double_t xMax = 0.0, const Option_t* option = "KernelType:UserDefined;Iteration:Adaptive;Mirror:noMirror;Binning:RelaxedBinning", Double_t rho = 1.0) {
85 Instantiate(new ROOT::Math::WrappedFunction<const KernelFunction&>(kernfunc), events, data, dataWeight, xMin, xMax, option, rho);
86 }
87
88 virtual ~TKDE();
89
90 void Fill(Double_t data);
91 void Fill(Double_t data, Double_t weight);
92 void SetKernelType(EKernelType kern);
93 void SetIteration(EIteration iter);
94 void SetMirror(EMirror mir);
95 void SetBinning(EBinning);
96 void SetNBins(UInt_t nbins);
97 void SetUseBinsNEvents(UInt_t nEvents);
98 void SetTuneFactor(Double_t rho);
99 void SetRange(Double_t xMin, Double_t xMax); // By default computed from the data
100
101 virtual void Draw(const Option_t* option = "");
102
104 Double_t operator()(const Double_t* x, const Double_t* p=0) const; // Needed for creating TF1
105
106 Double_t GetValue(Double_t x) const { return (*this)(x); }
108
109 Double_t GetBias(Double_t x) const;
110 Double_t GetMean() const;
111 Double_t GetSigma() const;
112 Double_t GetRAMISE() const;
113
114 Double_t GetFixedWeight() const;
115
116 TF1* GetFunction(UInt_t npx = 100, Double_t xMin = 1.0, Double_t xMax = 0.0);
117 TF1* GetUpperFunction(Double_t confidenceLevel = 0.95, UInt_t npx = 100, Double_t xMin = 1.0, Double_t xMax = 0.0);
118 TF1* GetLowerFunction(Double_t confidenceLevel = 0.95, UInt_t npx = 100, Double_t xMin = 1.0, Double_t xMax = 0.0);
119 TF1* GetApproximateBias(UInt_t npx = 100, Double_t xMin = 1.0, Double_t xMax = 0.0);
120 TGraphErrors * GetGraphWithErrors(UInt_t npx = 100, Double_t xMin = 1.0, Double_t xMax = 0.0);
121
122 // get the drawn object to chanage settings
123 // These objects are managed by TKDE and should not be deleted by the user
124 TF1 * GetDrawnFunction() { return fPDF;}
128
129 const Double_t * GetAdaptiveWeights() const;
130
131
132private:
133
134 TKDE(TKDE& kde); // Disallowed copy constructor
135 TKDE operator=(TKDE& kde); // Disallowed assign operator
136
138 KernelFunction_Ptr fKernelFunction; //! pointer to kernel function
139
140 class TKernel;
141 friend class TKernel;
142
143 TKernel* fKernel; //! internal kernel class. Transient because it is recreated after reading from a file
144
145 std::vector<Double_t> fData; // Data events
146 std::vector<Double_t> fEvents; // Original data storage
147 std::vector<Double_t> fEventWeights; // Original data weights
148
149 TF1* fPDF; //! Output Kernel Density Estimation PDF function
150 TF1* fUpperPDF; //! Output Kernel Density Estimation upper confidence interval PDF function
151 TF1* fLowerPDF; //! Output Kernel Density Estimation lower confidence interval PDF function
152 TF1* fApproximateBias; //! Output Kernel Density Estimation approximate bias
153 TGraphErrors* fGraph; //! Graph with the errors
154
159
160
163 Bool_t fNewData; // flag to control when new data are given
164 Bool_t fUseMinMaxFromData; // flag top control if min and max must be used from data
165
166 UInt_t fNBins; // Number of bins for binned data option
167 UInt_t fNEvents; // Data's number of events
168 Double_t fSumOfCounts; // Data sum of weights
169 UInt_t fUseBinsNEvents; // If the algorithm is allowed to use automatic (relaxed) binning this is the minimum number of events to do so
170
171 Double_t fMean; // Data mean
172 Double_t fSigma; // Data std deviation
173 Double_t fSigmaRob; // Data std deviation (robust estimation)
174 Double_t fXMin; // Data minimum value
175 Double_t fXMax; // Data maximum value
176 Double_t fRho; // Adjustment factor for sigma
177 Double_t fAdaptiveBandwidthFactor; // Geometric mean of the kernel density estimation from the data for adaptive iteration
178
179 Double_t fWeightSize; // Caches the weight size
180
181 std::vector<Double_t> fCanonicalBandwidths;
182 std::vector<Double_t> fKernelSigmas2;
183
184 std::vector<Double_t> fBinCount; // Number of events per bin for binned data option
185
186 std::vector<Bool_t> fSettedOptions; // User input options flag
187
188 struct KernelIntegrand;
189 friend struct KernelIntegrand;
190
191 void Instantiate(KernelFunction_Ptr kernfunc, UInt_t events, const Double_t* data, const Double_t* weight,
192 Double_t xMin, Double_t xMax, const Option_t* option, Double_t rho);
193
195 // Returns the kernel evaluation at x
196 Double_t k2_PI_ROOT_INV = 0.398942280401432703; // (2 * M_PI)**-0.5
197 return (x > -9. && x < 9.) ? k2_PI_ROOT_INV * std::exp(-.5 * x * x) : 0.0;
198 }
200 return (x > -1. && x < 1.) ? 3. / 4. * (1. - x * x) : 0.0;
201 }
203 // Returns the kernel evaluation at x
204 return (x > -1. && x < 1.) ? 15. / 16. * (1. - x * x) * (1. - x * x) : 0.0;
205 }
207 // Returns the kernel evaluation at x
208 return (x > -1. && x < 1.) ? M_PI_4 * std::cos(M_PI_2 * x) : 0.0;
209 }
210 Double_t UpperConfidenceInterval(const Double_t* x, const Double_t* p) const; // Valid if the bandwidth is small compared to nEvents**1/5
211 Double_t LowerConfidenceInterval(const Double_t* x, const Double_t* p) const; // Valid if the bandwidth is small compared to nEvents**1/5
212 Double_t ApproximateBias(const Double_t* x, const Double_t* ) const { return GetBias(*x); }
218 void ComputeDataStats() ;
219
220 UInt_t Index(Double_t x) const;
221
223 void SetBinCountData();
224 void CheckKernelValidity();
226 void SetUserKernelSigma2();
228 void SetKernelSigmas2();
230 void SetUseBins();
231 void SetMirror();
232 void SetMean();
233 void SetSigma(Double_t R);
234 void SetKernel();
235 void SetKernelFunction(KernelFunction_Ptr kernfunc = 0);
236 void SetOptions(const Option_t* option, Double_t rho);
237 void CheckOptions(Bool_t isUserDefinedKernel = kFALSE);
238 void GetOptions(std::string optionType, std::string option);
239 void AssureOptions();
240 void SetData(const Double_t* data, const Double_t * weights);
241 void ReInit();
242 void InitFromNewData();
243 void SetMirroredEvents();
244 void SetDrawOptions(const Option_t* option, TString& plotOpt, TString& drawOpt);
245 void DrawErrors(TString& drawOpt);
246 void DrawConfidenceInterval(TString& drawOpt, double cl=0.95);
247
248 TF1* GetKDEFunction(UInt_t npx = 100, Double_t xMin = 1.0, Double_t xMax = 0.0);
249 TF1* GetKDEApproximateBias(UInt_t npx = 100, Double_t xMin = 1.0, Double_t xMax = 0.0);
250 // The density to estimate should be at least twice differentiable.
251 TF1* GetPDFUpperConfidenceInterval(Double_t confidenceLevel = 0.95, UInt_t npx = 100, Double_t xMin = 1.0, Double_t xMax = 0.0);
252 TF1* GetPDFLowerConfidenceInterval(Double_t confidenceLevel = 0.95, UInt_t npx = 100, Double_t xMin = 1.0, Double_t xMax = 0.0);
253
254 ClassDef(TKDE, 2) // One dimensional semi-parametric Kernel Density Estimation
255
256};
257
258#endif
#define M_PI_2
Definition: Math.h:40
#define M_PI_4
Definition: Math.h:44
#define R(a, b, c, d, e, f, g, h, i)
Definition: RSha256.hxx:110
char Char_t
Definition: RtypesCore.h:29
unsigned int UInt_t
Definition: RtypesCore.h:42
const Bool_t kFALSE
Definition: RtypesCore.h:88
bool Bool_t
Definition: RtypesCore.h:59
double Double_t
Definition: RtypesCore.h:55
const char Option_t
Definition: RtypesCore.h:62
#define ClassDef(name, id)
Definition: Rtypes.h:326
float xmin
Definition: THbookFile.cxx:93
float xmax
Definition: THbookFile.cxx:93
double cos(double)
double exp(double)
Interface (abstract class) for generic functions objects of one-dimension Provides a method to evalua...
Definition: IFunction.h:135
Template class to wrap any C++ callable object which takes one argument i.e.
1-Dim function class
Definition: TF1.h:211
A TGraphErrors is a TGraph with error bars.
Definition: TGraphErrors.h:26
Kernel Density Estimation class.
Definition: TKDE.h:31
TF1 * GetPDFUpperConfidenceInterval(Double_t confidenceLevel=0.95, UInt_t npx=100, Double_t xMin=1.0, Double_t xMax=0.0)
Definition: TKDE.cxx:1168
TF1 * GetKDEApproximateBias(UInt_t npx=100, Double_t xMin=1.0, Double_t xMax=0.0)
Definition: TKDE.cxx:1194
void SetData(const Double_t *data, const Double_t *weights)
Definition: TKDE.cxx:436
TF1 * fLowerPDF
Output Kernel Density Estimation upper confidence interval PDF function.
Definition: TKDE.h:151
virtual ~TKDE()
Definition: TKDE.cxx:88
std::vector< Double_t > fKernelSigmas2
Definition: TKDE.h:182
Double_t ComputeKernelL2Norm() const
Definition: TKDE.cxx:1049
TF1 * fPDF
Definition: TKDE.h:149
TF1 * GetPDFLowerConfidenceInterval(Double_t confidenceLevel=0.95, UInt_t npx=100, Double_t xMin=1.0, Double_t xMax=0.0)
Definition: TKDE.cxx:1181
void SetKernelType(EKernelType kern)
Definition: TKDE.cxx:314
std::vector< Double_t > fCanonicalBandwidths
Definition: TKDE.h:181
void SetKernelFunction(KernelFunction_Ptr kernfunc=0)
Definition: TKDE.cxx:579
UInt_t fNEvents
Definition: TKDE.h:167
void ComputeDataStats()
Definition: TKDE.cxx:1085
Double_t fXMax
Definition: TKDE.h:175
Double_t UpperConfidenceInterval(const Double_t *x, const Double_t *p) const
Definition: TKDE.cxx:988
friend class TKernel
Definition: TKDE.h:140
void ReInit()
Definition: TKDE.cxx:470
TF1 * GetDrawnUpperFunction()
Definition: TKDE.h:125
Double_t ApproximateBias(const Double_t *x, const Double_t *) const
Definition: TKDE.h:212
Double_t ComputeMidspread()
Definition: TKDE.cxx:1114
Bool_t fNewData
Definition: TKDE.h:163
void SetMirror()
Definition: TKDE.cxx:427
Bool_t fUseMirroring
Definition: TKDE.h:161
void DrawConfidenceInterval(TString &drawOpt, double cl=0.95)
Definition: TKDE.cxx:887
TF1 * GetDrawnLowerFunction()
Definition: TKDE.h:126
void SetMirroredEvents()
Definition: TKDE.cxx:520
EMirror fMirror
Definition: TKDE.h:157
void SetUserCanonicalBandwidth()
Definition: TKDE.cxx:1125
Bool_t fMirrorLeft
Definition: TKDE.h:161
EIteration fIteration
Definition: TKDE.h:156
void CheckKernelValidity()
Definition: TKDE.cxx:1025
TKDE(const Char_t *, const KernelFunction &kernfunc, UInt_t events, const Double_t *data, const Double_t *dataWeight, Double_t xMin=0.0, Double_t xMax=0.0, const Option_t *option="KernelType:UserDefined;Iteration:Adaptive;Mirror:noMirror;Binning:RelaxedBinning", Double_t rho=1.0)
Definition: TKDE.h:84
const Double_t * GetAdaptiveWeights() const
Definition: TKDE.cxx:913
Double_t fAdaptiveBandwidthFactor
Definition: TKDE.h:177
TF1 * GetDrawnFunction()
Definition: TKDE.h:124
Double_t LowerConfidenceInterval(const Double_t *x, const Double_t *p) const
Definition: TKDE.cxx:997
Double_t fSigmaRob
Definition: TKDE.h:173
std::vector< Double_t > fBinCount
Definition: TKDE.h:184
EBinning fBinning
Definition: TKDE.h:158
EIteration
Definition: TKDE.h:43
@ kAdaptive
Definition: TKDE.h:44
@ kFixed
Definition: TKDE.h:45
Double_t GetRAMISE() const
Definition: TKDE.cxx:714
void SetIteration(EIteration iter)
Definition: TKDE.cxx:325
Double_t ComputeKernelIntegral() const
Definition: TKDE.cxx:1076
Double_t CosineArchKernel(Double_t x) const
Definition: TKDE.h:206
Double_t fXMin
Definition: TKDE.h:174
Double_t operator()(Double_t x) const
Definition: TKDE.cxx:692
void SetUserKernelSigma2()
Definition: TKDE.cxx:1130
Double_t GetBias(Double_t x) const
Definition: TKDE.cxx:1007
std::vector< Double_t > fData
internal kernel class. Transient because it is recreated after reading from a file
Definition: TKDE.h:145
Double_t fSumOfCounts
Definition: TKDE.h:168
UInt_t fUseBinsNEvents
Definition: TKDE.h:169
void SetKernel()
Definition: TKDE.cxx:564
Double_t fSigma
Definition: TKDE.h:172
TGraphErrors * GetGraphWithErrors(UInt_t npx=100, Double_t xMin=1.0, Double_t xMax=0.0)
Definition: TKDE.cxx:863
Double_t GetMean() const
Definition: TKDE.cxx:702
Double_t fRho
Definition: TKDE.h:176
ROOT::Math::IBaseFunctionOneDim * KernelFunction_Ptr
Definition: TKDE.h:137
Bool_t fAsymRight
Definition: TKDE.h:161
Double_t fWeightSize
Definition: TKDE.h:179
TKernel * fKernel
Definition: TKDE.h:143
void SetUseBinsNEvents(UInt_t nEvents)
Definition: TKDE.cxx:371
std::vector< Double_t > fEvents
Definition: TKDE.h:146
Double_t GetError(Double_t x) const
Definition: TKDE.cxx:1016
TF1 * GetKDEFunction(UInt_t npx=100, Double_t xMin=1.0, Double_t xMax=0.0)
Definition: TKDE.cxx:1154
void SetBinning(EBinning)
Definition: TKDE.cxx:345
void GetOptions(std::string optionType, std::string option)
Definition: TKDE.cxx:208
Double_t GetValue(Double_t x) const
Definition: TKDE.h:106
Bool_t fAsymLeft
Definition: TKDE.h:161
std::vector< Bool_t > fSettedOptions
Definition: TKDE.h:186
Double_t GaussianKernel(Double_t x) const
Definition: TKDE.h:194
void SetRange(Double_t xMin, Double_t xMax)
Definition: TKDE.cxx:387
void SetMean()
Definition: TKDE.cxx:553
virtual void Draw(const Option_t *option="")
Definition: TKDE.cxx:805
Double_t ComputeKernelSigma2() const
Definition: TKDE.cxx:1058
void SetOptions(const Option_t *option, Double_t rho)
Definition: TKDE.cxx:138
void SetUseBins()
Definition: TKDE.cxx:401
Double_t GetFixedWeight() const
Definition: TKDE.cxx:902
void AssureOptions()
Definition: TKDE.cxx:275
TF1 * GetFunction(UInt_t npx=100, Double_t xMin=1.0, Double_t xMax=0.0)
Definition: TKDE.cxx:640
void SetBinCountData()
Definition: TKDE.cxx:767
TF1 * GetUpperFunction(Double_t confidenceLevel=0.95, UInt_t npx=100, Double_t xMin=1.0, Double_t xMax=0.0)
Definition: TKDE.cxx:649
void InitFromNewData()
Definition: TKDE.cxx:494
void Instantiate(KernelFunction_Ptr kernfunc, UInt_t events, const Double_t *data, const Double_t *weight, Double_t xMin, Double_t xMax, const Option_t *option, Double_t rho)
Definition: TKDE.cxx:99
void SetDrawOptions(const Option_t *option, TString &plotOpt, TString &drawOpt)
Definition: TKDE.cxx:164
EMirror
Definition: TKDE.h:48
@ kMirrorLeft
Definition: TKDE.h:50
@ kMirrorAsymLeftRight
Definition: TKDE.h:54
@ kMirrorAsymRight
Definition: TKDE.h:55
@ kMirrorAsymBoth
Definition: TKDE.h:57
@ kNoMirror
Definition: TKDE.h:49
@ kMirrorRight
Definition: TKDE.h:51
@ kMirrorLeftAsymRight
Definition: TKDE.h:56
@ kMirrorBoth
Definition: TKDE.h:52
@ kMirrorAsymLeft
Definition: TKDE.h:53
TGraphErrors * GetDrawnGraph()
Definition: TKDE.h:127
TKDE(TKDE &kde)
TGraphErrors * fGraph
Output Kernel Density Estimation approximate bias.
Definition: TKDE.h:153
void SetCanonicalBandwidths()
Definition: TKDE.cxx:623
TKDE()
default constructor used by I/O
Definition: TKDE.cxx:72
void SetBinCentreData(Double_t xmin, Double_t xmax)
Definition: TKDE.cxx:758
TKDE(const Char_t *, const KernelFunction &kernfunc, UInt_t events, const Double_t *data, Double_t xMin=0.0, Double_t xMax=0.0, const Option_t *option="KernelType:UserDefined;Iteration:Adaptive;Mirror:noMirror;Binning:RelaxedBinning", Double_t rho=1.0)
Definition: TKDE.h:80
void SetTuneFactor(Double_t rho)
Definition: TKDE.cxx:377
UInt_t Index(Double_t x) const
Definition: TKDE.cxx:973
void Fill(Double_t data)
Definition: TKDE.cxx:664
TF1 * fUpperPDF
Output Kernel Density Estimation PDF function.
Definition: TKDE.h:150
Bool_t fMirrorRight
Definition: TKDE.h:161
UInt_t fNBins
Definition: TKDE.h:166
Double_t ComputeKernelMu() const
Definition: TKDE.cxx:1067
EKernelType
Definition: TKDE.h:34
@ kGaussian
Definition: TKDE.h:35
@ kEpanechnikov
Definition: TKDE.h:36
@ kCosineArch
Definition: TKDE.h:38
@ kBiweight
Definition: TKDE.h:37
@ kTotalKernels
Definition: TKDE.h:40
@ kUserDefined
Definition: TKDE.h:39
Double_t fMean
Definition: TKDE.h:171
void DrawErrors(TString &drawOpt)
Definition: TKDE.cxx:856
void SetNBins(UInt_t nbins)
Definition: TKDE.cxx:352
void CheckOptions(Bool_t isUserDefinedKernel=kFALSE)
Definition: TKDE.cxx:291
Double_t EpanechnikovKernel(Double_t x) const
Definition: TKDE.h:199
Double_t BiweightKernel(Double_t x) const
Definition: TKDE.h:202
void SetKernelSigmas2()
Definition: TKDE.cxx:632
Bool_t fUseMinMaxFromData
Definition: TKDE.h:164
Double_t GetSigma() const
Definition: TKDE.cxx:708
EKernelType fKernelType
Graph with the errors.
Definition: TKDE.h:155
TF1 * fApproximateBias
Output Kernel Density Estimation lower confidence interval PDF function.
Definition: TKDE.h:152
TKDE operator=(TKDE &kde)
void SetSigma(Double_t R)
Definition: TKDE.cxx:558
TKDE(UInt_t events, const Double_t *data, Double_t xMin=0.0, Double_t xMax=0.0, const Option_t *option="KernelType:Gaussian;Iteration:Adaptive;Mirror:noMirror;Binning:RelaxedBinning", Double_t rho=1.0)
Definition: TKDE.h:69
std::vector< Double_t > fEventWeights
Definition: TKDE.h:147
TF1 * GetApproximateBias(UInt_t npx=100, Double_t xMin=1.0, Double_t xMax=0.0)
Definition: TKDE.cxx:659
TF1 * GetLowerFunction(Double_t confidenceLevel=0.95, UInt_t npx=100, Double_t xMin=1.0, Double_t xMax=0.0)
Definition: TKDE.cxx:654
Bool_t fUseBins
Definition: TKDE.h:162
TKDE(UInt_t events, const Double_t *data, const Double_t *dataWeight, Double_t xMin=0.0, Double_t xMax=0.0, const Option_t *option="KernelType:Gaussian;Iteration:Adaptive;Mirror:noMirror;Binning:RelaxedBinning", Double_t rho=1.0)
Definition: TKDE.h:74
KernelFunction_Ptr fKernelFunction
Definition: TKDE.h:138
friend struct KernelIntegrand
Definition: TKDE.h:188
EBinning
Definition: TKDE.h:60
@ kUnbinned
Definition: TKDE.h:61
@ kRelaxedBinning
Definition: TKDE.h:62
@ kForcedBinning
Definition: TKDE.h:63
void SetHistogram()
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:29
Basic string class.
Definition: TString.h:131
Double_t x[n]
Definition: legend1.C:17