ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

//////////////////////////////////////////////////////////////////////////////
//
// AliGeVSimParticle is a helper class for GeVSim (AliGenGeVSim) event generator.
// An object of this class represents one particle type and contain 
// information about particle type thermal parameters.
//
//////////////////////////////////////////////////////////////////////////////
//
// For examples, parameters and testing macros refer to:
// http:/home.cern.ch/radomski
// 
// for more detailed description refer to ALICE NOTE
// "GeVSim Monte-Carlo Event Generator"
// S.Radosmki, P. Foka.
//  
// Author:
// Sylwester Radomski,
// GSI, March 2002
//  
// S.Radomski@gsi.de
//
////////////////////////////////////////////////////////////////////////////////
//
// Updated and revised: September 2002, S. Radomski, GSI
//
////////////////////////////////////////////////////////////////////////////////


#include "TMath.h"
#include "AliGeVSimParticle.h"

ClassImp(AliGeVSimParticle)


////////////////////////////////////////////////////////////////////////////////////////////////////
AliGeVSimParticle::AliGeVSimParticle():
    fPDG(0),
    fModel(0),
    fN(0),
    fMultTotal(kTRUE),
    fIsSetMult(kFALSE),
    fT(0.),
    fSigmaY(0.),
    fExpansion(0.),
    fIsDirectedSimple(kTRUE),
    fIsEllipticSimple(kTRUE),
    fIsEllipticOld(kFALSE)
{
    // Default constructor
  for (Int_t i = 0; i < 4; i++) fV1[i] = 0.;
  for (Int_t i = 0; i < 3; i++) fV2[i] = 0.;
}

AliGeVSimParticle::AliGeVSimParticle(Int_t pdg, Int_t model, Float_t multiplicity,
				     Float_t T, Float_t dY, Float_t exp):
    fPDG(pdg),
    fModel(model),
    fN(multiplicity),
    fMultTotal(kTRUE),
    fIsSetMult(kFALSE),
    fT(T),
    fSigmaY(dY),
    fExpansion(exp),
    fIsDirectedSimple(kTRUE),
    fIsEllipticSimple(kTRUE),
    fIsEllipticOld(kFALSE)
{
  //
  //  pdg          - Particle type code in PDG standard (see: http://pdg.lbl.gov)
  //  model        - momentum distribution model (1 - 7)
  //  multiplicity - multiplicity of particle type
  //  T            - Inverse slope parameter ("temperature")
  //  dY           - Raridity Width (only for model 1)
  //  exp          - expansion velocity (only for model 4) 
  fV1[0] = fV1[1] = fV1[2] = fV1[3] = 0.;
  fV2[0] = fV2[1] = fV2[2] = 0.;
}

////////////////////////////////////////////////////////////////////////////////////////////////////

AliGeVSimParticle::AliGeVSimParticle(Int_t pdg, Int_t model, Float_t multiplicity):
    fPDG(pdg),
    fModel(model),
    fN(multiplicity),
    fMultTotal(kTRUE),
    fIsSetMult(kFALSE),
    fT(0.),
    fSigmaY(0.),
    fExpansion(0.),
    fIsDirectedSimple(kTRUE),
    fIsEllipticSimple(kTRUE),
    fIsEllipticOld(kFALSE)
 {
  //
  // pdg - Particle type code in PDG standard (see: http://pdg.lbl.gov)
  //  
  // Note that multiplicity can be interpreted by GeVSim 
  // either as Total multiplicity in the acceptance or dN/dY
  // 
  fV1[0] = fV1[1] = fV1[2] = fV1[3] = 0.;
  fV2[0] = fV2[1] = fV2[2] = 0.; 
}

////////////////////////////////////////////////////////////////////////////////////////////////////

void  AliGeVSimParticle::SetModel(Int_t model) {
  //
  // Set Model (1-7) 
  // For details about standard and custom models refer to ALICE NOTE
  //

  if (model < 1 || model > 7) 
    Error("SetModel","Model Id ( %d ) out of range [1..7]", model);

  fModel = model;
}

////////////////////////////////////////////////////////////////////////////////////////////////////

