ac3faee4 |
1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
3 | * * |
4 | * Author: The ALICE Off-line Project. * |
5 | * Contributors are mentioned in the code where appropriate. * |
6 | * * |
7 | * Permission to use, copy, modify and distribute this software and its * |
8 | * documentation strictly for non-commercial purposes is hereby granted * |
9 | * without fee, provided that the above copyright notice appears in all * |
10 | * copies and that both the copyright notice and this permission notice * |
11 | * appear in the supporting documentation. The authors make no claims * |
12 | * about the suitability of this software for any purpose. It is * |
13 | * provided "as is" without express or implied warranty. * |
14 | **************************************************************************/ |
15 | |
16 | /* $Id$ */ |
17 | |
18 | ////////////////////////////////////////////////////////////////////////////// |
4966b266 |
19 | // |
20 | // AliGeVSimParticle is a helper class for GeVSim (AliGenGeVSim) event generator. |
21 | // An object of this class represents one particle type and contain |
22 | // information about particle type thermal parameters. |
23 | // |
ac3faee4 |
24 | ////////////////////////////////////////////////////////////////////////////// |
7e4131fc |
25 | // |
4966b266 |
26 | // For examples, parameters and testing macros refer to: |
27 | // http:/home.cern.ch/radomski |
7e4131fc |
28 | // |
29 | // for more detailed description refer to ALICE NOTE |
30 | // "GeVSim Monte-Carlo Event Generator" |
31 | // S.Radosmki, P. Foka. |
32 | // |
4966b266 |
33 | // Author: |
34 | // Sylwester Radomski, |
35 | // GSI, March 2002 |
7e4131fc |
36 | // |
4966b266 |
37 | // S.Radomski@gsi.de |
38 | // |
7e4131fc |
39 | //////////////////////////////////////////////////////////////////////////////// |
40 | // |
41 | // Updated and revised: September 2002, S. Radomski, GSI |
42 | // |
43 | //////////////////////////////////////////////////////////////////////////////// |
44 | |
4966b266 |
45 | |
46 | #include "TMath.h" |
7816887f |
47 | #include "AliGeVSimParticle.h" |
48 | |
925e6570 |
49 | ClassImp(AliGeVSimParticle) |
7816887f |
50 | |
1c56e311 |
51 | |
4966b266 |
52 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
1c56e311 |
53 | AliGeVSimParticle::AliGeVSimParticle(): |
54 | fPDG(0), |
55 | fModel(0), |
56 | fN(0), |
57 | fMultTotal(kTRUE), |
58 | fIsSetMult(kFALSE), |
59 | fT(0.), |
60 | fSigmaY(0.), |
61 | fExpansion(0.), |
62 | fIsDirectedSimple(kTRUE), |
63 | fIsEllipticSimple(kTRUE), |
64 | fIsEllipticOld(kFALSE) |
65 | { |
66 | // Default constructor |
67 | } |
7816887f |
68 | |
7e4131fc |
69 | AliGeVSimParticle::AliGeVSimParticle(Int_t pdg, Int_t model, Float_t multiplicity, |
1c56e311 |
70 | Float_t T, Float_t dY, Float_t exp): |
71 | fPDG(pdg), |
72 | fModel(model), |
73 | fN(multiplicity), |
74 | fMultTotal(kTRUE), |
75 | fIsSetMult(kFALSE), |
76 | fT(T), |
77 | fSigmaY(dY), |
78 | fExpansion(exp), |
79 | fIsDirectedSimple(kTRUE), |
80 | fIsEllipticSimple(kTRUE), |
81 | fIsEllipticOld(kFALSE) |
82 | { |
4966b266 |
83 | // |
7e4131fc |
84 | // pdg - Particle type code in PDG standard (see: http://pdg.lbl.gov) |
85 | // model - momentum distribution model (1 - 7) |
86 | // multiplicity - multiplicity of particle type |
87 | // T - Inverse slope parameter ("temperature") |
88 | // dY - Raridity Width (only for model 1) |
89 | // exp - expansion velocity (only for model 4) |
4966b266 |
90 | fV1[0] = fV1[1] = fV1[2] = fV1[3] = 0.; |
91 | fV2[0] = fV2[1] = fV2[2] = 0.; |
7816887f |
92 | } |
93 | |
4966b266 |
94 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
7816887f |
95 | |
1c56e311 |
96 | AliGeVSimParticle::AliGeVSimParticle(Int_t pdg, Int_t model, Float_t multiplicity): |
97 | fPDG(pdg), |
98 | fModel(model), |
99 | fN(multiplicity), |
100 | fMultTotal(kTRUE), |
101 | fIsSetMult(kFALSE), |
102 | fT(0.), |
103 | fSigmaY(0.), |
104 | fExpansion(0.), |
105 | fIsDirectedSimple(kTRUE), |
106 | fIsEllipticSimple(kTRUE), |
107 | fIsEllipticOld(kFALSE) |
108 | { |
4966b266 |
109 | // |
7e4131fc |
110 | // pdg - Particle type code in PDG standard (see: http://pdg.lbl.gov) |
111 | // |
112 | // Note that multiplicity can be interpreted by GeVSim |
113 | // either as Total multiplicity in the acceptance or dN/dY |
4966b266 |
114 | // |
4966b266 |
115 | fV1[0] = fV1[1] = fV1[2] = fV1[3] = 0.; |
116 | fV2[0] = fV2[1] = fV2[2] = 0.; |
7e4131fc |
117 | } |
118 | |
119 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
120 | |
121 | void AliGeVSimParticle::SetModel(Int_t model) { |
122 | // |
123 | // Set Model (1-7) |
124 | // For details about standard and custom models refer to ALICE NOTE |
125 | // |
126 | |
127 | if (model < 1 || model > 7) |
128 | Error("SetModel","Model Id ( %d ) out of range [1..7]", model); |
129 | |
130 | fModel = model; |
131 | } |
132 | |
133 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
134 | |
135 | void AliGeVSimParticle::SetMultiplicity(Float_t mult) { |
136 | // |
137 | // Set multiplicity. The value is interpreted either as a total multiplciity |
138 | // in the acceptance or as a multiplicity density - dN/dY at midrapidity |
139 | // |
140 | |
141 | fN = mult; |
142 | } |
143 | |
144 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
145 | |
146 | void AliGeVSimParticle::SetMultTotal(Bool_t isTotal) { |
147 | // |
148 | // Switch between total multiplicity (kTRUE) and |
149 | // multiplciity density (kFALSE) |
150 | // |
151 | // If this method is used its overrides mode in AliGenGeVSim |
152 | // |
153 | |
154 | fMultTotal = isTotal; |
155 | fIsSetMult = kTRUE; |
156 | } |
157 | |
158 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
159 | |
160 | void AliGeVSimParticle::SetDirectedSimple(Float_t v1) { |
161 | // |
162 | // Set directed flow coefficient to a value independent |
163 | // of transverse momentum and rapidity |
164 | // |
165 | |
166 | fV1[0] = v1; |
167 | fIsDirectedSimple = kTRUE; |
168 | } |
169 | |
170 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
171 | |
172 | void AliGeVSimParticle::SetEllipticSimple(Float_t v2) { |
173 | // |
174 | // Set elliptic flow coefficient to a value independent |
175 | // of transverse momentum and rapidity |
176 | // |
177 | |
178 | fV2[0] = v2; |
179 | fIsEllipticSimple = kTRUE; |
180 | } |
181 | |
182 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
183 | |
ac3faee4 |
184 | Bool_t AliGeVSimParticle::IsFlowSimple() const |
185 | { |
7e4131fc |
186 | // |
187 | // Function used by AliGenGeVSim |
188 | // |
189 | // Returns true if both Elliptic and Directed flow has a simple model. |
190 | // If at least one is parametrised returns false. |
191 | // |
192 | |
193 | return (fIsDirectedSimple && fIsEllipticSimple); |
7816887f |
194 | } |
195 | |
4966b266 |
196 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
197 | |
7e4131fc |
198 | void AliGeVSimParticle::SetDirectedParam(Float_t v11, Float_t v12, Float_t v13, Float_t v14) { |
4966b266 |
199 | // |
7e4131fc |
200 | // Set parameters for Directed Flow |
201 | // Actual flow coefficient is calculated as follows |
4966b266 |
202 | // |
203 | // V1(Pt,Y) = (V11 + V12*Pt) * sign(Y) * (V13 + V14 * Y^3) |
204 | // |
205 | // where sign = 1 for Y > 0 and -1 for Y < 0 |
206 | // |
207 | // Defaults values |
208 | // v12 = v14 = 0 |
209 | // v13 = 1 |
210 | // |
4966b266 |
211 | |
212 | fV1[0] = v11; |
213 | fV1[1] = v12; |
214 | fV1[2] = v13; |
215 | fV1[3] = v14; |
7e4131fc |
216 | |
217 | fIsDirectedSimple = kFALSE; |
4966b266 |
218 | } |
7816887f |
219 | |
4966b266 |
220 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
221 | |
7e4131fc |
222 | void AliGeVSimParticle::SetEllipticParam(Float_t v21, Float_t pTmax, Float_t v22) { |
4966b266 |
223 | // |
7e4131fc |
224 | // Set parameters for Elliptic Flow |
225 | // Actual flow coefficient is calculated as follows |
226 | // |
227 | // pTmax is in GeV |
228 | // v21 - flow value at saturation |
229 | // |
230 | // |
231 | // V2 = v21 * (pT/pTMax ) * exp (-v22 * y^2) where pT <= pTmax |
232 | // v21 * exp (-v22 * y^2) where pT > pTmax |
4966b266 |
233 | // |
4966b266 |
234 | // Default values: |
7e4131fc |
235 | // v22 = 0 |
4966b266 |
236 | // |
7e4131fc |
237 | // The parametrisation is suitable for relativistic particles |
238 | // eg. Pions (at RHIC energies) |
4966b266 |
239 | // |
7e4131fc |
240 | |
241 | |
242 | fV2[0] = v21; |
243 | fV2[1] = pTmax; |
244 | fV2[2] = v22; |
245 | |
246 | fIsEllipticSimple = kFALSE; |
247 | fIsEllipticOld = kFALSE; |
248 | } |
249 | |
250 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
251 | |
252 | void AliGeVSimParticle::SetEllipticOld(Float_t v21, Float_t v22, Float_t v23) { |
253 | // |
254 | // Set parameters for Elliptic Flow |
255 | // Actual flow coefficient is calculated as follows |
256 | // |
257 | // V2 = (V21 + V22 pT^2) * exp (-v22 * y^2) |
258 | // |
259 | // The parameterisation is suitable for heavy particles: proton, kaon |
260 | // |
261 | |
4966b266 |
262 | fV2[0] = v21; |
263 | fV2[1] = v22; |
264 | fV2[2] = v23; |
7e4131fc |
265 | |
266 | fIsEllipticSimple = kFALSE; |
267 | fIsEllipticOld = kTRUE; |
4966b266 |
268 | } |
7816887f |
269 | |
4966b266 |
270 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
7816887f |
271 | |
4966b266 |
272 | Float_t AliGeVSimParticle::GetDirectedFlow(Float_t pt, Float_t y) { |
273 | // |
274 | // Return coefficient of a directed flow for a given pt and y. |
7e4131fc |
275 | // For coefficient calculation method refer to SetDirectedParam() |
4966b266 |
276 | // |
277 | |
7e4131fc |
278 | if (fIsDirectedSimple) return fV1[0]; |
279 | |
4966b266 |
280 | Float_t v; |
281 | |
635be086 |
282 | v = (fV1[0] + fV1[1]* pt) * TMath::Sign((Float_t)1.,y) * |
4966b266 |
283 | (fV1[2] + fV1[3] * TMath::Abs(y*y*y) ); |
7816887f |
284 | |
4966b266 |
285 | return v; |
286 | } |
7816887f |
287 | |
4966b266 |
288 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
7816887f |
289 | |
4966b266 |
290 | Float_t AliGeVSimParticle::GetEllipticFlow(Float_t pt, Float_t y) { |
291 | // |
292 | // Return coefficient of a elliptic flow for a given pt and y. |
7e4131fc |
293 | // For coefficient calculation method refer to SetEllipticParam() |
4966b266 |
294 | // |
7e4131fc |
295 | |
296 | if (fIsEllipticSimple) return fV2[0]; |
297 | |
298 | if (fIsEllipticOld) { |
4966b266 |
299 | |
7e4131fc |
300 | // old parametrisation |
301 | return (fV2[0]+fV2[1]*pt*pt) * TMath::Exp(-fV2[2]*y*y); |
7816887f |
302 | |
7e4131fc |
303 | } else { |
7816887f |
304 | |
7e4131fc |
305 | // new "pionic" parameterisation |
306 | if (pt < fV2[1]) return ( (pt / fV2[1]) * fV2[0] * TMath::Exp(-fV2[2]*y*y) ); |
307 | else return ( fV2[0] * TMath::Exp(-fV2[2]*y*y) ); |
308 | } |
4966b266 |
309 | } |
7816887f |
310 | |
4966b266 |
311 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
7816887f |
312 | |
313 | |
314 | |
315 | |
316 | |
317 | |
318 | |
319 | |
320 | |
321 | |
322 | |
323 | |
324 | |
325 | |
326 | |