From 9aea846992086a3e58fe842af8a9592aace63eaf Mon Sep 17 00:00:00 2001 From: morsch Date: Mon, 6 Aug 2007 20:33:35 +0000 Subject: [PATCH] Support for events distributed over several files. --- STEER/AliMCEventHandler.cxx | 80 ++++++++++++++++++++++++++++++++----- STEER/AliMCEventHandler.h | 6 +++ 2 files changed, 76 insertions(+), 10 deletions(-) diff --git a/STEER/AliMCEventHandler.cxx b/STEER/AliMCEventHandler.cxx index 2bc956f771b..84b4b5c001e 100644 --- a/STEER/AliMCEventHandler.cxx +++ b/STEER/AliMCEventHandler.cxx @@ -60,7 +60,10 @@ AliMCEventHandler::AliMCEventHandler() : fEvent(-1), fNprimaries(-1), fNparticles(-1), - fPathName("./") + fPathName("./"), + fExtension(""), + fFileNumber(0), + fEventsPerFile(0) { // Default constructor } @@ -82,7 +85,10 @@ AliMCEventHandler::AliMCEventHandler(const char* name, const char* title) : fEvent(-1), fNprimaries(-1), fNparticles(-1), - fPathName("./") + fPathName("./"), + fExtension(""), + fFileNumber(0), + fEventsPerFile(0) { // Constructor } @@ -106,32 +112,46 @@ Bool_t AliMCEventHandler::InitIO(Option_t* /*opt*/) fNEvent = fTreeE->GetEntries(); // // Tree K - fFileK = new TFile(Form("%sKinematics.root", fPathName)); + fFileK = new TFile(Form("%sKinematics%s.root", fPathName, fExtension)); if (!fFileK) printf("AliMCEventHandler:Kinematics.root not found in directory %s ! \n", fPathName); + fEventsPerFile = fFileK->GetNkeys() - fFileK->GetNProcessIDs(); // // Tree TR - fFileTR = new TFile(Form("%sTrackRefs.root", fPathName)); + fFileTR = new TFile(Form("%sTrackRefs%s.root", fPathName, fExtension)); if (!fFileTR) printf("AliMCEventHandler:TrackRefs.root not found in directory %s ! \n", fPathName); // // Reset the event number fEvent = -1; + fFileNumber = 0; + printf("AliMCEventHandler:Number of events in this directory %5d \n", fNEvent); return kTRUE; } -Bool_t AliMCEventHandler::BeginEvent() -{ - // Read the next event - fEvent++; +Bool_t AliMCEventHandler::GetEvent(Int_t iev) +{ + // Load the event number iev + Int_t inew = iev/fEventsPerFile; + if (inew != fFileNumber) { + fFileNumber = inew; + if (!OpenFile(fFileNumber)){ + return kFALSE; + } + } + char folder[20]; - sprintf(folder, "Event%d", fEvent); + sprintf(folder, "Event%d", iev); // TreeE - fTreeE->GetEntry(fEvent); + fTreeE->GetEntry(iev); fStack = fHeader->Stack(); // Tree K TDirectoryFile* dirK = 0; fFileK->GetObject(folder, dirK); + if (!dirK) { + printf("AliMCEventHandler: Event #%5d not found\n", iev); + return kFALSE; + } dirK->GetObject("TreeK", fTreeK); fStack->ConnectTree(fTreeK); fStack->GetEvent(); @@ -153,6 +173,46 @@ Bool_t AliMCEventHandler::BeginEvent() printf("AliMCEventHandler: Event#: %5d Number of particles %5d \n", fEvent, fNparticles); return kTRUE; + +} + +Bool_t AliMCEventHandler::OpenFile(Int_t i) +{ + // Open file i + Bool_t ok = kTRUE; + if (i > 0) { + fExtension = Form("%d", i); + } else { + fExtension = ""; + } + + + delete fFileK; + fFileK = new TFile(Form("%sKinematics%s.root", fPathName, fExtension)); + if (!fFileK) { + printf("AliMCEventHandler:Kinematics%s.root not found in directory %s ! \n", fExtension, fPathName); + ok = kFALSE; + } + + delete fFileTR; + fFileTR = new TFile(Form("%sTrackRefs%s.root", fPathName, fExtension)); + if (!fFileTR) { + printf("AliMCEventHandler:TrackRefs%s.root not found in directory %s ! \n", fExtension, fPathName); + ok = kFALSE; + } + + return ok; +} + +Bool_t AliMCEventHandler::BeginEvent() +{ + // Read the next event + fEvent++; + if (fEvent >= fNEvent) { + printf("AliMCEventHandler: Event number out of range %5d\n", fEvent); + return kFALSE; + } + return GetEvent(fEvent); } Int_t AliMCEventHandler::GetParticleAndTR(Int_t i, TParticle*& particle, TClonesArray*& trefs) diff --git a/STEER/AliMCEventHandler.h b/STEER/AliMCEventHandler.h index b61b4bde3a9..72c90cea7d5 100644 --- a/STEER/AliMCEventHandler.h +++ b/STEER/AliMCEventHandler.h @@ -42,12 +42,15 @@ public: virtual Bool_t Terminate(); virtual Bool_t TerminateIO(); virtual void ResetIO(); + virtual Bool_t GetEvent(Int_t iev); + // AliStack* Stack() {return fStack;} TTree* TreeTR() {return fTreeTR;} Int_t GetParticleAndTR(Int_t i, TParticle*& particle, TClonesArray*& trefs); void DrawCheck(Int_t i, Bool_t search=kFALSE); private: + Bool_t OpenFile(Int_t i); void ReorderAndExpandTreeTR(); private: @@ -67,6 +70,9 @@ private: Int_t fNprimaries; //! Number of primaries Int_t fNparticles; //! Number of particles char *fPathName; //! Input file path + char *fExtension; //! File name extension + Int_t fFileNumber; //! Input file number + Int_t fEventsPerFile; //! Number of events per file ClassDef(AliMCEventHandler,1) //MC Truth EventHandler class }; #endif -- 2.43.0