Line data Source code
1 : #ifndef ALIGENGEVSIM_H
2 : #define ALIGENGEVSIM_H
3 : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 : * See cxx source for full Copyright notice */
5 :
6 : /* $Id$ */
7 :
8 : ////////////////////////////////////////////////////////////////////////////////
9 : //
10 : // AliGenGeVSim is a class implementing GeVSim event generator.
11 : //
12 : // GeVSim is a simple Monte-Carlo event generator for testing detector and
13 : // algorythm performance especialy concerning flow and event-by-event studies
14 : //
15 : // In this event generator particles are generated from thermal distributions
16 : // without any dynamics and addicional constrains. Distribution parameters like
17 : // multiplicity, particle type yields, inverse slope parameters, flow coeficients
18 : // and expansion velocities are expleicite defined by the user.
19 : //
20 : // GeVSim contains four thermal distributions the same as
21 : // MevSim event generator developed for STAR experiment.
22 : //
23 : // In addition custom distributions can be used be the mean
24 : // either two dimensional formula (TF2), a two dimensional histogram or
25 : // two one dimensional histograms.
26 : //
27 : // Azimuthal distribution is deconvoluted from (Pt,Y) distribution
28 : // and is described by two Fourier coefficients representing
29 : // Directed and Elliptic flow.
30 : //
31 : ////////////////////////////////////////////////////////////////////////////////
32 : //
33 : // To apply flow to event ganerated by an arbitraly event generator
34 : // refer to AliGenAfterBurnerFlow class.
35 : //
36 : ////////////////////////////////////////////////////////////////////////////////
37 : //
38 : // For examples, parameters and testing macros refer to:
39 : // http:/home.cern.ch/radomski
40 : //
41 : // for more detailed description refer to ALICE NOTE
42 : // "GeVSim Monte-Carlo Event Generator"
43 : // S.Radosmki, P. Foka.
44 : //
45 : // Author:
46 : // Sylwester Radomski,
47 : // GSI, March 2002
48 : //
49 : // S.Radomski@gsi.de
50 : //
51 : ////////////////////////////////////////////////////////////////////////////////
52 : //
53 : // Updated and revised: September 2002, S. Radomski, GSI
54 : //
55 : ////////////////////////////////////////////////////////////////////////////////
56 :
57 :
58 : class TFormula;
59 : class TF1;
60 : class TF2;
61 : class TH1D;
62 : class TH2D;
63 : class TObjArray;
64 : class AliGeVSimParticle;
65 :
66 : #include "AliGenerator.h"
67 :
68 :
69 : class AliGenGeVSim : public AliGenerator {
70 :
71 : public:
72 :
73 : AliGenGeVSim();
74 : AliGenGeVSim(Float_t psi, Bool_t isMultTotal = kTRUE);
75 :
76 : virtual ~AliGenGeVSim();
77 :
78 : /////////////////////////////////////////////////////////////////
79 :
80 : void AddParticleType(AliGeVSimParticle *part);
81 : void SetMultTotal(Bool_t isTotal = kTRUE);
82 :
83 : void Init();
84 : void Generate();
85 :
86 : /////////////////////////////////////////////////////////////////
87 :
88 : private:
89 :
90 : AliGenGeVSim(const AliGenGeVSim & ggs);
91 : AliGenGeVSim & operator=(const AliGenGeVSim & /*ggs*/);
92 :
93 :
94 : Int_t fModel; // Selected model (1-7)
95 : Float_t fPsi; // Reaction Plane angle (0-2pi)
96 : Bool_t fIsMultTotal; // Mode od multiplicity: total, dN/dY
97 :
98 : TF1 *fPtFormula; //! Pt formula for model (1)
99 : TF1 *fYFormula; //! Y formula for model (1)
100 : TF2 *fPtYFormula[4]; //! Pt,Y formulae for model (2)-(4)
101 : TF1 *fPhiFormula; //! phi formula
102 :
103 : TFormula *fCurrentForm; //! currently used formula
104 : TH1D *fHist[2]; //! two 1D histograms (fModel == 6)
105 : TH2D *fPtYHist; //! two-dimensional histogram (fModel == 7)
106 :
107 : TObjArray *fPartTypes; // Registered particles
108 :
109 : void InitFormula();
110 : void SetFormula(Int_t pdg);
111 : void AdjustFormula();
112 : void DetermineReactionPlane();
113 : void GetRandomPtY(Double_t &pt, Double_t &y);
114 :
115 : Float_t GetdNdYToTotal();
116 :
117 : Bool_t CheckPtYPhi(Float_t pt, Float_t y, Float_t phi) const; // for histograms only
118 : Bool_t CheckAcceptance(Float_t p[3]);
119 :
120 : Float_t FindScaler(Int_t paramId, Int_t pdg);
121 :
122 : /////////////////////////////////////////////////////////////////
123 :
124 :
125 6 : ClassDef(AliGenGeVSim, 2)
126 :
127 : };
128 :
129 : #endif
|