Tools to separate injected signal in ESD and AOD
authormorsch <andreas.morsch@cern.ch>
Thu, 5 Jun 2014 11:59:18 +0000 (13:59 +0200)
committermorsch <andreas.morsch@cern.ch>
Thu, 5 Jun 2014 11:59:18 +0000 (13:59 +0200)
Leticia Cunqueiro Mendez <leticia.cunqueiro.mendez@cern.ch>

STEER/AOD/AliAODInputHandler.cxx
STEER/AOD/AliAODInputHandler.h
STEER/STEERBase/AliMCEvent.cxx
STEER/STEERBase/AliMCEvent.h
STEER/STEERBase/AliMCParticle.h
STEER/STEERBase/AliVHeader.h
STEER/STEERBase/AliVParticle.h

index 915b36e..f5112f0 100644 (file)
@@ -32,6 +32,7 @@
 #include "AliVCuts.h"
 #include "AliMCEvent.h"
 #include "AliAODpidUtil.h"
+#include "AliAODMCHeader.h"
 
 ClassImp(AliAODInputHandler)
 
@@ -136,6 +137,10 @@ Bool_t AliAODInputHandler::BeginEvent(Long64_t entry)
        if (!fMCEvent) fMCEvent = new AliMCEvent();
        fMCEvent->SetParticleArray(mcParticles);
     }
+
+    AliAODMCHeader* mcHeader = (AliAODMCHeader*) fEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
+      if(mcHeader) {
+      fMCEvent->SetExternalHeader(mcHeader);}
     // When merging, get current event number from GetReadEntry(), 
     // entry gives the events in the current file
     if (fTreeToMerge) fTreeToMerge->GetEntry(GetReadEntry() + fMergeOffset);
index 4fdb1c0..f00afbd 100644 (file)
@@ -13,6 +13,7 @@
 #include "AliInputEventHandler.h"
 #include "AliAODEvent.h"
 #include "AliMCEvent.h"
+#include "AliAODMCHeader.h"
 class TList;
 class AliMCEvent;
 class TH2F;
index 3c59ae6..83527a4 100644 (file)
@@ -49,6 +49,7 @@ AliMCEvent::AliMCEvent():
     fMCParticles(0),
     fMCParticleMap(0),
     fHeader(new AliHeader()),
+    fAODMCHeader(0),
     fTRBuffer(0),
     fTrackReferences(new TClonesArray("AliTrackReference", 1000)),
     fTreeTR(0),
@@ -72,6 +73,7 @@ AliMCEvent::AliMCEvent(const AliMCEvent& mcEvnt) :
     fMCParticles(mcEvnt.fMCParticles),
     fMCParticleMap(mcEvnt.fMCParticleMap),
     fHeader(mcEvnt.fHeader),
+    fAODMCHeader(mcEvnt.fAODMCHeader),
     fTRBuffer(mcEvnt.fTRBuffer),
     fTrackReferences(mcEvnt.fTrackReferences),
     fTreeTR(mcEvnt.fTreeTR),
@@ -496,7 +498,10 @@ AliVParticle* AliMCEvent::GetTrack(Int_t i) const
     //
 
     if (fExternal) {
+       
+  
        return ((AliVParticle*) (fMCParticles->At(i)));
+  
     }
     
     //
@@ -596,6 +601,8 @@ AliVParticle* AliMCEvent::GetTrack(Int_t i) const
     } else {
        mcParticle = dynamic_cast<AliMCParticle*>(fMCParticleMap->At(i));
     }
+
+    //Printf("mcParticleGetMother %d",mcParticle->GetMother());
     return mcParticle;
 }
 
@@ -806,54 +813,75 @@ Bool_t AliMCEvent::IsFromBGEvent(Int_t index)
 }
 
 
