AliInputEventHandler(),
fEvent(0),
fMCEvent(new AliMCEvent()),
- fFriends(new TList())
+ fFriends(new TList()),
+ fMergeEvents(kFALSE),
+ fFileToMerge(0),
+ fTreeToMerge(0),
+ fAODEventToMerge(0)
{
// Default constructor
}
AliInputEventHandler(name, title),
fEvent(0),
fMCEvent(new AliMCEvent()),
- fFriends(new TList())
+ fFriends(new TList()),
+ fMergeEvents(kFALSE),
+ fFileToMerge(0),
+ fTreeToMerge(0),
+ fAODEventToMerge(0)
{
// Constructor
}
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();
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;
}
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);
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