]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/Tools/AliPWGFunc.h
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWG / Tools / AliPWGFunc.h
CommitLineData
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
18class TF1;
19class TH1;
a4097895 20class TGraph;
4c0d7bc7 21#endif
22
23
24
fef6f2b3 25class AliPWGFunc : public TObject {
4c0d7bc7 26
27
28public:
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
82protected:
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
196private:
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