1 //----------------------------------------------------------------------
4 // This class implements several function useful to fit pt spectra,
5 // including but not limited to blast wave models.
8 // Author: M. Floris, CERN
9 //----------------------------------------------------------------------
14 #if !defined(__CINT__) || defined(__MAKECINT__)
25 class AliPWGFunc : public TObject {
29 // define the variables used for the function
30 typedef enum {kdNdpt,kOneOverPtdNdpt,kOneOverMtdNdmt,kdNdmt,kOneOverMtdNdmtMinusM} VarType_t;
35 // Boltzmann-Gibbs Blast Wave
36 TF1 * GetBGBW(Double_t mass, Double_t beta, Double_t T, Double_t n,
37 Double_t norm, const char * name = "fBGBW");
41 TF1 * GetBoltzmann(Double_t mass, Double_t T, Double_t norm, const char * name ="fBoltzmann");
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");
47 // Simple exponential in 1/mt*dNdmt
48 TF1 * GetMTExp(Double_t mass, Double_t T, Double_t norm, const char * name ="fMtExp");
50 // Simple exponential in 1/pt*dNdpt
51 TF1 * GetPTExp(Double_t T, Double_t norm, const char * name ="fPtExp");
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);}
57 // Levi function (aka Tsallis)
58 TF1 * GetLevi(Double_t mass, Double_t T, Double_t n, Double_t norm, const char * name="fLevi");
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");
63 // Function derived from a histo
64 TF1 * GetHistoFunc(TH1 * h, const char * name = "fHisto");
66 // Function derived from a graph
67 TF1 * GetGraphFunc(TGraph * h, const char * name = "fHisto");
70 TF1 * GetPowerLaw(Double_t pt0, Double_t n, Double_t norm, const char * name="fPowerLaw");
74 TF1 * GetBoseEinstein(Double_t mass, Double_t T, Double_t norm, const char * name="fBoseEinstein");
77 TF1 * GetFermiDirac(Double_t mass, Double_t T, Double_t norm, const char * name="fFermiDirac");
80 void SetVarType(VarType_t tp) {fVarType=tp;}
84 // dNdpt here means 1/pt dN/dpt
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");
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");
95 // Simple exponential in 1/mt*MT
96 TF1 * GetMTExpdNdpt(Double_t mass, Double_t T, Double_t norm, const char * name ="fExp");
99 TF1 * GetBoseEinsteindNdpt(Double_t mass, Double_t T, Double_t norm, const char * name="fBoseEinstein");
102 TF1 * GetFermiDiracdNdpt(Double_t mass, Double_t T, Double_t norm, const char * name="fFermiDirac");
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");
109 TF1 * GetLevidNdpt(Double_t mass, Double_t T, Double_t n, Double_t norm, const char * name="fLevi");
111 // Power Law function
112 TF1 * GetPowerLawdNdpt(Double_t pt0, Double_t n, Double_t norm, const char * name="fLevi");
115 TF1 * GetUA1dNdpt(Double_t pt0, Double_t n, Double_t norm, const char * name="fLevi");
117 // TimesPt means dNdpt
119 // Boltzmann-Gibbs Blast Wave
120 TF1 * GetBGBWdNdptTimesPt(Double_t mass, Double_t beta, Double_t T, Double_t n,
121 Double_t norm, const char * name = "fBGBWTimesPt");
123 TF1 * GetBGBWdNdptTimesMt(Double_t mass, Double_t beta, Double_t T, Double_t n,
124 Double_t norm, const char * name = "fBGBWTimesMt");
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");
131 TF1 * GetLevidNdptTimesPt(Double_t mass, Double_t T, Double_t n, Double_t norm, const char * name="fLevi");
134 TF1 * GetUA1dNdptTimesPt(Double_t pt0, Double_t n, Double_t norm, const char * name="fLevi");
137 TF1 * GetPowerLawdNdptTimesPt(Double_t pt0, Double_t n, Double_t norm, const char * name="fLevi");
139 // Simple exponential in 1/mt*dNdmT
140 TF1 * GetMTExpdNdptTimesPt(Double_t mass, Double_t T, Double_t norm, const char * name ="fMtExpTimesPt");
143 TF1 * GetBoseEinsteindNdptTimesPt(Double_t mass, Double_t T, Double_t norm, const char * name="fBoseEinstein");
146 TF1 * GetFermiDiracdNdptTimesPt(Double_t mass, Double_t T, Double_t norm, const char * name="fFermiDirac");
149 // Simple exponential in 1/mp*dNdpT
150 TF1 * GetPTExpdNdptTimesPt(Double_t T, Double_t norm, const char * name ="fPtExpTimesPt");
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");
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");
161 TF1 * GetLevidNdmt(Double_t mass, Double_t T, Double_t n, Double_t norm, const char * name = "fLeviMt", VarType_t var = kOneOverMtdNdmt);
164 TF1 * GetMTExpdNdmt(Double_t mass, Double_t temp, Double_t norm, const char * name, VarType_t var);
168 void SetLineWidth(Width_t width) { fLineWidth = width;}
170 TF1 * GetTestFunc(Double_t mass, Double_t T, Double_t norm, Double_t ymax, const char * name ="fTest") ;
172 // static functions for TF1
173 // Boltzmann-Gibbs Blast Wave
174 static Double_t StaticBGdNdPt(const double * x, const double* p);
175 static Double_t StaticBGdNdPtTimesPt(const double * x, const double* p);
176 static Double_t StaticBGdNdMtTimesMt(const double * x, const double* p);
177 // Tsallis blast wave
178 static Double_t StaticTsallisdNdPt(const double * x, const double* p);
179 static Double_t StaticTsallisdNdPtTimesPt(const double * x, const double* p);
180 // Helper funcs for numeric integration
181 static Double_t IntegrandBG(const double * x, const double* p);
182 static Double_t IntegrandTsallis(const double * x, const double* p);
185 static Double_t StaticTest(const double * x, const double* p);
186 static Double_t IntegrandTest(const double * x, const double* p);
189 static Double_t StaticHistoFunc(const double * x, const double* p);
191 // UA1 parametrization
192 static Double_t StaticUA1Func(const double * x, const double* p);
193 static Double_t StaticUA1FuncOneOverPt(const double * x, const double* p) ;
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...)
203 AliPWGFunc(const AliPWGFunc&); // not implemented
204 AliPWGFunc& operator=(const AliPWGFunc&); // not implemented
207 ClassDef(AliPWGFunc, 1)