void  AliGeVSimParticle::SetMultiplicity(Float_t mult) {
  //
  // Set multiplicity. The value is interpreted either as a total multiplciity
  // in the acceptance or as a multiplicity density - dN/dY at midrapidity
  //  

  fN = mult;
}

////////////////////////////////////////////////////////////////////////////////////////////////////

void AliGeVSimParticle::SetMultTotal(Bool_t isTotal) {
  //
  // Switch between total multiplicity (kTRUE) and 
  // multiplciity density (kFALSE)
  //
  // If this method is used its overrides mode in AliGenGeVSim 
  //
  
  fMultTotal = isTotal;
  fIsSetMult = kTRUE;
}

////////////////////////////////////////////////////////////////////////////////////////////////////
 
void AliGeVSimParticle::SetDirectedSimple(Float_t v1) {
  //
  // Set directed flow coefficient to a value independent
  // of transverse momentum and rapidity
  //

  fV1[0] = v1;
  fIsDirectedSimple = kTRUE;
}

////////////////////////////////////////////////////////////////////////////////////////////////////

void AliGeVSimParticle::SetEllipticSimple(Float_t v2) {
  //
  // Set elliptic flow coefficient to a value independent
  // of transverse momentum and rapidity
  //

  fV2[0] = v2;
  fIsEllipticSimple = kTRUE;
}

////////////////////////////////////////////////////////////////////////////////////////////////////

Bool_t AliGeVSimParticle::IsFlowSimple() const
{
  //
  // Function used by AliGenGeVSim 
  //
  // Returns true if both Elliptic and Directed flow has a simple model.
  // If at least one is parametrised returns false. 
  // 

  return (fIsDirectedSimple && fIsEllipticSimple);
}

////////////////////////////////////////////////////////////////////////////////////////////////////

void AliGeVSimParticle::SetDirectedParam(Float_t v11, Float_t v12, Float_t v13, Float_t v14) {
  //
  // Set parameters for Directed Flow 
  // Actual flow coefficient is calculated as follows
  //
  // V1(Pt,Y) = (V11 + V12*Pt) * sign(Y) * (V13 + V14 * Y^3)
  //
  // where sign = 1 for Y > 0 and -1 for Y < 0
  // 
  // Defaults values
  // v12 = v14 = 0
  // v13 = 1
  // 

  fV1[0] = v11;
  fV1[1] = v12;
  fV1[2] = v13;
  fV1[3] = v14;
  
  fIsDirectedSimple = kFALSE;
}

////////////////////////////////////////////////////////////////////////////////////////////////////

void AliGeVSimParticle::SetEllipticParam(Float_t v21, Float_t pTmax, Float_t v22) {
  //
  // Set parameters for Elliptic Flow
  // Actual flow coefficient is calculated as follows
  //
  // pTmax is in GeV 
  // v21 - flow value at saturation
  //
  //
  // V2 = v21 * (pT/pTMax ) * exp (-v22 * y^2)    where pT <= pTmax  
  //      v21 * exp (-v22 * y^2)                   where pT > pTmax  
  //
  // Default values:
  // v22 = 0
  //
  // The parametrisation is suitable for relativistic particles
  // eg. Pions (at RHIC energies)
  //


  fV2[0] = v21;
  fV2[1] = pTmax;
  fV2[2] = v22;

  fIsEllipticSimple = kFALSE;
  fIsEllipticOld = kFALSE;
}

////////////////////////////////////////////////////////////////////////////////////////////////////

void AliGeVSimParticle::SetEllipticOld(Float_t v21, Float_t v22, Float_t v23) {
  //
  // Set parameters for Elliptic Flow
  // Actual flow coefficient is calculated as follows
  //
  // V2 = (V21 + V22 pT^2) * exp (-v22 * y^2)
  //
  // The parameterisation is suitable for heavy particles: proton, kaon
  //

  fV2[0] = v21;
  fV2[1] = v22;
  fV2[2] = v23;

  fIsEllipticSimple = kFALSE;
  fIsEllipticOld = kTRUE;
}

