Removing try/catch-es
[u/mrichter/AliRoot.git] / PWG / Tools / AliPWGFunc.h
1 //----------------------------------------------------------------------
2 //                              AliPWGFunc
3 //
4 // This class implements several function useful to fit pt spectra,
5 // including but not limited to blast wave models.
6 //
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"
17
18 class TF1;
19 class TH1;
20 class TGraph;
21 #endif
22
23
24
25 class AliPWGFunc : public TObject {
26
27
28 public:
29   // define the variables used for the function
30   typedef enum {kdNdpt,kOneOverPtdNdpt,kOneOverMtdNdmt,kdNdmt,kOneOverMtdNdmtMinusM} VarType_t;
31
32   AliPWGFunc();
33   ~AliPWGFunc();
34
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");
38
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
48   TF1 * GetMTExp(Double_t mass, Double_t T, Double_t norm, const char * name ="fMtExp");
49
50   // Simple exponential in 1/pt*dNdpt
51   TF1 * GetPTExp(Double_t T, Double_t norm, const char * name ="fPtExp");
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
66   // Function derived from a graph
67   TF1 * GetGraphFunc(TGraph * h, const char * name = "fHisto");
68
69   // Power law
70   TF1 * GetPowerLaw(Double_t pt0, Double_t n, Double_t norm, const char * name="fPowerLaw");
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");
78
79
80   void SetVarType(VarType_t tp) {fVarType=tp;}
81
82 protected:
83
84   // dNdpt here means 1/pt dN/dpt
85   
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");
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
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
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
120   TF1 * GetBGBWdNdptTimesPt(Double_t mass, Double_t beta, Double_t T, Double_t n,
121                             Double_t norm, const char * name = "fBGBWTimesPt");
122
123   // Tsallis blast wave
124   TF1 * GetTsallisBWdNdptTimesPt(Double_t mass, Double_t beta, Double_t T, Double_t q,
125                                  Double_t norm, Double_t ymax = 0.5, const char * name = "fTsallisBWTimesPt");
126   // Levi function
127   TF1 * GetLevidNdptTimesPt(Double_t mass, Double_t T, Double_t n, Double_t norm, const char * name="fLevi");
128
129   // UA1 function
130   TF1 * GetUA1dNdptTimesPt(Double_t pt0, Double_t n, Double_t norm, const char * name="fLevi");
131
132   // PowerLaw function
133   TF1 * GetPowerLawdNdptTimesPt(Double_t pt0, Double_t n, Double_t norm, const char * name="fLevi");
134
135   // Simple exponential in 1/mt*dNdmT
136   TF1 * GetMTExpdNdptTimesPt(Double_t mass, Double_t T, Double_t norm, const char * name ="fMtExpTimesPt");
137
138   // Bose-Einstein
139   TF1 * GetBoseEinsteindNdptTimesPt(Double_t mass, Double_t T, Double_t norm, const char * name="fBoseEinstein");
140
141   // Fermi-Dirac
142   TF1 * GetFermiDiracdNdptTimesPt(Double_t mass, Double_t T, Double_t norm, const char * name="fFermiDirac");
143
144
145   // Simple exponential in 1/mp*dNdpT
146   TF1 * GetPTExpdNdptTimesPt(Double_t T, Double_t norm, const char * name ="fPtExpTimesPt");
147
148   // Boltzmann (exp in 1/mt*dNdmT times mt)
149   TF1 * GetBoltzmanndNdptTimesPt(Double_t mass, Double_t T, Double_t norm, const char * name ="fBoltzmannTimesPt");
150
151   // Tsallis (no BW, a la CMS)
152   TF1 * GetTsallisdNdptTimesPt(Double_t mass, Double_t T, Double_t q, Double_t norm, const char * name="fTsallisTimesPt");
153
154   // 1/mt dNdmt
155   
156   // Levi
157   TF1 * GetLevidNdmt(Double_t mass, Double_t T, Double_t n, Double_t norm, const char * name = "fLeviMt", VarType_t var = kOneOverMtdNdmt);
158
159   // gereral setters
160   void SetLineWidth(Width_t width) { fLineWidth = width;}
161
162   TF1 * GetTestFunc(Double_t mass, Double_t T, Double_t norm, Double_t ymax, const char * name ="fTest") ;
163
164   // static functions for TF1
165   // Boltzmann-Gibbs Blast Wave
166   static Double_t StaticBGdNdPt(const double * x, const double* p);
167   static Double_t StaticBGdNdPtTimesPt(const double * x, const double* p);
168   // Tsallis blast wave
169   static Double_t StaticTsallisdNdPt(const double * x, const double* p);
170   static Double_t StaticTsallisdNdPtTimesPt(const double * x, const double* p);
171   // Helper funcs for numeric integration
172   static Double_t IntegrandBG(const double * x, const double* p);
173   static Double_t IntegrandTsallis(const double * x, const double* p);
174
175   // Test func
176   static Double_t StaticTest(const double * x, const double* p);
177   static Double_t IntegrandTest(const double * x, const double* p);
178
179   // histo func
180   static Double_t StaticHistoFunc(const double * x, const double* p);
181
182   // UA1 parametrization
183   static Double_t StaticUA1Func(const double * x, const double* p);
184   static Double_t StaticUA1FuncOneOverPt(const double * x, const double* p) ;
185
186
187 private:
188
189
190   TF1 * fLastFunc;     // Last function returned
191   Width_t fLineWidth;  // Line width
192   VarType_t fVarType;  // Variable types (e.g. dNdpt vs pt, 1/mt dNdmt vs mt...) 
193   
194   AliPWGFunc(const AliPWGFunc&);            // not implemented
195   AliPWGFunc& operator=(const AliPWGFunc&); // not implemented
196
197
198   ClassDef(AliPWGFunc, 1)
199
200
201 };
202
203 #endif