]>
Commit | Line | Data |
---|---|---|
4c0d7bc7 | 1 | //---------------------------------------------------------------------- |
fef6f2b3 | 2 | // AliPWGFunc |
4c0d7bc7 | 3 | // |
4 | // This class implements several function useful to fit pt spectra, | |
5 | // including but not limited to blast wave models. | |
6 | // | |
4c0d7bc7 | 7 | // |
8 | // Author: M. Floris, CERN | |
9 | //---------------------------------------------------------------------- | |
10 | ||
11 | #ifndef ALIBWFUNC_H | |
12 | #define ALIBWFUNC_H | |
13 | ||
14 | #if !defined(__CINT__) || defined(__MAKECINT__) | |
15 | ||
16 | #include "TObject.h" | |
4c0d7bc7 | 17 | |
18 | class TF1; | |
19 | class TH1; | |
a4097895 | 20 | class TGraph; |
4c0d7bc7 | 21 | #endif |
22 | ||
23 | ||
24 | ||
fef6f2b3 | 25 | class AliPWGFunc : public TObject { |
4c0d7bc7 | 26 | |
27 | ||
28 | public: | |
29 | // define the variables used for the function | |
0e019ec6 | 30 | typedef enum {kdNdpt,kOneOverPtdNdpt,kOneOverMtdNdmt,kdNdmt,kOneOverMtdNdmtMinusM} VarType_t; |
4c0d7bc7 | 31 | |
fef6f2b3 | 32 | AliPWGFunc(); |
33 | ~AliPWGFunc(); | |
4c0d7bc7 | 34 | |
a4097895 | 35 | // Boltzmann-Gibbs Blast Wave |
36 | TF1 * GetBGBW(Double_t mass, Double_t beta, Double_t T, Double_t n, | |
4c0d7bc7 | 37 | Double_t norm, const char * name = "fBGBW"); |
a4097895 | 38 | |
4c0d7bc7 | 39 | |
40 | // Boltzmann | |
41 | TF1 * GetBoltzmann(Double_t mass, Double_t T, Double_t norm, const char * name ="fBoltzmann"); | |
42 | ||
43 | // Tsallis blast wave | |
44 | TF1 * GetTsallisBW(Double_t mass, Double_t beta, Double_t T, Double_t q, | |
45 | Double_t norm, Double_t ymax = 0.5, const char * name = "fTsallisBW"); | |
46 | ||
47 | // Simple exponential in 1/mt*dNdmt | |
a4097895 | 48 | TF1 * GetMTExp(Double_t mass, Double_t T, Double_t norm, const char * name ="fMtExp"); |
4c0d7bc7 | 49 | |
50 | // Simple exponential in 1/pt*dNdpt | |
a4097895 | 51 | TF1 * GetPTExp(Double_t T, Double_t norm, const char * name ="fPtExp"); |
4c0d7bc7 | 52 | |
53 | // Tsallis (no BW, a la CMS) | |
54 | TF1 * GetTsallis(Double_t mass, Double_t T, Double_t q, Double_t norm, const char * name="fTsallis") | |
55 | {return GetLevi (mass,T,1/(q-1),norm,name);} | |
56 | ||
57 | // Levi function (aka Tsallis) | |
58 | TF1 * GetLevi(Double_t mass, Double_t T, Double_t n, Double_t norm, const char * name="fLevi"); | |
59 | ||
60 | // UA1 function | |
61 | TF1 * GetUA1(Double_t mass, Double_t p0star, Double_t pt0, Double_t n, Double_t T, Double_t norm, const char * name="fUA1"); | |
62 | ||
63 | // Function derived from a histo | |
64 | TF1 * GetHistoFunc(TH1 * h, const char * name = "fHisto"); | |
65 | ||
a4097895 | 66 | // Function derived from a graph |
67 | TF1 * GetGraphFunc(TGraph * h, const char * name = "fHisto"); | |
68 | ||
4c0d7bc7 | 69 | // Power law |
70 | TF1 * GetPowerLaw(Double_t pt0, Double_t n, Double_t norm, const char * name="fPowerLaw"); | |
a4097895 | 71 | |
72 | ||
73 | // Bose-Einstein | |
74 | TF1 * GetBoseEinstein(Double_t mass, Double_t T, Double_t norm, const char * name="fBoseEinstein"); | |
75 | ||
76 | // Fermi-Dirac | |
77 | TF1 * GetFermiDirac(Double_t mass, Double_t T, Double_t norm, const char * name="fFermiDirac"); | |
4c0d7bc7 | 78 | |
79 | ||
80 | void SetVarType(VarType_t tp) {fVarType=tp;} | |
81 | ||
82 | protected: | |
83 | ||
84 | // dNdpt here means 1/pt dN/dpt | |
85 | ||
a4097895 | 86 | |
87 | // Boltzmann-Gibbs blast wave | |
88 | TF1 * GetBGBWdNdpt(Double_t mass, Double_t beta, Double_t temp, | |
89 | Double_t n, Double_t norm, const char * name= "fBGBW"); | |
4c0d7bc7 | 90 | |
91 | // Tsallis blast wave | |
92 | TF1 * GetTsallisBWdNdpt(Double_t mass, Double_t beta, Double_t T, Double_t q, | |
93 | Double_t norm, Double_t ymax = 0.5, const char * name = "fTsallisBW"); | |
94 | ||
95 | // Simple exponential in 1/mt*MT | |
96 | TF1 * GetMTExpdNdpt(Double_t mass, Double_t T, Double_t norm, const char * name ="fExp"); | |
97 | ||
a4097895 | 98 | // Bose-Einstein |
99 | TF1 * GetBoseEinsteindNdpt(Double_t mass, Double_t T, Double_t norm, const char * name="fBoseEinstein"); | |
100 | ||
101 | // Fermi-Dirac | |
102 | TF1 * GetFermiDiracdNdpt(Double_t mass, Double_t T, Double_t norm, const char * name="fFermiDirac"); | |
103 | ||
104 | ||
4c0d7bc7 | 105 | // Tsallis (no BW, a la CMS) |
106 | TF1 * GetTsallisdNdpt(Double_t mass, Double_t T, Double_t q, Double_t norm, const char * name="fTsallis"); | |
107 | ||
108 | // Levi function | |
109 | TF1 * GetLevidNdpt(Double_t mass, Double_t T, Double_t n, Double_t norm, const char * name="fLevi"); | |
110 | ||
111 | // Power Law function | |
112 | TF1 * GetPowerLawdNdpt(Double_t pt0, Double_t n, Double_t norm, const char * name="fLevi"); | |
113 | ||
114 | // UA1 function | |
115 | TF1 * GetUA1dNdpt(Double_t pt0, Double_t n, Double_t norm, const char * name="fLevi"); | |
116 | ||
117 | // TimesPt means dNdpt | |
118 | ||
119 | // Boltzmann-Gibbs Blast Wave | |
a4097895 | 120 | TF1 * GetBGBWdNdptTimesPt(Double_t mass, Double_t beta, Double_t T, Double_t n, |
4c0d7bc7 | 121 | Double_t norm, const char * name = "fBGBWTimesPt"); |
122 | ||
4fd89c20 | 123 | TF1 * GetBGBWdNdptTimesMt(Double_t mass, Double_t beta, Double_t T, Double_t n, |
124 | Double_t norm, const char * name = "fBGBWTimesMt"); | |
125 | ||
126 | ||
4c0d7bc7 | 127 | // Tsallis blast wave |
128 | TF1 * GetTsallisBWdNdptTimesPt(Double_t mass, Double_t beta, Double_t T, Double_t q, | |
129 | Double_t norm, Double_t ymax = 0.5, const char * name = "fTsallisBWTimesPt"); | |
130 | // Levi function | |
131 | TF1 * GetLevidNdptTimesPt(Double_t mass, Double_t T, Double_t n, Double_t norm, const char * name="fLevi"); | |
132 | ||
133 | // UA1 function | |
134 | TF1 * GetUA1dNdptTimesPt(Double_t pt0, Double_t n, Double_t norm, const char * name="fLevi"); | |
135 | ||
136 | // PowerLaw function | |
137 | TF1 * GetPowerLawdNdptTimesPt(Double_t pt0, Double_t n, Double_t norm, const char * name="fLevi"); | |
138 | ||
139 | // Simple exponential in 1/mt*dNdmT | |
140 | TF1 * GetMTExpdNdptTimesPt(Double_t mass, Double_t T, Double_t norm, const char * name ="fMtExpTimesPt"); | |
141 | ||
a4097895 | 142 | // Bose-Einstein |
143 | TF1 * GetBoseEinsteindNdptTimesPt(Double_t mass, Double_t T, Double_t norm, const char * name="fBoseEinstein"); | |
144 | ||
145 | // Fermi-Dirac | |
146 | TF1 * GetFermiDiracdNdptTimesPt(Double_t mass, Double_t T, Double_t norm, const char * name="fFermiDirac"); | |
147 | ||
148 | ||
4c0d7bc7 | 149 | // Simple exponential in 1/mp*dNdpT |
150 | TF1 * GetPTExpdNdptTimesPt(Double_t T, Double_t norm, const char * name ="fPtExpTimesPt"); | |
151 | ||
152 | // Boltzmann (exp in 1/mt*dNdmT times mt) | |
153 | TF1 * GetBoltzmanndNdptTimesPt(Double_t mass, Double_t T, Double_t norm, const char * name ="fBoltzmannTimesPt"); | |
154 | ||
155 | // Tsallis (no BW, a la CMS) | |
156 | TF1 * GetTsallisdNdptTimesPt(Double_t mass, Double_t T, Double_t q, Double_t norm, const char * name="fTsallisTimesPt"); | |
157 | ||
158 | // 1/mt dNdmt | |
159 | ||
160 | // Levi | |
0e019ec6 | 161 | TF1 * GetLevidNdmt(Double_t mass, Double_t T, Double_t n, Double_t norm, const char * name = "fLeviMt", VarType_t var = kOneOverMtdNdmt); |
4c0d7bc7 | 162 | |
4fd89c20 | 163 | // mt exp |
38a77948 | 164 | TF1 * GetMTExpdNdmt(Double_t mass, Double_t temp, Double_t norm, const char * name, VarType_t var); |
4fd89c20 | 165 | |
166 | ||
4c0d7bc7 | 167 | // gereral setters |
168 | void SetLineWidth(Width_t width) { fLineWidth = width;} | |
169 | ||
170 | TF1 * GetTestFunc(Double_t mass, Double_t T, Double_t norm, Double_t ymax, const char * name ="fTest") ; | |
171 | ||
172 | // static functions for TF1 | |
173 | // Boltzmann-Gibbs Blast Wave | |
8ffc8c1c | 174 | static Double_t StaticBGdNdPt(const double * x, const double* p); |
175 | static Double_t StaticBGdNdPtTimesPt(const double * x, const double* p); | |
4fd89c20 | 176 | static Double_t StaticBGdNdMtTimesMt(const double * x, const double* p); |
4c0d7bc7 | 177 | // Tsallis blast wave |
8ffc8c1c | 178 | static Double_t StaticTsallisdNdPt(const double * x, const double* p); |
179 | static Double_t StaticTsallisdNdPtTimesPt(const double * x, const double* p); | |
4c0d7bc7 | 180 | // Helper funcs for numeric integration |
8ffc8c1c | 181 | static Double_t IntegrandBG(const double * x, const double* p); |
182 | static Double_t IntegrandTsallis(const double * x, const double* p); | |
4c0d7bc7 | 183 | |
184 | // Test func | |
8ffc8c1c | 185 | static Double_t StaticTest(const double * x, const double* p); |
186 | static Double_t IntegrandTest(const double * x, const double* p); | |
4c0d7bc7 | 187 | |
188 | // histo func | |
8ffc8c1c | 189 | static Double_t StaticHistoFunc(const double * x, const double* p); |
4c0d7bc7 | 190 | |
191 | // UA1 parametrization | |
8ffc8c1c | 192 | static Double_t StaticUA1Func(const double * x, const double* p); |
fef6f2b3 | 193 | static Double_t StaticUA1FuncOneOverPt(const double * x, const double* p) ; |
194 | ||
4c0d7bc7 | 195 | |
196 | private: | |
197 | ||
198 | ||
8ffc8c1c | 199 | TF1 * fLastFunc; // Last function returned |
200 | Width_t fLineWidth; // Line width | |
201 | VarType_t fVarType; // Variable types (e.g. dNdpt vs pt, 1/mt dNdmt vs mt...) | |
4c0d7bc7 | 202 | |
fef6f2b3 | 203 | AliPWGFunc(const AliPWGFunc&); // not implemented |
204 | AliPWGFunc& operator=(const AliPWGFunc&); // not implemented | |
4c0d7bc7 | 205 | |
206 | ||
fef6f2b3 | 207 | ClassDef(AliPWGFunc, 1) |
4c0d7bc7 | 208 | |
209 | ||
210 | }; | |
211 | ||
212 | #endif |