ROOT logo
#ifndef ALIGENMC_H
#define ALIGENMC_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */


// 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<TClonesArray.h>
#include <TArrayI.h>   
#include <TString.h>
class TParticle;

class AliGeometry;
class AliGenEventHeader;
#include "AliGenerator.h"
#include "AliDecayer.h"

class AliGenMC : public AliGenerator
{
 public:
    AliGenMC();
    AliGenMC(Int_t npart);
    virtual ~AliGenMC();
    virtual void Init();
    virtual void SetForceDecay(Decay_t decay = kAll) {fForceDecay = decay;}
    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 = 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)
	{fChildThetaMin = TMath::Pi()*thetamin/180;
	fChildThetaMax  = TMath::Pi()*thetamax/180;}
    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 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) const;
    // check if particle is selected as child particle
    Bool_t ChildSelected(Int_t ip) const;
    // all kinematic selection cuts go here 
    Bool_t KinematicSelection(const TParticle *particle, Int_t flag) const;
    Int_t  CheckPDGCode(Int_t pdgcode) const;

 protected:
    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,7)       // AliGenerator implementation for generators using MC methods
};
#endif





 AliGenMC.h:1
 AliGenMC.h:2
 AliGenMC.h:3
 AliGenMC.h:4
 AliGenMC.h:5
 AliGenMC.h:6
 AliGenMC.h:7
 AliGenMC.h:8
 AliGenMC.h:9
 AliGenMC.h:10
 AliGenMC.h:11
 AliGenMC.h:12
 AliGenMC.h:13
 AliGenMC.h:14
 AliGenMC.h:15
 AliGenMC.h:16
 AliGenMC.h:17
 AliGenMC.h:18
 AliGenMC.h:19
 AliGenMC.h:20
 AliGenMC.h:21
 AliGenMC.h:22
 AliGenMC.h:23
 AliGenMC.h:24
 AliGenMC.h:25
 AliGenMC.h:26
 AliGenMC.h:27
 AliGenMC.h:28
 AliGenMC.h:29
 AliGenMC.h:30
 AliGenMC.h:31
 AliGenMC.h:32
 AliGenMC.h:33
 AliGenMC.h:34
 AliGenMC.h:35
 AliGenMC.h:36
 AliGenMC.h:37
 AliGenMC.h:38
 AliGenMC.h:39
 AliGenMC.h:40
 AliGenMC.h:41
 AliGenMC.h:42
 AliGenMC.h:43
 AliGenMC.h:44
 AliGenMC.h:45
 AliGenMC.h:46
 AliGenMC.h:47
 AliGenMC.h:48
 AliGenMC.h:49
 AliGenMC.h:50
 AliGenMC.h:51
 AliGenMC.h:52
 AliGenMC.h:53
 AliGenMC.h:54
 AliGenMC.h:55
 AliGenMC.h:56
 AliGenMC.h:57
 AliGenMC.h:58
 AliGenMC.h:59
 AliGenMC.h:60
 AliGenMC.h:61
 AliGenMC.h:62
 AliGenMC.h:63
 AliGenMC.h:64
 AliGenMC.h:65
 AliGenMC.h:66
 AliGenMC.h:67
 AliGenMC.h:68
 AliGenMC.h:69
 AliGenMC.h:70
 AliGenMC.h:71
 AliGenMC.h:72
 AliGenMC.h:73
 AliGenMC.h:74
 AliGenMC.h:75
 AliGenMC.h:76
 AliGenMC.h:77
 AliGenMC.h:78
 AliGenMC.h:79
 AliGenMC.h:80
 AliGenMC.h:81
 AliGenMC.h:82
 AliGenMC.h:83
 AliGenMC.h:84
 AliGenMC.h:85
 AliGenMC.h:86
 AliGenMC.h:87
 AliGenMC.h:88
 AliGenMC.h:89
 AliGenMC.h:90
 AliGenMC.h:91
 AliGenMC.h:92
 AliGenMC.h:93
 AliGenMC.h:94
 AliGenMC.h:95
 AliGenMC.h:96
 AliGenMC.h:97
 AliGenMC.h:98
 AliGenMC.h:99
 AliGenMC.h:100
 AliGenMC.h:101
 AliGenMC.h:102
 AliGenMC.h:103
 AliGenMC.h:104
 AliGenMC.h:105
 AliGenMC.h:106
 AliGenMC.h:107
 AliGenMC.h:108
 AliGenMC.h:109
 AliGenMC.h:110
 AliGenMC.h:111