#ifndef ALIGENMC_H
#define ALIGENMC_H
#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:
Bool_t ParentSelected(Int_t ip) const;
Bool_t ChildSelected(Int_t ip) const;
Bool_t KinematicSelection(const TParticle *particle, Int_t flag) const;
Int_t CheckPDGCode(Int_t pdgcode) const;
protected:
TClonesArray fParticles;
TArrayI fParentSelect;
TArrayI fChildSelect;
Int_t fCutOnChild;
Float_t fChildPtMin;
Float_t fChildPtMax;
Float_t fChildPMin;
Float_t fChildPMax;
Float_t fChildPhiMin;
Float_t fChildPhiMax;
Float_t fChildThetaMin;
Float_t fChildThetaMax;
Float_t fChildYMin;
Float_t fChildYMax;
Float_t fXingAngleX;
Float_t fXingAngleY;
Decay_t fForceDecay;
Float_t fMaxLifeTime;
Double_t fDyBoost;
AliGeometry* fGeometryAcceptance;
Int_t fPdgCodeParticleforAcceptanceCut;
Int_t fNumberOfAcceptedParticles;
Int_t fNprimaries;
private:
AliGenMC(const AliGenMC &MC);
AliGenMC & operator=(const AliGenMC & rhs);
ClassDef(AliGenMC,7)
};
#endif