3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
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
15 #include<TClonesArray.h>
21 class AliGenEventHeader;
22 #include "AliDecayer.h"
23 #include "AliGenerator.h"
25 class AliGenMC : public AliGenerator
29 AliGenMC(Int_t npart);
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)
47 virtual void SetMaximumLifetime(Float_t time = 1.e-15) {fMaxLifeTime = time;}
49 virtual void SetGeometryAcceptance(AliGeometry * GeometryAcceptance=0) {fGeometryAcceptance = GeometryAcceptance;}
51 virtual void SetPdgCodeParticleforAcceptanceCut(Int_t PdgCodeParticleforAcceptanceCut=0) {fPdgCodeParticleforAcceptanceCut = PdgCodeParticleforAcceptanceCut;}
53 virtual void SetNumberOfAcceptedParticles(Int_t NumberOfAcceptedParticles=2) {fNumberOfAcceptedParticles = NumberOfAcceptedParticles;}
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;}
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;}
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;
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
110 AliGenMC(const AliGenMC &MC);
111 AliGenMC & operator=(const AliGenMC & rhs);
113 ClassDef(AliGenMC,6) // AliGenerator implementation for generators using MC methods