X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EVGEN%2FAliGenMC.cxx;h=13339d723b1bcfa62e7173c4b1c7eb1d9fb94e1a;hb=1fa2e049856f196ac3b316ccec3522e41b0d777a;hp=04ebde22a23e3be058674eb678fd0dc9d2d16f36;hpb=198bb1c7ab5437cd36dc37692d7ad850220b43fd;p=u%2Fmrichter%2FAliRoot.git diff --git a/EVGEN/AliGenMC.cxx b/EVGEN/AliGenMC.cxx index 04ebde22a23..13339d723b1 100644 --- a/EVGEN/AliGenMC.cxx +++ b/EVGEN/AliGenMC.cxx @@ -21,59 +21,87 @@ // decay products and particle selection. // andreas.morsch@cern.ch +#include #include #include #include #include "AliGenMC.h" +#include "AliRun.h" +#include "AliGeometry.h" ClassImp(AliGenMC) AliGenMC::AliGenMC() - :AliGenerator() + :AliGenerator(), + fParticles("TParticle", 1000), + fParentSelect(8), + fChildSelect(8), + fCutOnChild(0), + fChildPtMin(0.), + fChildPtMax(1.e10), + fChildPMin(0.), + fChildPMax(1.e10), + fChildPhiMin(0.), + fChildPhiMax(2. * TMath::Pi()), + fChildThetaMin(0.), + fChildThetaMax(TMath::Pi()), + fChildYMin(-12.), + fChildYMax(12.), + fXingAngleX(0.), + fXingAngleY(0.), + fForceDecay(kAll), + fMaxLifeTime(1.e-15), + fDyBoost(0.), + fGeometryAcceptance(0), + fPdgCodeParticleforAcceptanceCut(0), + fNumberOfAcceptedParticles(0), + fNprimaries(0) { // Default Constructor - SetCutOnChild(); - SetChildMomentumRange(); - SetChildPtRange(); - SetChildPhiRange(); - SetChildThetaRange(); - SetChildYRange(); - SetMaximumLifetime(); - SetGeometryAcceptance(); - SetPdgCodeParticleforAcceptanceCut(); - SetNumberOfAcceptedParticles(); - SetTarget(); - SetProjectile(); + fAProjectile = 1; + fZProjectile = 1; + fATarget = 1; + fZTarget = 1; + fProjectile = "P"; + fTarget = "P"; } AliGenMC::AliGenMC(Int_t npart) - :AliGenerator(npart) + :AliGenerator(npart), + fParticles("TParticle", 1000), + fParentSelect(8), + fChildSelect(8), + fCutOnChild(0), + fChildPtMin(0.), + fChildPtMax(1.e10), + fChildPMin(0.), + fChildPMax(1.e10), + fChildPhiMin(0.), + fChildPhiMax(2. * TMath::Pi()), + fChildThetaMin(0.), + fChildThetaMax(TMath::Pi()), + fChildYMin(-12.), + fChildYMax(12.), + fXingAngleX(0.), + fXingAngleY(0.), + fForceDecay(kAll), + fMaxLifeTime(1.e-15), + fDyBoost(0.), + fGeometryAcceptance(0), + fPdgCodeParticleforAcceptanceCut(0), + fNumberOfAcceptedParticles(0), + fNprimaries(0) { // Constructor - SetCutOnChild(); - SetChildMomentumRange(); - SetChildPtRange(); - SetChildPhiRange(); - SetChildThetaRange(); - SetChildYRange(); // - fParentSelect.Set(8); - fChildSelect.Set(8); - for (Int_t i=0; i<8; i++) fParentSelect[i]=fChildSelect[i]=0; - SetMaximumLifetime(); - SetGeometryAcceptance(); - SetPdgCodeParticleforAcceptanceCut(); - SetNumberOfAcceptedParticles(); - SetTarget(); - SetProjectile(); -} - -AliGenMC::AliGenMC(const AliGenMC & mc): - AliGenerator(mc) -{ -// Copy constructor - mc.Copy(*this); + fAProjectile = 1; + fZProjectile = 1; + fATarget = 1; + fZTarget = 1; + fProjectile = "P"; + fTarget = "P"; + for (Int_t i=0; i<8; i++) fParentSelect[i]=fChildSelect[i]=0; } AliGenMC::~AliGenMC() @@ -86,30 +114,55 @@ void AliGenMC::Init() // // Initialization switch (fForceDecay) { + case kBSemiElectronic: case kSemiElectronic: case kDiElectron: case kBJpsiDiElectron: case kBPsiPrimeDiElectron: fChildSelect[0] = kElectron; break; + case kHardMuons: + case kBSemiMuonic: case kSemiMuonic: case kDiMuon: case kBJpsiDiMuon: case kBPsiPrimeDiMuon: case kPiToMu: case kKaToMu: + case kWToMuon: + case kWToCharmToMuon: + case kZDiMuon: + case kZDiElectron: fChildSelect[0]=kMuonMinus; break; + case kWToCharm: + break; case kHadronicD: + case kHadronicDWithout4Bodies: fChildSelect[0]=kPiPlus; fChildSelect[1]=kKPlus; break; case kPhiKK: fChildSelect[0]=kKPlus; + break; + case kBJpsi: + fChildSelect[0]= 443; + break; + case kChiToJpsiGammaToMuonMuon: + fChildSelect[0]= 22; + fChildSelect[1]= 13; + break; + case kChiToJpsiGammaToElectronElectron: + fChildSelect[0]= 22; + fChildSelect[1]= 11; + break; + case kOmega: case kAll: + case kAllMuonic: case kNoDecay: case kNoDecayHeavy: + case kNeutralPion: break; } @@ -144,14 +197,18 @@ Bool_t AliGenMC::ChildSelected(Int_t ip) const Bool_t AliGenMC::KinematicSelection(TParticle *particle, Int_t flag) const { // Perform kinematic selection - Float_t pz = particle->Pz(); - Float_t e = particle->Energy(); - Float_t pt = particle->Pt(); - Float_t p = particle->P(); - Float_t theta = particle->Theta(); - Float_t mass = particle->GetCalcMass(); - Float_t mt2 = pt * pt + mass * mass; - Float_t phi = particle->Phi(); + Double_t pz = particle->Pz(); + Double_t pt = particle->Pt(); + Double_t p = particle->P(); + Double_t theta = particle->Theta(); + Double_t mass = particle->GetCalcMass(); + Double_t mt2 = pt * pt + mass * mass; + Double_t phi = particle->Phi(); + Double_t e = particle->Energy(); + + if (e == 0.) + e = TMath::Sqrt(p * p + mass * mass); + Double_t y, y0; @@ -246,24 +303,26 @@ Bool_t AliGenMC::KinematicSelection(TParticle *particle, Int_t flag) const Bool_t AliGenMC::CheckAcceptanceGeometry(Int_t np, TClonesArray* particles) { - Bool_t Check ; // All fPdgCodeParticleforAcceptanceCut particles are in in the fGeometryAcceptance acceptance - Int_t NumberOfPdgCodeParticleforAcceptanceCut=0; - Int_t NumberOfAcceptedPdgCodeParticleforAcceptanceCut=0; +// Check the geometrical acceptance for particle. + + Bool_t check ; + Int_t numberOfPdgCodeParticleforAcceptanceCut = 0; + Int_t numberOfAcceptedPdgCodeParticleforAcceptanceCut = 0; TParticle * particle; Int_t i; - for (i=0; iAt(i); if( TMath::Abs( particle->GetPdgCode() ) == TMath::Abs( fPdgCodeParticleforAcceptanceCut ) ) { - NumberOfPdgCodeParticleforAcceptanceCut++; - if (fGeometryAcceptance->Impact(particle)) NumberOfAcceptedPdgCodeParticleforAcceptanceCut++; + numberOfPdgCodeParticleforAcceptanceCut++; + if (fGeometryAcceptance->Impact(particle)) numberOfAcceptedPdgCodeParticleforAcceptanceCut++; } } - if ( NumberOfAcceptedPdgCodeParticleforAcceptanceCut > (fNumberOfAcceptedParticles-1) ) - Check = kTRUE; + if ( numberOfAcceptedPdgCodeParticleforAcceptanceCut > (fNumberOfAcceptedParticles-1) ) + check = kTRUE; else - Check = kFALSE; + check = kFALSE; - return Check; + return check; } Int_t AliGenMC::CheckPDGCode(Int_t pdgcode) const @@ -306,16 +365,16 @@ void AliGenMC::Boost() // Double_t beta = TMath::TanH(fDyBoost); - Double_t gamma = 1./TMath::Sqrt(1.-beta*beta); + Double_t gamma = 1./TMath::Sqrt((1.-beta)*(1.+beta)); Double_t gb = gamma * beta; // printf("\n Boosting particles to lab frame %f %f %f", fDyBoost, beta, gamma); Int_t i; - Int_t np = fParticles->GetEntriesFast(); + Int_t np = fParticles.GetEntriesFast(); for (i = 0; i < np; i++) { - TParticle* iparticle = (TParticle*) fParticles->At(i); + TParticle* iparticle = (TParticle*) fParticles.At(i); Double_t e = iparticle->Energy(); Double_t px = iparticle->Px(); @@ -329,21 +388,12 @@ void AliGenMC::Boost() } } - - -AliGenMC& AliGenMC::operator=(const AliGenMC& rhs) -{ -// Assignment operator - rhs.Copy(*this); - return *this; -} - -void AliGenMC::Copy(AliGenMC&) const +void AliGenMC::AddHeader(AliGenEventHeader* header) { - // - // Copy - // - Fatal("Copy","Not implemented!\n"); + // Passes header either to the container or to gAlice + if (fContainer) { + fContainer->AddHeader(header); + } else { + gAlice->SetGenEventHeader(header); + } } - -