]> 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 914ee1c59ec33a5d7478b8bf4ac2a8df845e7ee1..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,7 +97,9 @@ AliGenMC::AliGenMC(Int_t npart)
      fDyBoost(0.),
      fGeometryAcceptance(0),
      fPdgCodeParticleforAcceptanceCut(0),
-     fNumberOfAcceptedParticles(2)
+     fNumberOfAcceptedParticles(0),
+     fNprimaries(0),
+     fEnergyCMS(0)
 {
 //  Constructor
 // 
@@ -129,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;
@@ -141,8 +148,17 @@ 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:
@@ -183,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;
 
@@ -353,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();
@@ -369,3 +385,13 @@ void AliGenMC::Boost()
        iparticle->SetMomentum(px, py, pzb, eb);
     }
 }
+
+void AliGenMC::AddHeader(AliGenEventHeader* header)
+{
+    // Passes header either to the container or to gAlice
+    if (fContainer) {
+       fContainer->AddHeader(header);
+    } else {
+       gAlice->SetGenEventHeader(header);      
+    }
+}