Coding Convention Violation correction
[u/mrichter/AliRoot.git] / EVGEN / AliGenGeVSim.h
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): AliGenerator(ggs)
91     {Fatal("copy ctor","Not implemented\n");}
92   AliGenGeVSim & operator=(const AliGenGeVSim & ggs)
93     {Fatal("= operator","Not implemented\n"); return *this;}
94
95   Int_t   fModel;            // Selected model (1-7)
96   Float_t fPsi;              // Reaction Plane angle (0-2pi)
97   Bool_t  fIsMultTotal;      // Mode od multiplicity: total, dN/dY
98
99   TF1 *fPtFormula;           //! Pt formula for model (1)
100   TF1 *fYFormula;            //! Y formula for model (1)
101   TF2 *fPtYFormula[4];       //! Pt,Y formulae for model (2)-(4)
102   TF1 *fPhiFormula;          //! phi formula 
103   
104   TFormula *fCurrentForm;    //! currently used formula
105   TH1D *fHist[2];            //! two 1D histograms (fModel == 6)
106   TH2D *fPtYHist;            //! two-dimensional histogram (fModel == 7)
107
108   TObjArray *fPartTypes;     // Registered particles
109   
110   void InitFormula();
111   void SetFormula(Int_t pdg);
112   void AdjustFormula();
113   void DetermineReactionPlane();
114   void GetRandomPtY(Double_t &pt, Double_t &y);
115
116   Float_t GetdNdYToTotal();
117   
118   Bool_t CheckPtYPhi(Float_t pt, Float_t y, Float_t phi) const;  // for histograms only
119   Bool_t CheckAcceptance(Float_t p[3]);
120   
121   Float_t FindScaler(Int_t paramId, Int_t pdg);
122   
123   /////////////////////////////////////////////////////////////////
124
125
126   ClassDef(AliGenGeVSim, 2)
127
128 };
129
130 #endif