X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliAODInputHandler.cxx;h=5b969abfbe7849d1d4edfc73f338235dd25abf33;hb=a5856bc0ef9f1a86f34a9402efa310102c944a57;hp=958e6119ef593e6d485afa07fc385521c82c8044;hpb=2677201510b84537e7a170051d418712053986b6;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliAODInputHandler.cxx b/STEER/AliAODInputHandler.cxx index 958e6119ef5..5b969abfbe7 100644 --- a/STEER/AliAODInputHandler.cxx +++ b/STEER/AliAODInputHandler.cxx @@ -23,17 +23,26 @@ #include #include #include +#include #include "AliAODInputHandler.h" #include "AliAODEvent.h" ClassImp(AliAODInputHandler) +static Option_t *gAODDataType = "AOD"; + //______________________________________________________________________________ AliAODInputHandler::AliAODInputHandler() : AliInputEventHandler(), fEvent(0), - fFriends(new TList()) + fMCEvent(new AliMCEvent()), + fFriends(new TList()), + fMergeEvents(kFALSE), + fFileToMerge(0), + fTreeToMerge(0), + fAODEventToMerge(0), + fMergeOffset(0) { // Default constructor } @@ -42,7 +51,13 @@ AliAODInputHandler::AliAODInputHandler() : AliAODInputHandler::AliAODInputHandler(const char* name, const char* title): AliInputEventHandler(name, title), fEvent(0), - fFriends(new TList()) + fMCEvent(new AliMCEvent()), + fFriends(new TList()), + fMergeEvents(kFALSE), + fFileToMerge(0), + fTreeToMerge(0), + fAODEventToMerge(0), + fMergeOffset(0) { // Constructor } @@ -58,22 +73,62 @@ AliAODInputHandler::~AliAODInputHandler() Bool_t AliAODInputHandler::Init(TTree* tree, Option_t* /*opt*/) { // Initialisation necessary for each new tree - fTree = tree; - TIter next(fFriends); - TNamed* obj; - while(obj = (TNamed*)next()) { - fTree->AddFriend("aodTree", obj->GetName()); + 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); + } } - if (!fTree) return kFALSE; + + + + SwitchOffBranches(); + SwitchOnBranches(); + // Get pointer to AOD event - if (fEvent) { - delete fEvent; - fEvent = 0; - } - fEvent = new AliAODEvent(); + if (!fEvent) fEvent = new AliAODEvent(); fEvent->ReadFromTree(fTree); + + return kTRUE; +} + +Bool_t AliAODInputHandler::BeginEvent(Long64_t entry) +{ + // + TClonesArray* mcParticles = (TClonesArray*) (fEvent->FindListObject("mcparticles")); + if (mcParticles) fMCEvent->SetParticleArray(mcParticles); + if (fTreeToMerge) fTreeToMerge->GetEntry(entry + fMergeOffset); + return kTRUE; } @@ -83,3 +138,9 @@ void AliAODInputHandler::AddFriend(char* filename) TNamed* obj = new TNamed(filename, filename); fFriends->Add(obj); } + +Option_t *AliAODInputHandler::GetDataType() const +{ +// Returns handled data type. + return gAODDataType; +}