]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - JETAN/AliJetKineReader.cxx
HLTsim version check now less restrictive, print warning instead of error and proceed.
[u/mrichter/AliRoot.git] / JETAN / AliJetKineReader.cxx
index 318f4d5255aaffab37e052a48c500dc1f21a47d7..a957076844fce24f506ddceab98a783417fc828e 100644 (file)
@@ -30,6 +30,7 @@
 #include <TRandom.h>
 // From AliRoot ...
 #include "AliAODJet.h"
+#include "AliPDG.h"
 #include "AliJetKineReaderHeader.h"
 #include "AliJetKineReader.h"
 #include "AliMCEventHandler.h"
@@ -44,7 +45,7 @@ ClassImp(AliJetKineReader)
 AliJetKineReader::AliJetKineReader():
     AliJetReader(),  
     fAliHeader(0),
-    fMCEventHandler(0),
+    fMCEvent(0),
     fGenJets(0)
 {
   // Default constructor
@@ -55,7 +56,10 @@ AliJetKineReader::AliJetKineReader():
 AliJetKineReader::~AliJetKineReader()
 {
   // Destructor
-  delete fAliHeader;
+    if (fAliHeader) {
+       delete fAliHeader;
+       fAliHeader = 0;
+    }
 }
 
 //____________________________________________________________________________
@@ -79,7 +83,7 @@ Bool_t AliJetKineReader::FillMomentumArray()
   
     ClearArray();
     // Get the stack
-    AliStack* stack = fMCEventHandler->MCEvent()->Stack();
+    AliStack* stack = fMCEvent->Stack();
     // Number of primaries
     Int_t nt = stack->GetNprimary();
       
@@ -87,7 +91,7 @@ Bool_t AliJetKineReader::FillMomentumArray()
     Double_t ptMin = ((AliJetKineReaderHeader*) fReaderHeader)->GetPtCut();
     Float_t etaMin = fReaderHeader->GetFiducialEtaMin();
     Float_t etaMax = fReaderHeader->GetFiducialEtaMax();  
-    fAliHeader = fMCEventHandler->MCEvent()->Header();
+    fAliHeader = fMCEvent->Header();
       
     
     TLorentzVector p4;
@@ -140,7 +144,23 @@ Bool_t AliJetKineReader::FillMomentumArray()
        Float_t px = r * part->Px(); 
        Float_t py = r * part->Py(); 
        Float_t pz = r * part->Pz();
-       Float_t m  = part->GetMass();
+       TParticlePDG *pPDG = part->GetPDG();
+       Float_t m = 0;
+       if(!pPDG){
+         // this is very rare...
+         // Is avoided by AliPDG::AddParticlesToPdgDataBase();
+         // but this should be called only once... (how in proof?)
+         // Calucluate mass with unsmeared momentum values
+         m  = part->Energy()*part->Energy() - 
+           (px * px + py * py + pz * pz)/r/r; 
+         if(m>0)m = TMath::Sqrt(m);
+         else m = 0;
+         AliInfo(Form("Unknown Particle using %d calculated mass m = %3.3f",part->GetPdgCode(),m));
+
+       }
+       else{
+         m  = pPDG->Mass();
+       }
        Float_t e  = TMath::Sqrt(px * px + py * py + pz * pz + m * m);
        p4 = TLorentzVector(px, py, pz, e);
        if ( (p4.Eta()>etaMax) || (p4.Eta()<etaMin)) continue;
@@ -156,7 +176,7 @@ Bool_t AliJetKineReader::FillMomentumArray()
 // set the signal flags
     fSignalFlag.Set(goodTrack, sflag);
     fCutFlag.Set(goodTrack, cflag);
-    AliInfo(Form("\n Number of good tracks %d \n", goodTrack));
+    AliInfo(Form(" Number of good tracks %d \n", goodTrack));
     
     delete[] sflag;
     delete[] cflag;
@@ -251,5 +271,5 @@ TClonesArray*  AliJetKineReader::GetGeneratedJets()
 void AliJetKineReader::SetInputEvent(TObject* /*esd*/, TObject* /*aod*/, TObject* mc)
 {
     // Connect the input event
-    fMCEventHandler = (AliMCEventHandler*) mc;
+    fMCEvent = (AliMCEvent*) mc;
 }