Rapidity shift calculated in Init().
[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 "AliGenerator.h"
16 #include "AliDecayer.h"
17 #include "AliGeometry.h"
18 #include <TArrayI.h>   
19 #include <TClonesArray.h>
20 #include <TString.h>
21
22 class TParticle;
23
24 class AliGenMC : public AliGenerator
25 {
26  public:
27     AliGenMC();
28     AliGenMC(Int_t npart);
29     AliGenMC(const AliGenMC &MC);
30     virtual ~AliGenMC();
31     virtual void Init();
32     virtual void SetForceDecay(Decay_t decay = kAll) {fForceDecay = decay;}
33     AliGenMC & operator=(const AliGenMC & rhs);
34         virtual void SetCutOnChild(Int_t flag = 0) {fCutOnChild = flag;}
35     virtual void SetChildMomentumRange(Float_t pmin = 0, Float_t pmax = 1.e10)
36         {fChildPMin = pmin; fChildPMax = pmax;}
37     virtual void SetChildPtRange(Float_t ptmin = 0, Float_t ptmax = 20.)
38         {fChildPtMin = ptmin; fChildPtMax = ptmax;}
39     virtual void SetChildPhiRange(Float_t phimin = -180., Float_t phimax = 180)
40         {fChildPhiMin = TMath::Pi()*phimin/180;
41         fChildPhiMax  = TMath::Pi()*phimax/180;}
42     virtual void SetChildThetaRange(Float_t thetamin = 0, Float_t thetamax = 180)
43         {fChildThetaMin = TMath::Pi()*thetamin/180;
44         fChildThetaMax  = TMath::Pi()*thetamax/180;}
45     virtual void SetChildYRange(Float_t ymin = -12, Float_t ymax = 12)
46         {fChildYMin = ymin;
47         fChildYMax  = ymax;}
48     virtual void SetMaximumLifetime(Float_t time = 1.e-15) {fMaxLifeTime = time;}
49    
50     virtual void SetGeometryAcceptance(AliGeometry * GeometryAcceptance=0) {fGeometryAcceptance = GeometryAcceptance;}
51
52     virtual void SetPdgCodeParticleforAcceptanceCut(Int_t PdgCodeParticleforAcceptanceCut=0) {fPdgCodeParticleforAcceptanceCut = PdgCodeParticleforAcceptanceCut;}
53
54     virtual void SetNumberOfAcceptedParticles(Int_t NumberOfAcceptedParticles=2) {fNumberOfAcceptedParticles = NumberOfAcceptedParticles;}
55     
56     virtual Bool_t CheckAcceptanceGeometry(Int_t np, TClonesArray* particles);
57     virtual void   SetProjectile(TString proj="P", Int_t a = 1, Int_t z = 1)
58         {fProjectile = proj; fAProjectile = a; fZProjectile = z;}    
59     virtual void   SetTarget(TString tar="P", Int_t a = 1, Int_t z = 1)
60         {fTarget = tar; fATarget = a; fZTarget = z;}    
61     virtual void Boost();
62
63  protected:
64     // check if particle is selected as parent particle
65     Bool_t ParentSelected(Int_t ip) const;
66     // check if particle is selected as child particle
67     Bool_t ChildSelected(Int_t ip) const;
68     // all kinematic selection cuts go here 
69     Bool_t KinematicSelection(TParticle *particle, Int_t flag) const;
70     Int_t  CheckPDGCode(Int_t pdgcode) const;
71
72  protected:
73     TClonesArray* fParticles;   //!Particle  List
74     TArrayI     fParentSelect;  //!Parent particles to be selected 
75     TArrayI     fChildSelect;   //!Decay products to be selected
76     Int_t       fCutOnChild;    // Cuts on decay products (children)  are enabled/disabled
77     Float_t     fChildPtMin;    // Children minimum pT
78     Float_t     fChildPtMax;    // Children maximum pT
79     Float_t     fChildPMin;     // Children minimum p
80     Float_t     fChildPMax;     // Children maximum p
81     Float_t     fChildPhiMin;   // Children minimum phi
82     Float_t     fChildPhiMax;   // Children maximum phi
83     Float_t     fChildThetaMin; // Children minimum theta
84     Float_t     fChildThetaMax; // Children maximum theta
85     Float_t     fChildYMin;     // Children minimum y
86     Float_t     fChildYMax;     // Children maximum y
87     Decay_t     fForceDecay;    // Decay channel forced
88     Float_t     fMaxLifeTime;   // Maximum lifetime for unstable particles
89     Int_t       fAProjectile;   // Projectile A
90     Int_t       fZProjectile;   // Projectile Z
91     Int_t       fATarget;       // Target A
92     Int_t       fZTarget;       // Target Z
93     TString     fProjectile;    // Projectile
94     TString     fTarget;        // Target
95     Double_t    fDyBoost;       // dy for boost into lab frame
96     AliGeometry * fGeometryAcceptance; // Geometry to which particles must be simulated
97     Int_t       fPdgCodeParticleforAcceptanceCut;  // Abs(PDG Code) of the particle to which the GeometryAcceptance must be applied
98     Int_t       fNumberOfAcceptedParticles;  // Number of accepted particles in GeometryAcceptance with the right Abs(PdgCode) 
99     
100     ClassDef(AliGenMC,5)       // AliGenerator implementation for generators using MC methods
101 };
102 #endif
103
104
105
106
107