1 ////////////////////////////////////////////////////////////////////////////////
3 // AliGeVSimParticle is a helper class for GeVSim (AliGenGeVSim) event generator.
4 // An object of this class represents one particle type and contain
5 // information about particle type thermal parameters.
7 ////////////////////////////////////////////////////////////////////////////////
9 // For examples, parameters and testing macros refer to:
10 // http:/home.cern.ch/radomski
12 // for more detailed description refer to ALICE NOTE
13 // "GeVSim Monte-Carlo Event Generator"
14 // S.Radosmki, P. Foka.
17 // Sylwester Radomski,
22 ////////////////////////////////////////////////////////////////////////////////
24 // Updated and revised: September 2002, S. Radomski, GSI
26 ////////////////////////////////////////////////////////////////////////////////
30 #include "AliGeVSimParticle.h"
32 ClassImp(AliGeVSimParticle);
34 ////////////////////////////////////////////////////////////////////////////////////////////////////
36 AliGeVSimParticle::AliGeVSimParticle(Int_t pdg, Int_t model, Float_t multiplicity,
37 Float_t T, Float_t dY, Float_t exp) {
39 // pdg - Particle type code in PDG standard (see: http://pdg.lbl.gov)
40 // model - momentum distribution model (1 - 7)
41 // multiplicity - multiplicity of particle type
42 // T - Inverse slope parameter ("temperature")
43 // dY - Raridity Width (only for model 1)
44 // exp - expansion velocity (only for model 4)
57 fV1[0] = fV1[1] = fV1[2] = fV1[3] = 0.;
58 fV2[0] = fV2[1] = fV2[2] = 0.;
60 fIsEllipticSimple = fIsDirectedSimple = kTRUE;
61 fIsEllipticOld = kFALSE;
64 ////////////////////////////////////////////////////////////////////////////////////////////////////
66 AliGeVSimParticle::AliGeVSimParticle(Int_t pdg, Int_t model, Float_t multiplicity) {
68 // pdg - Particle type code in PDG standard (see: http://pdg.lbl.gov)
70 // Note that multiplicity can be interpreted by GeVSim
71 // either as Total multiplicity in the acceptance or dN/dY
85 fV1[0] = fV1[1] = fV1[2] = fV1[3] = 0.;
86 fV2[0] = fV2[1] = fV2[2] = 0.;
88 fIsEllipticSimple = fIsDirectedSimple = kTRUE;
89 fIsEllipticOld = kFALSE;
92 ////////////////////////////////////////////////////////////////////////////////////////////////////
94 void AliGeVSimParticle::SetModel(Int_t model) {
97 // For details about standard and custom models refer to ALICE NOTE
100 if (model < 1 || model > 7)
101 Error("SetModel","Model Id ( %d ) out of range [1..7]", model);
106 ////////////////////////////////////////////////////////////////////////////////////////////////////
108 void AliGeVSimParticle::SetMultiplicity(Float_t mult) {
110 // Set multiplicity. The value is interpreted either as a total multiplciity
111 // in the acceptance or as a multiplicity density - dN/dY at midrapidity
117 ////////////////////////////////////////////////////////////////////////////////////////////////////
119 void AliGeVSimParticle::SetMultTotal(Bool_t isTotal) {
121 // Switch between total multiplicity (kTRUE) and
122 // multiplciity density (kFALSE)
124 // If this method is used its overrides mode in AliGenGeVSim
127 fMultTotal = isTotal;
131 ////////////////////////////////////////////////////////////////////////////////////////////////////
133 void AliGeVSimParticle::SetDirectedSimple(Float_t v1) {
135 // Set directed flow coefficient to a value independent
136 // of transverse momentum and rapidity
140 fIsDirectedSimple = kTRUE;
143 ////////////////////////////////////////////////////////////////////////////////////////////////////
145 void AliGeVSimParticle::SetEllipticSimple(Float_t v2) {
147 // Set elliptic flow coefficient to a value independent
148 // of transverse momentum and rapidity
152 fIsEllipticSimple = kTRUE;
155 ////////////////////////////////////////////////////////////////////////////////////////////////////
157 Bool_t AliGeVSimParticle::IsFlowSimple() {
159 // Function used by AliGenGeVSim
161 // Returns true if both Elliptic and Directed flow has a simple model.
162 // If at least one is parametrised returns false.
165 return (fIsDirectedSimple && fIsEllipticSimple);
168 ////////////////////////////////////////////////////////////////////////////////////////////////////
170 void AliGeVSimParticle::SetDirectedParam(Float_t v11, Float_t v12, Float_t v13, Float_t v14) {
172 // Set parameters for Directed Flow
173 // Actual flow coefficient is calculated as follows
175 // V1(Pt,Y) = (V11 + V12*Pt) * sign(Y) * (V13 + V14 * Y^3)
177 // where sign = 1 for Y > 0 and -1 for Y < 0
189 fIsDirectedSimple = kFALSE;
192 ////////////////////////////////////////////////////////////////////////////////////////////////////
194 void AliGeVSimParticle::SetEllipticParam(Float_t v21, Float_t pTmax, Float_t v22) {
196 // Set parameters for Elliptic Flow
197 // Actual flow coefficient is calculated as follows
200 // v21 - flow value at saturation
203 // V2 = v21 * (pT/pTMax ) * exp (-v22 * y^2) where pT <= pTmax
204 // v21 * exp (-v22 * y^2) where pT > pTmax
209 // The parametrisation is suitable for relativistic particles
210 // eg. Pions (at RHIC energies)
218 fIsEllipticSimple = kFALSE;
219 fIsEllipticOld = kFALSE;
222 ////////////////////////////////////////////////////////////////////////////////////////////////////
224 void AliGeVSimParticle::SetEllipticOld(Float_t v21, Float_t v22, Float_t v23) {
226 // Set parameters for Elliptic Flow
227 // Actual flow coefficient is calculated as follows
229 // V2 = (V21 + V22 pT^2) * exp (-v22 * y^2)
231 // The parameterisation is suitable for heavy particles: proton, kaon
238 fIsEllipticSimple = kFALSE;
239 fIsEllipticOld = kTRUE;
242 ////////////////////////////////////////////////////////////////////////////////////////////////////
244 Float_t AliGeVSimParticle::GetDirectedFlow(Float_t pt, Float_t y) {
246 // Return coefficient of a directed flow for a given pt and y.
247 // For coefficient calculation method refer to SetDirectedParam()
250 if (fIsDirectedSimple) return fV1[0];
254 v = (fV1[0] + fV1[1]* pt) * TMath::Sign((Float_t)1.,y) *
255 (fV1[2] + fV1[3] * TMath::Abs(y*y*y) );
260 ////////////////////////////////////////////////////////////////////////////////////////////////////
262 Float_t AliGeVSimParticle::GetEllipticFlow(Float_t pt, Float_t y) {
264 // Return coefficient of a elliptic flow for a given pt and y.
265 // For coefficient calculation method refer to SetEllipticParam()
268 if (fIsEllipticSimple) return fV2[0];
270 if (fIsEllipticOld) {
272 // old parametrisation
273 return (fV2[0]+fV2[1]*pt*pt) * TMath::Exp(-fV2[2]*y*y);
277 // new "pionic" parameterisation
278 if (pt < fV2[1]) return ( (pt / fV2[1]) * fV2[0] * TMath::Exp(-fV2[2]*y*y) );
279 else return ( fV2[0] * TMath::Exp(-fV2[2]*y*y) );
283 ////////////////////////////////////////////////////////////////////////////////////////////////////