Overlaps corrected, new shape of sectors
[u/mrichter/AliRoot.git] / EVGEN / AliGenEMCocktail.h
1 #ifndef ALIGENEMCOCKTAIL_H
2 #define ALIGENEMCOCKTAIL_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 //
7 // Class to create the cocktail for physics with electrons, di-electrons,
8 // and photons from the decay of the following sources:
9 // pizero, eta, rho, omega, etaprime, phi
10 //
11
12 #include "AliGenCocktail.h"
13 #include "AliGenEMlib.h"
14 #include "AliDecayer.h"
15 #include "AliGenParam.h"
16
17
18 class AliGenCocktailEntry;
19
20 class AliGenEMCocktail : public AliGenCocktail
21 {
22 public:
23
24   AliGenEMCocktail();
25   enum GeneratorIndex_t { kPizero=0, kEta, kRho0, kOmega, kEtaprime, kPhi, kJpsi, kSigma0, kK0s, kDeltaPlPl, kDeltaPl, kDeltaMi, kDeltaZero, kRhoPl, kRhoMi, kK0star, kDirectRealGamma, kDirectVirtGamma, kGENs };
26   enum ParticleGenerator_t { kGenPizero = 0x00001, kGenEta = 0x00002, kGenRho0 = 0x00004, kGenOmega = 0x00008, 
27                              kGenEtaprime = 0x00010, kGenPhi = 0x00020, kGenJpsi = 0x00040, 
28                              kGenDirectRealGamma = 0x00100, kGenDirectVirtGamma = 0x00200, kGenSigma0 = 0x00400, kGenK0s = 0x00800,
29                              kGenDeltaPlPl = 0x01000, kGenDeltaPl = 0x02000, kGenDeltaMi = 0x04000, kGenDeltaZero = 0x08000, 
30                              kGenRhoPl = 0x10000, kGenRhoMi = 0x20000, kGenK0star = 0x40000,  
31                              kGenHadrons = 0x0007f, kGenGammas = 0x00300 };
32
33   virtual ~AliGenEMCocktail();    
34   virtual void Init();
35   virtual void CreateCocktail();
36   virtual void Generate();    
37   Float_t GetDecayMode()                 const  { return fDecayMode   ;}
38   Float_t GetWeightingMode()             const  { return fWeightingMode  ;}
39   void    SetDecayer(AliDecayer* const decayer)      { fDecayer = decayer  ;}
40   void    SetDecayMode(Decay_t decay)         { fDecayMode = decay  ;}
41   void    SetWeightingMode(Weighting_t weight)      { fWeightingMode = weight ;}
42   void    SetNPart(Int_t npart){ fNPart = npart; }
43   void    SetPtParamPi0(AliGenEMlib::PtParamSetPi0_t PtSelect)  { fPtSelectPi0 = PtSelect ;}
44   void    SetPtParamEta(AliGenEMlib::PtParamSetEta_t PtSelect)  { fPtSelectEta = PtSelect ;}
45   void    SetPtParamOmega(AliGenEMlib::PtParamSetOmega_t PtSelect) { fPtSelectOmega = PtSelect ;}
46   void    SetPtParamPhi(AliGenEMlib::PtParamSetPhi_t PtSelect)  { fPtSelectPhi = PtSelect ;}
47   void    SetCollisionSystem(AliGenEMlib::CollisionSystem_t col)  { fCollisionSystem = col ;}
48   void    SetCentrality(AliGenEMlib::Centrality_t cent)    { fCentrality = cent  ;}
49   void    SetV2Systematic(AliGenEMlib::v2Sys_t v2sys)     { fV2Systematic = v2sys  ;}
50   void    SetForceGammaConversion(Bool_t force=kTRUE)     { fForceConv=force   ;}
51   void    SetHeaviestHadron(ParticleGenerator_t part);
52     
53   //***********************************************************************************************
54   // This function allows to select the particle which should be procude based on 1 Integer value
55   // this integer value is then bitwise compare to the values in SelectParticle
56   // Examples: 
57   // a) you would like to switch on: pi0, eta, rho0, omega, eta', phi, jpsi, sigma0 and all deltas
58   //    implies you want the binary number: 00 1111 0100 0111 1111 = 
59   //   which translates 62591_10 (in decimal) and F47F_16 (in hexadecimal)
60   // b) you would like to switch on: pi0, eta, rho0, omega, eta', phi, sigma0 and 
61   //    implies you want the binary number: 00 0000 0100 0011 1111 = 
62   //   which translates 1087_10 (in decimal) and 43F_16 (in hexadecimal)
63   // c) you would like to switch on: pi0, eta, rho0, omega, eta', phi, sigma0 and all deltas
64   //    implies you want the binary number: 00 1111 0100 0011 1111 = 
65   //   which translates 62527_10 (in decimal) and F43F_16 (in hexadecimal)
66   // d) you would like to switch on: pi0, eta, rho0, omega, eta', phi
67   //    implies you want the binary number: 00 0000 0000 0011 1111 = 
68   //   which translates 63_10 (in decimal) and 3F_16 (in hexadecimal)
69   //***********************************************************************************************
70   void    SelectMotherParticles(UInt_t part)       { fSelectedParticles=part ;}
71
72 private:
73   AliGenEMCocktail(const AliGenEMCocktail &cocktail); 
74   AliGenEMCocktail & operator=(const AliGenEMCocktail &cocktail); 
75
76   void AddSource2Generator(Char_t *nameReso, AliGenParam* const genReso);
77   
78   AliDecayer*      fDecayer;        // External decayer
79   Decay_t       fDecayMode;    // decay mode in which resonances are forced to decay, default: kAll
80   Weighting_t      fWeightingMode;  // weighting mode: kAnalog or kNonAnalog
81   
82   Int_t          fNPart;             // multiplicity of each source per event
83   Double_t       fYieldArray[kGENs]; // array of dN/dy for each source
84
85   AliGenEMlib::CollisionSystem_t  fCollisionSystem;   // selected collision system
86   AliGenEMlib::PtParamSetPi0_t  fPtSelectPi0;   // selected pT parameterization for pi0
87   AliGenEMlib::PtParamSetEta_t  fPtSelectEta;   // selected pT parameterization for eta
88   AliGenEMlib::PtParamSetOmega_t  fPtSelectOmega;  // selected pT parameterization for omega
89   AliGenEMlib::PtParamSetPhi_t  fPtSelectPhi;   // selected pT parameterization for phi
90   AliGenEMlib::Centrality_t   fCentrality;   // selected centrality
91   AliGenEMlib::v2Sys_t    fV2Systematic;   // selected systematic error for v2 parameters
92
93   Bool_t        fForceConv;   // select whether you want to force all gammas to convert imidediately
94   UInt_t        fSelectedParticles; // which particles to simulate, allows to switch on and off 32 different particles
95
96
97
98   ClassDef(AliGenEMCocktail,2)       // cocktail for EM physics
99 };
100
101 #endif
102
103
104