////////////////////////////////////////////////////////////////////////////////////////////////////

Float_t AliGeVSimParticle::GetDirectedFlow(Float_t pt, Float_t y) {
  //
  // Return coefficient of a directed flow for a given pt and y.
  // For coefficient calculation method refer to SetDirectedParam()
  // 
  
  if (fIsDirectedSimple) return fV1[0];

  Float_t v;
  
  v = (fV1[0] + fV1[1]* pt) * TMath::Sign((Float_t)1.,y) *
    (fV1[2] + fV1[3] * TMath::Abs(y*y*y) );

  return v;
}

////////////////////////////////////////////////////////////////////////////////////////////////////

Float_t AliGeVSimParticle::GetEllipticFlow(Float_t pt, Float_t y) {
  //
  // Return coefficient of a elliptic flow for a given pt and y.
  // For coefficient calculation method refer to SetEllipticParam()
  // 

  if (fIsEllipticSimple) return fV2[0];

  if (fIsEllipticOld) {
    
    // old parametrisation
    return (fV2[0]+fV2[1]*pt*pt) * TMath::Exp(-fV2[2]*y*y);

  } else {

    // new "pionic" parameterisation
    if (pt < fV2[1]) return ( (pt / fV2[1]) * fV2[0] * TMath::Exp(-fV2[2]*y*y) ); 
    else  return ( fV2[0] * TMath::Exp(-fV2[2]*y*y) );
  }
}