+    Int_t AliMCEvent::GetCocktailList(TList*& lh){
+    //gives the CocktailHeaders when reading ESDs/AODs (corresponding to fExteral=kFALSE/kTRUE)
+    //the AODMC header (and the aodmc array) is passed as an instance to MCEvent by the AliAODInputHandler
+    if(fExternal==kFALSE) { 
+    AliGenCocktailEventHeader* coHeader =dynamic_cast<AliGenCocktailEventHeader*> (GenEventHeader());
+    if(!coHeader) return 0;
+    lh=coHeader->GetHeaders();}
+    if(fExternal==kTRUE){ 
+    if(!fAODMCHeader) return 0;
+    lh=fAODMCHeader->GetCocktailHeaders();}
+    return 1;  }
 
 
 
-   TString AliMCEvent::GetGenerator(Int_t index){
-   Int_t nsumpart=0;
-   AliGenCocktailEventHeader* coHeader = 
-   dynamic_cast<AliGenCocktailEventHeader*> (GenEventHeader());
-   if(!coHeader) {TString noheader="nococktailheader";
-   return noheader;}
-   TList *lh=coHeader->GetHeaders();
-   Int_t nh=lh->GetEntries();
-   for(Int_t i=0;i<nh;i++){
-    AliGenEventHeader* gh=(AliGenEventHeader*)lh->At(i);
-    TString genname=gh->GetName();
-    Int_t npart=gh->NProduced();
-    if(index>=nsumpart && index<(nsumpart+npart)) return genname;
-    nsumpart+=npart;
-    }
+
+    TString AliMCEvent::GetGenerator(Int_t index){
+    Int_t nsumpart=0;
+     
+    TList* lh;
+    Int_t nt= GetCocktailList(lh);
+    if(nt==0){ TString noheader="nococktailheader";
+                                                 return noheader;}
+    Int_t nh=lh->GetEntries();
+    for(Int_t i=0;i<nh;i++){
+     AliGenEventHeader* gh=(AliGenEventHeader*)lh->At(i);
+     TString genname=gh->GetName();
+     Int_t npart=gh->NProduced();
+     if(index>=nsumpart && index<(nsumpart+npart)) return genname;
+     nsumpart+=npart;}
     TString empty="";
-    return empty;
-}
+    return empty;}
+
+
 
