]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVGEN/AliGenMC.cxx
dynamic cast replaced by static cast in order to avoid undefined reference to typinfo...
[u/mrichter/AliRoot.git] / EVGEN / AliGenMC.cxx
index 63872c8f7e4641cc375410e7fef7f16d4e81efb6..61166d587fc9384b0eeeaa3a78f464213487a6b7 100644 (file)
 #include <TParticle.h>
 
 #include "AliGenMC.h"
+#include "AliRun.h"
 #include "AliGeometry.h"
 
 ClassImp(AliGenMC)
 
 AliGenMC::AliGenMC()
     :AliGenerator(),
-     fParticles(0),
+     fParticles("TParticle", 1000),
      fParentSelect(8),
      fChildSelect(8),
      fCutOnChild(0),
@@ -60,14 +61,16 @@ AliGenMC::AliGenMC()
      fDyBoost(0.),
      fGeometryAcceptance(0),
      fPdgCodeParticleforAcceptanceCut(0),
-     fNumberOfAcceptedParticles(2)
+     fNumberOfAcceptedParticles(0),
+     fNprimaries(0),
+     fEnergyCMS(0)
 {
 // Default Constructor
 }
 
 AliGenMC::AliGenMC(Int_t npart)
     :AliGenerator(npart),
-     fParticles(0),
+     fParticles("TParticle", 1000),
      fParentSelect(8),
      fChildSelect(8),
      fCutOnChild(0),
@@ -94,48 +97,15 @@ AliGenMC::AliGenMC(Int_t npart)
      fDyBoost(0.),
      fGeometryAcceptance(0),
      fPdgCodeParticleforAcceptanceCut(0),
-     fNumberOfAcceptedParticles(2)
+     fNumberOfAcceptedParticles(0),
+     fNprimaries(0),
+     fEnergyCMS(0)
 {
 //  Constructor
 // 
     for (Int_t i=0; i<8; i++) fParentSelect[i]=fChildSelect[i]=0;
 }
 
-AliGenMC::AliGenMC(const AliGenMC & mc):
-    AliGenerator(mc),
-    fParticles(0),
-    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),
-    fAProjectile(1),
-    fZProjectile(1),
-    fATarget(1),
-    fZTarget(1),
-    fProjectile("P"),
-    fTarget("P"),    
-    fDyBoost(0.),
-    fGeometryAcceptance(0),
-    fPdgCodeParticleforAcceptanceCut(0),
-    fNumberOfAcceptedParticles(2)
-{
-// Copy constructor
-    mc.Copy(*this);
-}
-
 AliGenMC::~AliGenMC()
 {
 // Destructor
@@ -146,6 +116,7 @@ void AliGenMC::Init()
 //
 //  Initialization
     switch (fForceDecay) {
+    case kBSemiElectronic:
     case kSemiElectronic:
     case kDiElectron:
     case kBJpsiDiElectron:
@@ -153,6 +124,7 @@ void AliGenMC::Init()
        fChildSelect[0] = kElectron;    
        break;
     case kHardMuons:   
+    case kBSemiMuonic:
     case kSemiMuonic:
     case kDiMuon:
     case kBJpsiDiMuon:
@@ -162,11 +134,13 @@ void AliGenMC::Init()
     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;
@@ -174,12 +148,23 @@ void AliGenMC::Init()
        fChildSelect[0]=kKPlus;
        break;
     case kBJpsi:
-       fChildSelect[0]=443;
+       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;
     }
 
@@ -214,14 +199,14 @@ 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  e    = particle->Energy();
+    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 y, y0;
 
@@ -384,10 +369,10 @@ void AliGenMC::Boost()
     //    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();
@@ -401,21 +386,12 @@ void AliGenMC::Boost()
     }
 }
 
-
-         
-AliGenMC& AliGenMC::operator=(const  AliGenMC& rhs)
-{
-// Assignment operator
-    rhs.Copy(*this);
-    return *this;
-}
-
-void AliGenMC::Copy(TObject&) 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);      
+    }
 }
-
-