X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EVGEN%2FAliGenMC.h;h=4d147a74eb7ee83b7170f0c920956b7d78f25eb7;hb=c91e57e4226ea021bdd8cbe17c84d527b28f9cb1;hp=933595f4763a17639941f411dd3dd8cec7984cb4;hpb=fbfe101a8402e9c83b35adafc7244b5060c53e8e;p=u%2Fmrichter%2FAliRoot.git diff --git a/EVGEN/AliGenMC.h b/EVGEN/AliGenMC.h index 933595f4763..4d147a74eb7 100644 --- a/EVGEN/AliGenMC.h +++ b/EVGEN/AliGenMC.h @@ -6,28 +6,36 @@ /* $Id$ */ -#include "AliGenerator.h" -#include "AliDecayer.h" -#include +// Base class for generators using external MC generators. +// For example AliGenPythia using Pythia. +// Provides basic functionality: setting of kinematic cuts on +// decay products and particle selection. +// andreas.morsch@cern.ch +#include +#include +#include class TParticle; +class AliGeometry; +class AliGenEventHeader; +#include "AliGenerator.h" +#include "AliDecayer.h" + class AliGenMC : public AliGenerator { public: AliGenMC(); AliGenMC(Int_t npart); - AliGenMC(const AliGenMC &MC); virtual ~AliGenMC(); virtual void Init(); virtual void SetForceDecay(Decay_t decay = kAll) {fForceDecay = decay;} - AliGenMC & operator=(const AliGenMC & rhs); - virtual void SetCutOnChild(Int_t flag = 0) {fCutOnChild = flag;} + virtual void SetCutOnChild(Int_t flag = 0) {fCutOnChild = flag;} virtual void SetChildMomentumRange(Float_t pmin = 0, Float_t pmax = 1.e10) {fChildPMin = pmin; fChildPMax = pmax;} virtual void SetChildPtRange(Float_t ptmin = 0, Float_t ptmax = 20.) {fChildPtMin = ptmin; fChildPtMax = ptmax;} - virtual void SetChildPhiRange(Float_t phimin = -180., Float_t phimax = 180) + virtual void SetChildPhiRange(Float_t phimin = 0., Float_t phimax = 360.) {fChildPhiMin = TMath::Pi()*phimin/180; fChildPhiMax = TMath::Pi()*phimax/180;} virtual void SetChildThetaRange(Float_t thetamin = 0, Float_t thetamax = 180) @@ -36,34 +44,64 @@ class AliGenMC : public AliGenerator virtual void SetChildYRange(Float_t ymin = -12, Float_t ymax = 12) {fChildYMin = ymin; fChildYMax = ymax;} - virtual void SetMaximumLifetime(Float_t time = 1.e-15) {fMaxLifeTime = time;} + virtual void SetMaximumLifetime(Float_t time = 1.e-15) {fMaxLifeTime = time;} + + virtual void SetGeometryAcceptance(AliGeometry * GeometryAcceptance=0) {fGeometryAcceptance = GeometryAcceptance;} + + virtual void SetPdgCodeParticleforAcceptanceCut(Int_t PdgCodeParticleforAcceptanceCut=0) {fPdgCodeParticleforAcceptanceCut = PdgCodeParticleforAcceptanceCut;} + + virtual void SetNumberOfAcceptedParticles(Int_t NumberOfAcceptedParticles=2) {fNumberOfAcceptedParticles = NumberOfAcceptedParticles;} + + virtual Bool_t CheckAcceptanceGeometry(Int_t np, TClonesArray* particles); + virtual void SetProjectile(TString proj="P", Int_t a = 1, Int_t z = 1) + {fProjectile = proj; fAProjectile = a; fZProjectile = z;} + virtual void SetTarget(TString tar="P", Int_t a = 1, Int_t z = 1) + {fTarget = tar; fATarget = a; fZTarget = z;} + virtual void SetCrossingAngle(Float_t phiX, Float_t phiY) {fXingAngleX = phiX; fXingAngleY = phiY;} + virtual void Boost(); + virtual void SetDyBoost(Double_t dyBoost = 0.) {fDyBoost = dyBoost;} + virtual void BeamCrossAngle(); + virtual void AddHeader(AliGenEventHeader* header); + protected: // check if particle is selected as parent particle - Bool_t ParentSelected(Int_t ip); + Bool_t ParentSelected(Int_t ip) const; // check if particle is selected as child particle - Bool_t ChildSelected(Int_t ip); + Bool_t ChildSelected(Int_t ip) const; // all kinematic selection cuts go here - Bool_t KinematicSelection(TParticle *particle, Int_t flag); - Int_t CheckPDGCode(Int_t pdgcode); + Bool_t KinematicSelection(const TParticle *particle, Int_t flag) const; + Int_t CheckPDGCode(Int_t pdgcode) const; protected: - TArrayI fParentSelect; //!Parent particles to be selected - TArrayI fChildSelect; //!Decay products to be selected - Int_t fCutOnChild; // Cuts on decay products (children) are enabled/disabled - Float_t fChildPtMin; // Children minimum pT - Float_t fChildPtMax; // Children maximum pT - Float_t fChildPMin; // Children minimum p - Float_t fChildPMax; // Children maximum p - Float_t fChildPhiMin; // Children minimum phi - Float_t fChildPhiMax; // Children maximum phi - Float_t fChildThetaMin; // Children minimum theta - Float_t fChildThetaMax; // Children maximum theta - Float_t fChildYMin; // Children minimum y - Float_t fChildYMax; // Children maximum y - Decay_t fForceDecay; // Decay channel forced - Float_t fMaxLifeTime; // Maximum lifetime for unstable particles + TClonesArray fParticles; //!Particle List + TArrayI fParentSelect; //!Parent particles to be selected + TArrayI fChildSelect; //!Decay products to be selected + Int_t fCutOnChild; // Cuts on decay products (children) are enabled/disabled + Float_t fChildPtMin; // Children minimum pT + Float_t fChildPtMax; // Children maximum pT + Float_t fChildPMin; // Children minimum p + Float_t fChildPMax; // Children maximum p + Float_t fChildPhiMin; // Children minimum phi + Float_t fChildPhiMax; // Children maximum phi + Float_t fChildThetaMin; // Children minimum theta + Float_t fChildThetaMax; // Children maximum theta + Float_t fChildYMin; // Children minimum y + Float_t fChildYMax; // Children maximum y + Float_t fXingAngleX; // Crossing angle X + Float_t fXingAngleY; // Crossing angle Y + Decay_t fForceDecay; // Decay channel forced + Float_t fMaxLifeTime; // Maximum lifetime for unstable particles + Double_t fDyBoost; // dy for boost into lab frame + AliGeometry* fGeometryAcceptance; // Geometry to which particles must be simulated + Int_t fPdgCodeParticleforAcceptanceCut; // Abs(PDG Code) of the particle to which the GeometryAcceptance must be applied + Int_t fNumberOfAcceptedParticles; // Number of accepted particles in GeometryAcceptance with the right Abs(PdgCode) + Int_t fNprimaries; // Number of produced and stored particles + + private: + AliGenMC(const AliGenMC &MC); + AliGenMC & operator=(const AliGenMC & rhs); - ClassDef(AliGenMC,4) // AliGenerator implementation for generators using MC methods + ClassDef(AliGenMC,7) // AliGenerator implementation for generators using MC methods }; #endif