Filling the GRP entry inside ALiSimulation. Can be swtiched off/on via SetWriteGRPEnt...
[u/mrichter/AliRoot.git] / EVGEN / AliGenMC.h
1 #ifndef ALIGENMC_H
2 #define ALIGENMC_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 // Base class for generators using external MC generators.
10 // For example AliGenPythia using Pythia.
11 // Provides basic functionality: setting of kinematic cuts on 
12 // decay products and particle selection.
13 // andreas.morsch@cern.ch
14
15 #include<TClonesArray.h>
16 #include <TArrayI.h>   
17 #include <TString.h>
18 class TParticle;
19
20 class AliGeometry;
21 class AliGenEventHeader;
22 #include "AliDecayer.h"
23 #include "AliGenerator.h"
24
25 class AliGenMC : public AliGenerator
26 {
27  public:
28     AliGenMC();
29     AliGenMC(Int_t npart);
30     virtual ~AliGenMC();
31     virtual void Init();
32     virtual void SetForceDecay(Decay_t decay = kAll) {fForceDecay = decay;}
33     virtual void SetCutOnChild(Int_t flag = 0) {fCutOnChild = flag;}
34     virtual void SetChildMomentumRange(Float_t pmin = 0, Float_t pmax = 1.e10)
35         {fChildPMin = pmin; fChildPMax = pmax;}
36     virtual void SetChildPtRange(Float_t ptmin = 0, Float_t ptmax = 20.)
37         {fChildPtMin = ptmin; fChildPtMax = ptmax;}
38     virtual void SetChildPhiRange(Float_t phimin = 0., Float_t phimax = 360.)
39         {fChildPhiMin = TMath::Pi()*phimin/180;
40         fChildPhiMax  = TMath::Pi()*phimax/180;}
41     virtual void SetChildThetaRange(Float_t thetamin = 0, Float_t thetamax = 180)
42         {fChildThetaMin = TMath::Pi()*thetamin/180;
43         fChildThetaMax  = TMath::Pi()*thetamax/180;}
44     virtual void SetChildYRange(Float_t ymin = -12, Float_t ymax = 12)
45         {fChildYMin = ymin;
46         fChildYMax  = ymax;}
47     virtual void SetMaximumLifetime(Float_t time = 1.e-15) {fMaxLifeTime = time;}
48    
49     virtual void SetGeometryAcceptance(AliGeometry * GeometryAcceptance=0) {fGeometryAcceptance = GeometryAcceptance;}
50
51     virtual void SetPdgCodeParticleforAcceptanceCut(Int_t PdgCodeParticleforAcceptanceCut=0) {fPdgCodeParticleforAcceptanceCut = PdgCodeParticleforAcceptanceCut;}
52
53     virtual void SetNumberOfAcceptedParticles(Int_t NumberOfAcceptedParticles=2) {fNumberOfAcceptedParticles = NumberOfAcceptedParticles;}
54     
55     virtual Bool_t CheckAcceptanceGeometry(Int_t np, TClonesArray* particles);
56     virtual void   SetProjectile(TString proj="P", Int_t a = 1, Int_t z = 1)
57         {fProjectile = proj; fAProjectile = a; fZProjectile = z;}    
58     virtual void   SetTarget(TString tar="P", Int_t a = 1, Int_t z = 1)
59         {fTarget = tar; fATarget = a; fZTarget = z;}
60     virtual void   SetCrossingAngle(Float_t phiX, Float_t phiY) {fXingAngleX = phiX; fXingAngleY = phiY;}
61     virtual void Boost();
62     virtual void AddHeader(AliGenEventHeader* header);
63     virtual void   GetProjectile(TString& tar, Int_t& a, Int_t& z)       const
64         {tar = fProjectile; a = fAProjectile; z = fZProjectile;}    
65     virtual void   GetTarget(TString& tar, Int_t& a, Int_t& z)           const
66         {tar = fTarget; a = fATarget; z = fZTarget;}    
67     virtual Float_t GetEnergyCMS() const {return fEnergyCMS;}
68
69  protected:
70     // check if particle is selected as parent particle
71     Bool_t ParentSelected(Int_t ip) const;
72     // check if particle is selected as child particle
73     Bool_t ChildSelected(Int_t ip) const;
74     // all kinematic selection cuts go here 
75     Bool_t KinematicSelection(TParticle *particle, Int_t flag) const;
76     Int_t  CheckPDGCode(Int_t pdgcode) const;
77
78  protected:
79     TClonesArray fParticles;     //!Particle  List
80     TArrayI      fParentSelect;  //!Parent particles to be selected 
81     TArrayI      fChildSelect;   //!Decay products to be selected
82     Int_t        fCutOnChild;    // Cuts on decay products (children)  are enabled/disabled
83     Float_t      fChildPtMin;    // Children minimum pT
84     Float_t      fChildPtMax;    // Children maximum pT
85     Float_t      fChildPMin;     // Children minimum p
86     Float_t      fChildPMax;     // Children maximum p
87     Float_t      fChildPhiMin;   // Children minimum phi
88     Float_t      fChildPhiMax;   // Children maximum phi
89     Float_t      fChildThetaMin; // Children minimum theta
90     Float_t      fChildThetaMax; // Children maximum theta
91     Float_t      fChildYMin;     // Children minimum y
92     Float_t      fChildYMax;     // Children maximum y
93     Float_t      fXingAngleX;    // Crossing angle X
94     Float_t      fXingAngleY;    // Crossing angle Y    
95     Decay_t      fForceDecay;    // Decay channel forced
96     Float_t      fMaxLifeTime;   // Maximum lifetime for unstable particles
97     Int_t        fAProjectile;   // Projectile A
98     Int_t        fZProjectile;   // Projectile Z
99     Int_t        fATarget;       // Target A
100     Int_t        fZTarget;       // Target Z
101     TString      fProjectile;    // Projectile
102     TString      fTarget;        // Target
103     Double_t     fDyBoost;       // dy for boost into lab frame
104     AliGeometry* fGeometryAcceptance; // Geometry to which particles must be simulated
105     Int_t        fPdgCodeParticleforAcceptanceCut;  // Abs(PDG Code) of the particle to which the GeometryAcceptance must be applied
106     Int_t        fNumberOfAcceptedParticles;  // Number of accepted particles in GeometryAcceptance with the right Abs(PdgCode) 
107     Int_t        fNprimaries;                 // Number of produced and stored particles
108     Float_t      fEnergyCMS;     //Centre of mass energy
109  private:
110     AliGenMC(const AliGenMC &MC);
111     AliGenMC & operator=(const AliGenMC & rhs);
112     
113     ClassDef(AliGenMC,6)       // AliGenerator implementation for generators using MC methods
114 };
115 #endif
116
117
118
119
120