1 //----------------------------------------------------------------------
4 // This class implements several function useful to fit pt spectra,
5 // including but not limited to blast wave models.
7 // It can return the same functional for as a function of different
8 // variables: dNdpt vs pt, 1/pt dNdpt vs pt, 1/mt dNdmt vs mt.
10 // Before getting the function you need, you have to chose the
11 // variable you want to use calling AliBWFunc::SetVarType with one of
12 // the elements of the VarType_t enum.
14 // Author: M. Floris, CERN
15 //----------------------------------------------------------------------
20 #if !defined(__CINT__) || defined(__MAKECINT__)
32 class AliBWFunc : public TObject {
36 // define the variables used for the function
37 typedef enum {kdNdpt,kOneOverPtdNdpt,kOneOverMtdNdmt} VarType_t;
42 // Boltzmann-Gibbs blast wave
43 TF1 * GetBGBW(Double_t mass, Double_t beta, Double_t T,
44 Double_t norm, const char * name = "fBGBW");
47 TF1 * GetBoltzmann(Double_t mass, Double_t T, Double_t norm, const char * name ="fBoltzmann");
50 TF1 * GetTsallisBW(Double_t mass, Double_t beta, Double_t T, Double_t q,
51 Double_t norm, Double_t ymax = 0.5, const char * name = "fTsallisBW");
53 // Simple exponential in 1/mt*dNdmt
54 TF1 * GetMTExp(Double_t mass, Double_t T, Double_t norm, const char * name ="fExp");
56 // Simple exponential in 1/pt*dNdpt
57 TF1 * GetPTExp(Double_t T, Double_t norm, const char * name ="fExp");
59 // Tsallis (no BW, a la CMS)
60 TF1 * GetTsallis(Double_t mass, Double_t T, Double_t q, Double_t norm, const char * name="fTsallis")
61 {return GetLevi (mass,T,1/(q-1),norm,name);}
63 // Levi function (aka Tsallis)
64 TF1 * GetLevi(Double_t mass, Double_t T, Double_t n, Double_t norm, const char * name="fLevi");
67 TF1 * GetUA1(Double_t mass, Double_t p0star, Double_t pt0, Double_t n, Double_t T, Double_t norm, const char * name="fUA1");
69 // Function derived from a histo
70 TF1 * GetHistoFunc(TH1 * h, const char * name = "fHisto");
73 TF1 * GetPowerLaw(Double_t pt0, Double_t n, Double_t norm, const char * name="fPowerLaw");
76 void SetVarType(VarType_t tp) {fVarType=tp;}
80 // dNdpt here means 1/pt dN/dpt
82 // Boltzmann-Gibbs Blast Wave
83 TF1 * GetBGBWdNdpt(Double_t mass, Double_t beta, Double_t T,
84 Double_t norm, const char * name = "fBGBW");
87 TF1 * GetTsallisBWdNdpt(Double_t mass, Double_t beta, Double_t T, Double_t q,
88 Double_t norm, Double_t ymax = 0.5, const char * name = "fTsallisBW");
90 // Simple exponential in 1/mt*MT
91 TF1 * GetMTExpdNdpt(Double_t mass, Double_t T, Double_t norm, const char * name ="fExp");
93 // Tsallis (no BW, a la CMS)
94 TF1 * GetTsallisdNdpt(Double_t mass, Double_t T, Double_t q, Double_t norm, const char * name="fTsallis");
97 TF1 * GetLevidNdpt(Double_t mass, Double_t T, Double_t n, Double_t norm, const char * name="fLevi");
100 TF1 * GetPowerLawdNdpt(Double_t pt0, Double_t n, Double_t norm, const char * name="fLevi");
103 TF1 * GetUA1dNdpt(Double_t pt0, Double_t n, Double_t norm, const char * name="fLevi");
105 // TimesPt means dNdpt
107 // Boltzmann-Gibbs Blast Wave
108 TF1 * GetBGBWdNdptTimesPt(Double_t mass, Double_t beta, Double_t T,
109 Double_t norm, const char * name = "fBGBWTimesPt");
111 // Tsallis blast wave
112 TF1 * GetTsallisBWdNdptTimesPt(Double_t mass, Double_t beta, Double_t T, Double_t q,
113 Double_t norm, Double_t ymax = 0.5, const char * name = "fTsallisBWTimesPt");
115 TF1 * GetLevidNdptTimesPt(Double_t mass, Double_t T, Double_t n, Double_t norm, const char * name="fLevi");
118 TF1 * GetUA1dNdptTimesPt(Double_t pt0, Double_t n, Double_t norm, const char * name="fLevi");
121 TF1 * GetPowerLawdNdptTimesPt(Double_t pt0, Double_t n, Double_t norm, const char * name="fLevi");
123 // Simple exponential in 1/mt*dNdmT
124 TF1 * GetMTExpdNdptTimesPt(Double_t mass, Double_t T, Double_t norm, const char * name ="fMtExpTimesPt");
126 // Simple exponential in 1/mp*dNdpT
127 TF1 * GetPTExpdNdptTimesPt(Double_t T, Double_t norm, const char * name ="fPtExpTimesPt");
129 // Boltzmann (exp in 1/mt*dNdmT times mt)
130 TF1 * GetBoltzmanndNdptTimesPt(Double_t mass, Double_t T, Double_t norm, const char * name ="fBoltzmannTimesPt");
132 // Tsallis (no BW, a la CMS)
133 TF1 * GetTsallisdNdptTimesPt(Double_t mass, Double_t T, Double_t q, Double_t norm, const char * name="fTsallisTimesPt");
138 TF1 * GetLevidNdmt(Double_t mass, Double_t T, Double_t n, Double_t norm, const char * name = "fLeviMt");
142 void SetLineWidth(Width_t width) { fLineWidth = width;}
144 TF1 * GetTestFunc(Double_t mass, Double_t T, Double_t norm, Double_t ymax, const char * name ="fTest") ;
146 // static functions for TF1
147 // Boltzmann-Gibbs Blast Wave
148 static Double_t StaticBGdNdPt(double * x, double* p);
149 static Double_t StaticBGdNdPtTimesPt(double * x, double* p);
150 // Tsallis blast wave
151 static Double_t StaticTsallisdNdPt(double * x, double* p);
152 static Double_t StaticTsallisdNdPtTimesPt(double * x, double* p);
153 // Helper funcs for numeric integration
154 static Double_t IntegrandBG(double * x, double* p);
155 static Double_t IntegrandTsallis(double * x, double* p);
158 static Double_t StaticTest(double * x, double* p);
159 static Double_t IntegrandTest(double * x, double* p);
162 static Double_t StaticHistoFunc(double * x, double* p);
164 // UA1 parametrization
165 static Double_t StaticUA1Func(double * x, double* p);
175 AliBWFunc(const AliBWFunc&); // not implemented
176 AliBWFunc& operator=(const AliBWFunc&); // not implemented
179 ClassDef(AliBWFunc, 1)