]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Provisions for AOD merging.
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 18 Sep 2009 09:07:09 +0000 (09:07 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 18 Sep 2009 09:07:09 +0000 (09:07 +0000)
STEER/AliAODInputHandler.cxx
STEER/AliAODInputHandler.h

index 6729a318a20c5c0b98dc1a59723e86e2bb8c5611..ced28bdbab2641a1e49821e074c41b970cdffd7f 100644 (file)
@@ -37,7 +37,11 @@ AliAODInputHandler::AliAODInputHandler() :
     AliInputEventHandler(),
     fEvent(0),
     fMCEvent(new AliMCEvent()),
-    fFriends(new TList())
+    fFriends(new TList()),
+    fMergeEvents(kFALSE),
+    fFileToMerge(0),
+    fTreeToMerge(0),
+    fAODEventToMerge(0)
 {
   // Default constructor
 }
@@ -47,7 +51,11 @@ AliAODInputHandler::AliAODInputHandler(const char* name, const char* title):
   AliInputEventHandler(name, title),
   fEvent(0),
   fMCEvent(new AliMCEvent()),
-  fFriends(new TList())
+  fFriends(new TList()),
+  fMergeEvents(kFALSE),
+  fFileToMerge(0),
+  fTreeToMerge(0),
+  fAODEventToMerge(0)
 {
     // Constructor
 }
@@ -63,29 +71,42 @@ AliAODInputHandler::~AliAODInputHandler()
 Bool_t AliAODInputHandler::Init(TTree* tree, Option_t* /*opt*/)
 {
     // Initialisation necessary for each new tree
-    fTree = tree;
-    TIter next(fFriends);
-    TNamed* obj;
-    if (!fTree) return kFALSE;
-    fTree->GetEntry(0);
-    TString aodTreeFName,aodFriendTreeFName;
-
-    while((obj = (TNamed*)next())) {
-       if (fTree->GetTree()) {
-         aodTreeFName = (fTree->GetTree()->GetCurrentFile())->GetName();
-         aodFriendTreeFName = aodTreeFName;
-         aodFriendTreeFName.ReplaceAll("AliAOD.root",obj->GetName());
-         aodFriendTreeFName.ReplaceAll("AliAODs.root",obj->GetName());
-         (fTree->GetTree())->AddFriend("aodTree", aodFriendTreeFName.Data());
-       } else {
-           aodTreeFName = (fTree->GetCurrentFile())->GetName();
-           aodFriendTreeFName = aodTreeFName;
-           aodFriendTreeFName.ReplaceAll("AliAOD.root",obj->GetName());
-           aodFriendTreeFName.ReplaceAll("AliAODs.root",obj->GetName());
-           fTree->AddFriend("aodTree", aodFriendTreeFName.Data());
+    if (!fMergeEvents) {
+       fTree = tree;
+       TIter next(fFriends);
+       TNamed* obj;
+       
+       if (!fTree) return kFALSE;
+       fTree->GetEntry(0);
+       TString aodTreeFName,aodFriendTreeFName;
+       
+       while((obj = (TNamed*)next())) {
+           if (fTree->GetTree()) {
+               aodTreeFName = (fTree->GetTree()->GetCurrentFile())->GetName();
+               aodFriendTreeFName = aodTreeFName;
+               aodFriendTreeFName.ReplaceAll("AliAOD.root",obj->GetName());
+               aodFriendTreeFName.ReplaceAll("AliAODs.root",obj->GetName());
+               (fTree->GetTree())->AddFriend("aodTree", aodFriendTreeFName.Data());
+           } else {
+               aodTreeFName = (fTree->GetCurrentFile())->GetName();
+               aodFriendTreeFName = aodTreeFName;
+               aodFriendTreeFName.ReplaceAll("AliAOD.root",obj->GetName());
+               aodFriendTreeFName.ReplaceAll("AliAODs.root",obj->GetName());
+               fTree->AddFriend("aodTree", aodFriendTreeFName.Data());
+           }
+       }
+    } else {
+       // Friends have to be merged
+       TNamed* filename = (TNamed*) (fFriends->At(0));
+       fFileToMerge = new TFile(filename->GetName());
+       if (fFileToMerge) {
+           fFileToMerge->GetObject("aodTree", fTreeToMerge);
+           if (!fAODEventToMerge) fAODEventToMerge = new AliAODEvent();
+           fAODEventToMerge->ReadFromTree(fTreeToMerge);
        }
     }
+    
+    
  
 
     SwitchOffBranches();
@@ -99,11 +120,13 @@ Bool_t AliAODInputHandler::Init(TTree* tree, Option_t* /*opt*/)
     return kTRUE;
 }
 
-Bool_t AliAODInputHandler::BeginEvent(Long64_t /*entry*/)
+Bool_t AliAODInputHandler::BeginEvent(Long64_t entry)
 {
     //
     TClonesArray* mcParticles = (TClonesArray*) (fEvent->FindListObject("mcparticles"));
     if (mcParticles) fMCEvent->SetParticleArray(mcParticles);
+    if (fTreeToMerge) fTreeToMerge->GetEntry(entry);
+    
     return kTRUE;
 }
 
index a69e207f3640863231eb3a6ba62042f0ca09380f..57d91f5b25e1eac256061d48f86773d578247d19 100644 (file)
@@ -30,6 +30,10 @@ class AliAODInputHandler : public AliInputEventHandler {
     virtual void         AddFriend(char* filename);
     virtual Bool_t       BeginEvent(Long64_t entry);
     Option_t            *GetDataType() const;
+    // Provisions for event merging
+    void                 SetMergeEvents(Bool_t flag) {fMergeEvents = flag;}
+    Bool_t               GetMergeEvents() const {return fMergeEvents;}
+    AliAODEvent*         GetEventToMerge() {return fAODEventToMerge;}
  private:
     AliAODInputHandler(const AliAODInputHandler& handler);             
     AliAODInputHandler& operator=(const AliAODInputHandler& handler);  
@@ -37,7 +41,12 @@ class AliAODInputHandler : public AliInputEventHandler {
     AliAODEvent    *fEvent;   //! Pointer to the event
     AliMCEvent     *fMCEvent; //! Pointer to the MCEvent
     TList          *fFriends; //  List of friend trees 
-    ClassDef(AliAODInputHandler, 1);
+// Support for merged events
+    Bool_t          fMergeEvents;     // Flag for event merging
+    TFile          *fFileToMerge;     //! File for merging
+    TTree          *fTreeToMerge;     //! Tree for merging
+    AliAODEvent    *fAODEventToMerge; //! Event for merging
+    ClassDef(AliAODInputHandler, 2);
 };
 
 #endif