-Bool_t  AliMCEvent::GetCocktailGenerator(Int_t index,TString &nameGen){
+   Bool_t  AliMCEvent::GetCocktailGenerator(Int_t index,TString &nameGen){
   //method that gives the generator for a given particle with label index (or that of the corresponding primary)
-   nameGen=GetGenerator(index);
-   if(nameGen.Contains("nococktailheader") )return 0;
-   
-   while(nameGen.IsWhitespace()){
-     
-     AliMCParticle* mcpart = (AliMCParticle*) (GetTrack(index));
+  
+    nameGen=GetGenerator(index);
+    if(nameGen.Contains("nococktailheader") )return 0;
+    Int_t lab=index;
+
+    while(nameGen.IsWhitespace()){
+      
+      
+    AliVParticle* mcpart = (AliVParticle*) (GetTrack(lab));
+     if(!mcpart){
+      printf("AliMCEvent-BREAK: No valid AliMCParticle at label %i\n",lab);
+      break;}
+     Int_t mother=0;
+     mother = mcpart->GetMother();
    
-    if(!mcpart){
-      printf("AliMCEvent-BREAK: No valid AliMCParticle at label %i\n",index);
-      break;
-    }
-    Int_t mother = mcpart->GetMother();
     if(mother<0){
       printf("AliMCEvent - BREAK: Reached primary particle without valid mother\n");
       break;
     }
-    index=mother;
+      AliVParticle* mcmom = (AliVParticle*) (GetTrack(mother));
+      if(!mcmom){
+      printf("AliMCEvent-BREAK: No valid AliMCParticle mother at label %i\n",mother);
+       break;
+      }
+      lab=mother;
+   
     nameGen=GetGenerator(mother);
    }
    
    return 1;
-}
+   }
+
 
 
 
index 3e6cc19..6e99daf 100644 (file)
@@ -129,14 +129,17 @@ public:
     virtual Int_t     BgLabelToIndex(Int_t label);
     static  Int_t     BgLabelOffset() {return fgkBgLabelOffset;}
     virtual Bool_t    IsFromBGEvent(Int_t index);
-        TString  GetGenerator(Int_t index); 
-  Bool_t GetCocktailGenerator(Int_t index,TString &nameGen);
+    Int_t  GetCocktailList(TList*& lista);
+    TString  GetGenerator(Int_t index); 
+     Bool_t GetCocktailGenerator(Int_t index,TString &nameGen);
     virtual Bool_t    IsSecondaryFromWeakDecay(Int_t index);
     virtual Bool_t    IsSecondaryFromMaterial(Int_t index);
     // External particle array
     virtual void      SetParticleArray(TClonesArray* mcParticles) 
        {fMCParticles = mcParticles; fNparticles = fMCParticles->GetEntries(); fExternal = kTRUE;}
-    
+    //External Header 
+     virtual void SetExternalHeader(AliVHeader* aodmcHeader)
+       {fAODMCHeader=aodmcHeader;}  
   virtual AliGenEventHeader *FindHeader(Int_t ipart);
     //Following needed only for mixed event
   virtual Int_t        EventIndex(Int_t)       const {return 0;}
@@ -161,6 +164,7 @@ private:
     TClonesArray     *fMCParticles;      // Pointer to list of particles
     TObjArray        *fMCParticleMap;    // Map of MC Particles
     AliHeader        *fHeader;           // Current pointer to header
+    AliVHeader       *fAODMCHeader;      //Current pointer to AODMC header
     TClonesArray     *fTRBuffer;         // Track reference buffer    
     TClonesArray     *fTrackReferences;  // Array of track references
     TTree            *fTreeTR;           // Pointer to Track Reference Tree
index 1dd3662..8639f05 100644 (file)
@@ -68,7 +68,7 @@ public:
     // "Trackable" criteria
     Float_t  GetTPCTrackLength(Float_t bz, Float_t ptmin, Int_t &counter, Float_t deadWidth, Float_t zMax=230. );
     // Navigation
-    Int_t GetMother()        const {return fMother;}
+    virtual Int_t GetMother()        const {return fMother;}
     Int_t GetFirstDaughter() const {return fFirstDaughter;}
     Int_t GetLastDaughter()  const {return fLastDaughter;}
     void  SetMother(Int_t idx)        {fMother        = idx;}
index 009d1a8..7baa771 100644 (file)
@@ -11,7 +11,7 @@
 //-------------------------------------------------------------------------
 
 #include <TNamed.h>
-
+class TList;
 class AliVHeader : public TNamed {
 
  public :
@@ -26,7 +26,7 @@ class AliVHeader : public TNamed {
   virtual ULong64_t GetTriggerMask()        const = 0;
   virtual UChar_t   GetTriggerCluster()     const = 0;
   virtual UInt_t    GetEventType()          const = 0;
-  
+  virtual TList*    GetCocktailHeaders()    {return 0;}
   /*
   virtual void SetBunchCrossNumber(UShort_t nBx)   = 0;
   virtual void SetOrbitNumber(UInt_t nOr)          = 0;
index d2db029..df60599 100644 (file)
@@ -74,14 +74,15 @@ public:
    *  @return     always kTRUE;
    */
   Bool_t IsSortable() const  { return kTRUE; }
-
+  
 
   // coordinate system conversions
   Bool_t   Local2GlobalMomentum(Double_t p[3], Double_t alpha) const;
   Bool_t   Local2GlobalPosition(Double_t r[3], Double_t alpha) const;
   Bool_t   Global2LocalMomentum(Double_t p[3], Short_t charge, Double_t &alpha) const;
   Bool_t   Global2LocalPosition(Double_t r[3], Double_t alpha) const;
-
+  //Navigation
+  virtual Int_t GetMother()   const {return -1;}
   
 
   ClassDef(AliVParticle, 3)  // base class for particles