////////////////////////////////////////////////////////////////////////////////////////////////////















 AliGeVSimParticle.cxx:1
 AliGeVSimParticle.cxx:2
 AliGeVSimParticle.cxx:3
 AliGeVSimParticle.cxx:4
 AliGeVSimParticle.cxx:5
 AliGeVSimParticle.cxx:6
 AliGeVSimParticle.cxx:7
 AliGeVSimParticle.cxx:8
 AliGeVSimParticle.cxx:9
 AliGeVSimParticle.cxx:10
 AliGeVSimParticle.cxx:11
 AliGeVSimParticle.cxx:12
 AliGeVSimParticle.cxx:13
 AliGeVSimParticle.cxx:14
 AliGeVSimParticle.cxx:15
 AliGeVSimParticle.cxx:16
 AliGeVSimParticle.cxx:17
 AliGeVSimParticle.cxx:18
 AliGeVSimParticle.cxx:19
 AliGeVSimParticle.cxx:20
 AliGeVSimParticle.cxx:21
 AliGeVSimParticle.cxx:22
 AliGeVSimParticle.cxx:23
 AliGeVSimParticle.cxx:24
 AliGeVSimParticle.cxx:25
 AliGeVSimParticle.cxx:26
 AliGeVSimParticle.cxx:27
 AliGeVSimParticle.cxx:28
 AliGeVSimParticle.cxx:29
 AliGeVSimParticle.cxx:30
 AliGeVSimParticle.cxx:31
 AliGeVSimParticle.cxx:32
 AliGeVSimParticle.cxx:33
 AliGeVSimParticle.cxx:34
 AliGeVSimParticle.cxx:35
 AliGeVSimParticle.cxx:36
 AliGeVSimParticle.cxx:37
 AliGeVSimParticle.cxx:38
 AliGeVSimParticle.cxx:39
 AliGeVSimParticle.cxx:40
 AliGeVSimParticle.cxx:41
 AliGeVSimParticle.cxx:42
 AliGeVSimParticle.cxx:43
 AliGeVSimParticle.cxx:44
 AliGeVSimParticle.cxx:45
 AliGeVSimParticle.cxx:46
 AliGeVSimParticle.cxx:47
 AliGeVSimParticle.cxx:48
 AliGeVSimParticle.cxx:49
 AliGeVSimParticle.cxx:50
 AliGeVSimParticle.cxx:51
 AliGeVSimParticle.cxx:52
 AliGeVSimParticle.cxx:53
 AliGeVSimParticle.cxx:54
 AliGeVSimParticle.cxx:55
 AliGeVSimParticle.cxx:56
 AliGeVSimParticle.cxx:57
 AliGeVSimParticle.cxx:58
 AliGeVSimParticle.cxx:59
 AliGeVSimParticle.cxx:60
 AliGeVSimParticle.cxx:61
 AliGeVSimParticle.cxx:62
 AliGeVSimParticle.cxx:63
 AliGeVSimParticle.cxx:64
 AliGeVSimParticle.cxx:65
 AliGeVSimParticle.cxx:66
 AliGeVSimParticle.cxx:67
 AliGeVSimParticle.cxx:68
 AliGeVSimParticle.cxx:69
 AliGeVSimParticle.cxx:70
 AliGeVSimParticle.cxx:71
 AliGeVSimParticle.cxx:72
 AliGeVSimParticle.cxx:73
 AliGeVSimParticle.cxx:74
 AliGeVSimParticle.cxx:75
 AliGeVSimParticle.cxx:76
 AliGeVSimParticle.cxx:77
 AliGeVSimParticle.cxx:78
 AliGeVSimParticle.cxx:79
 AliGeVSimParticle.cxx:80
 AliGeVSimParticle.cxx:81
 AliGeVSimParticle.cxx:82
 AliGeVSimParticle.cxx:83
 AliGeVSimParticle.cxx:84
 AliGeVSimParticle.cxx:85
 AliGeVSimParticle.cxx:86
 AliGeVSimParticle.cxx:87
 AliGeVSimParticle.cxx:88
 AliGeVSimParticle.cxx:89
 AliGeVSimParticle.cxx:90
 AliGeVSimParticle.cxx:91
 AliGeVSimParticle.cxx:92
 AliGeVSimParticle.cxx:93
 AliGeVSimParticle.cxx:94
 AliGeVSimParticle.cxx:95
 AliGeVSimParticle.cxx:96
 AliGeVSimParticle.cxx:97
 AliGeVSimParticle.cxx:98
 AliGeVSimParticle.cxx:99
 AliGeVSimParticle.cxx:100
 AliGeVSimParticle.cxx:101
 AliGeVSimParticle.cxx:102
 AliGeVSimParticle.cxx:103
 AliGeVSimParticle.cxx:104
 AliGeVSimParticle.cxx:105
 AliGeVSimParticle.cxx:106
 AliGeVSimParticle.cxx:107
 AliGeVSimParticle.cxx:108
 AliGeVSimParticle.cxx:109
 AliGeVSimParticle.cxx:110
 AliGeVSimParticle.cxx:111
 AliGeVSimParticle.cxx:112
 AliGeVSimParticle.cxx:113
 AliGeVSimParticle.cxx:114
 AliGeVSimParticle.cxx:115
 AliGeVSimParticle.cxx:116
 AliGeVSimParticle.cxx:117
 AliGeVSimParticle.cxx:118
 AliGeVSimParticle.cxx:119
 AliGeVSimParticle.cxx:120
 AliGeVSimParticle.cxx:121
 AliGeVSimParticle.cxx:122
 AliGeVSimParticle.cxx:123
 AliGeVSimParticle.cxx:124
 AliGeVSimParticle.cxx:125
 AliGeVSimParticle.cxx:126
 AliGeVSimParticle.cxx:127
 AliGeVSimParticle.cxx:128
 AliGeVSimParticle.cxx:129
 AliGeVSimParticle.cxx:130
 AliGeVSimParticle.cxx:131
 AliGeVSimParticle.cxx:132
 AliGeVSimParticle.cxx:133
 AliGeVSimParticle.cxx:134
 AliGeVSimParticle.cxx:135
 AliGeVSimParticle.cxx:136
 AliGeVSimParticle.cxx:137
 AliGeVSimParticle.cxx:138
 AliGeVSimParticle.cxx:139
 AliGeVSimParticle.cxx:140
 AliGeVSimParticle.cxx:141
 AliGeVSimParticle.cxx:142
 AliGeVSimParticle.cxx:143
 AliGeVSimParticle.cxx:144
 AliGeVSimParticle.cxx:145
 AliGeVSimParticle.cxx:146
 AliGeVSimParticle.cxx:147
 AliGeVSimParticle.cxx:148
 AliGeVSimParticle.cxx:149
 AliGeVSimParticle.cxx:150
 AliGeVSimParticle.cxx:151
 AliGeVSimParticle.cxx:152
 AliGeVSimParticle.cxx:153
 AliGeVSimParticle.cxx:154
 AliGeVSimParticle.cxx:155
 AliGeVSimParticle.cxx:156
 AliGeVSimParticle.cxx:157
 AliGeVSimParticle.cxx:158
 AliGeVSimParticle.cxx:159
 AliGeVSimParticle.cxx:160
 AliGeVSimParticle.cxx:161
 AliGeVSimParticle.cxx:162
 AliGeVSimParticle.cxx:163
 AliGeVSimParticle.cxx:164
 AliGeVSimParticle.cxx:165
 AliGeVSimParticle.cxx:166
 AliGeVSimParticle.cxx:167
 AliGeVSimParticle.cxx:168
 AliGeVSimParticle.cxx:169
 AliGeVSimParticle.cxx:170
 AliGeVSimParticle.cxx:171
 AliGeVSimParticle.cxx:172
 AliGeVSimParticle.cxx:173
 AliGeVSimParticle.cxx:174
 AliGeVSimParticle.cxx:175
 AliGeVSimParticle.cxx:176
 AliGeVSimParticle.cxx:177
 AliGeVSimParticle.cxx:178
 AliGeVSimParticle.cxx:179
 AliGeVSimParticle.cxx:180
 AliGeVSimParticle.cxx:181
 AliGeVSimParticle.cxx:182
 AliGeVSimParticle.cxx:183
 AliGeVSimParticle.cxx:184
 AliGeVSimParticle.cxx:185
 AliGeVSimParticle.cxx:186
 AliGeVSimParticle.cxx:187
 AliGeVSimParticle.cxx:188
 AliGeVSimParticle.cxx:189
 AliGeVSimParticle.cxx:190
 AliGeVSimParticle.cxx:191
 AliGeVSimParticle.cxx:192
 AliGeVSimParticle.cxx:193
 AliGeVSimParticle.cxx:194
 AliGeVSimParticle.cxx:195
 AliGeVSimParticle.cxx:196
 AliGeVSimParticle.cxx:197
 AliGeVSimParticle.cxx:198
 AliGeVSimParticle.cxx:199
 AliGeVSimParticle.cxx:200
 AliGeVSimParticle.cxx:201
 AliGeVSimParticle.cxx:202
 AliGeVSimParticle.cxx:203
 AliGeVSimParticle.cxx:204
 AliGeVSimParticle.cxx:205
 AliGeVSimParticle.cxx:206
 AliGeVSimParticle.cxx:207
 AliGeVSimParticle.cxx:208
 AliGeVSimParticle.cxx:209
 AliGeVSimParticle.cxx:210
 AliGeVSimParticle.cxx:211
 AliGeVSimParticle.cxx:212
 AliGeVSimParticle.cxx:213
 AliGeVSimParticle.cxx:214
 AliGeVSimParticle.cxx:215
 AliGeVSimParticle.cxx:216
 AliGeVSimParticle.cxx:217
 AliGeVSimParticle.cxx:218
 AliGeVSimParticle.cxx:219
 AliGeVSimParticle.cxx:220
 AliGeVSimParticle.cxx:221
 AliGeVSimParticle.cxx:222
 AliGeVSimParticle.cxx:223
 AliGeVSimParticle.cxx:224
 AliGeVSimParticle.cxx:225
 AliGeVSimParticle.cxx:226
 AliGeVSimParticle.cxx:227
 AliGeVSimParticle.cxx:228
 AliGeVSimParticle.cxx:229
 AliGeVSimParticle.cxx:230
 AliGeVSimParticle.cxx:231
 AliGeVSimParticle.cxx:232
 AliGeVSimParticle.cxx:233
 AliGeVSimParticle.cxx:234
 AliGeVSimParticle.cxx:235
 AliGeVSimParticle.cxx:236
 AliGeVSimParticle.cxx:237
 AliGeVSimParticle.cxx:238
 AliGeVSimParticle.cxx:239
 AliGeVSimParticle.cxx:240
 AliGeVSimParticle.cxx:241
 AliGeVSimParticle.cxx:242
 AliGeVSimParticle.cxx:243
 AliGeVSimParticle.cxx:244
 AliGeVSimParticle.cxx:245
 AliGeVSimParticle.cxx:246
 AliGeVSimParticle.cxx:247
 AliGeVSimParticle.cxx:248
 AliGeVSimParticle.cxx:249
 AliGeVSimParticle.cxx:250
 AliGeVSimParticle.cxx:251
 AliGeVSimParticle.cxx:252
 AliGeVSimParticle.cxx:253
 AliGeVSimParticle.cxx:254
 AliGeVSimParticle.cxx:255
 AliGeVSimParticle.cxx:256
 AliGeVSimParticle.cxx:257
 AliGeVSimParticle.cxx:258
 AliGeVSimParticle.cxx:259
 AliGeVSimParticle.cxx:260
 AliGeVSimParticle.cxx:261
 AliGeVSimParticle.cxx:262
 AliGeVSimParticle.cxx:263
 AliGeVSimParticle.cxx:264
 AliGeVSimParticle.cxx:265
 AliGeVSimParticle.cxx:266
 AliGeVSimParticle.cxx:267
 AliGeVSimParticle.cxx:268
 AliGeVSimParticle.cxx:269
 AliGeVSimParticle.cxx:270
 AliGeVSimParticle.cxx:271
 AliGeVSimParticle.cxx:272
 AliGeVSimParticle.cxx:273
 AliGeVSimParticle.cxx:274
 AliGeVSimParticle.cxx:275
 AliGeVSimParticle.cxx:276
 AliGeVSimParticle.cxx:277
 AliGeVSimParticle.cxx:278
 AliGeVSimParticle.cxx:279
 AliGeVSimParticle.cxx:280
 AliGeVSimParticle.cxx:281
 AliGeVSimParticle.cxx:282
 AliGeVSimParticle.cxx:283
 AliGeVSimParticle.cxx:284
 AliGeVSimParticle.cxx:285
 AliGeVSimParticle.cxx:286
 AliGeVSimParticle.cxx:287
 AliGeVSimParticle.cxx:288
 AliGeVSimParticle.cxx:289
 AliGeVSimParticle.cxx:290
 AliGeVSimParticle.cxx:291
 AliGeVSimParticle.cxx:292
 AliGeVSimParticle.cxx:293
 AliGeVSimParticle.cxx:294
 AliGeVSimParticle.cxx:295
 AliGeVSimParticle.cxx:296
 AliGeVSimParticle.cxx:297
 AliGeVSimParticle.cxx:298
 AliGeVSimParticle.cxx:299
 AliGeVSimParticle.cxx:300
 AliGeVSimParticle.cxx:301
 AliGeVSimParticle.cxx:302
 AliGeVSimParticle.cxx:303
 AliGeVSimParticle.cxx:304
 AliGeVSimParticle.cxx:305
 AliGeVSimParticle.cxx:306
 AliGeVSimParticle.cxx:307
 AliGeVSimParticle.cxx:308
 AliGeVSimParticle.cxx:309
 AliGeVSimParticle.cxx:310
 AliGeVSimParticle.cxx:311
 AliGeVSimParticle.cxx:312
 AliGeVSimParticle.cxx:313
 AliGeVSimParticle.cxx:314
 AliGeVSimParticle.cxx:315
 AliGeVSimParticle.cxx:316
 AliGeVSimParticle.cxx:317
 AliGeVSimParticle.cxx:318
 AliGeVSimParticle.cxx:319
 AliGeVSimParticle.cxx:320
 AliGeVSimParticle.cxx:321
 AliGeVSimParticle.cxx:322
 AliGeVSimParticle.cxx:323
 AliGeVSimParticle.cxx:324
 AliGeVSimParticle.cxx:325
 AliGeVSimParticle.cxx:326
 AliGeVSimParticle.cxx:327
 AliGeVSimParticle.cxx:328