X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliESDInputHandler.cxx;h=d2ab9338d029a98147b563c9dbd71b1575fbf985;hb=dd5ac86bb4a9188a3628c3a4f5b6271240233c8e;hp=1b3459bbdda9aae75b2a3c48882676ad7dafbe0c;hpb=13054f41ea92053a180f339d8f8d9b0f654acefe;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliESDInputHandler.cxx b/STEER/AliESDInputHandler.cxx index 1b3459bbdda..d2ab9338d02 100644 --- a/STEER/AliESDInputHandler.cxx +++ b/STEER/AliESDInputHandler.cxx @@ -21,17 +21,39 @@ //------------------------------------------------------------------------- #include +#include +#include +#include +#include +#include +#include +#include +#include #include "AliESDInputHandler.h" #include "AliESDEvent.h" #include "AliESD.h" +#include "AliRunTag.h" +#include "AliEventTag.h" +#include "AliLog.h" ClassImp(AliESDInputHandler) +static Option_t *gESDDataType = "ESD"; + //______________________________________________________________________________ -AliESDInputHandler::AliESDInputHandler(): - AliInputEventHandler(), - fEvent(0) +AliESDInputHandler::AliESDInputHandler() : + AliInputEventHandler(), + fEvent(0x0), + fAnalysisType(0), + fNEvents(0), + fHLTEvent(0x0), + fHLTTree(0x0), + fUseHLT(kFALSE), + fUseTags(kFALSE), + fChainT(0), + fTreeT(0), + fRunTag(0) { // default constructor } @@ -39,32 +61,173 @@ AliESDInputHandler::AliESDInputHandler(): //______________________________________________________________________________ AliESDInputHandler::~AliESDInputHandler() { -// destructor + // destructor + // delete fEvent; } //______________________________________________________________________________ AliESDInputHandler::AliESDInputHandler(const char* name, const char* title): - AliInputEventHandler(name, title) + AliInputEventHandler(name, title), fEvent(0x0), fAnalysisType(0), + fNEvents(0), fHLTEvent(0x0), fHLTTree(0x0), fUseHLT(kFALSE), fUseTags(kFALSE), fChainT(0), fTreeT(0), fRunTag(0) { + // Constructor } -Bool_t AliESDInputHandler::InitIO(Option_t* /*opt*/) +Bool_t AliESDInputHandler::Init(TTree* tree, Option_t* opt) { + // Initialisation necessary for each new tree + fAnalysisType = opt; + fTree = tree; + if (!fTree) return kFALSE; + fTree->GetEntry(0); + // Get pointer to ESD event - fEvent = new AliESDEvent(); + SwitchOffBranches(); + SwitchOnBranches(); + + if (!fEvent) fEvent = new AliESDEvent(); fEvent->ReadFromTree(fTree); + fNEvents = fTree->GetEntries(); + + return kTRUE; } -Bool_t AliESDInputHandler::BeginEvent(Long64_t /*entry*/) +Bool_t AliESDInputHandler::BeginEvent(Long64_t entry) { // Copy from old to new format if necessary - AliESD* old = ((AliESDEvent*) fEvent)->GetAliESDOld(); - if (old) { + AliESD* old = ((AliESDEvent*) fEvent)->GetAliESDOld(); + if (old) { ((AliESDEvent*)fEvent)->CopyFromOldESD(); old->Reset(); + } + + if (fHLTTree) { + fHLTTree->GetEntry(entry); + } + + return kTRUE; +} + +Bool_t AliESDInputHandler::FinishEvent() +{ + // Finish the event + if(fEvent)fEvent->Reset(); + return kTRUE; +} + +Bool_t AliESDInputHandler::Notify(const char* path) +{ + // Notify a directory change + AliInfo(Form("Directory change %s \n", path)); + // + if (fUseHLT) { + // Get HLTesdTree from current file + TTree* cTree = fTree; + if (fTree->GetTree()) cTree = fTree->GetTree(); + TFile* cFile = cTree->GetCurrentFile(); + cFile->GetObject("HLTesdTree", fHLTTree); + + if (fHLTTree) { + if (!fHLTEvent) fHLTEvent = new AliESDEvent(); + fHLTEvent->ReadFromTree(fHLTTree); + } + } + + if (!fUseTags) return (kTRUE); + + Bool_t zip = kFALSE; + + TString fileName(path); + if(fileName.Contains("#AliESDs.root")){ + zip = kTRUE; + } + else if (fileName.Contains("AliESDs.root")){ + fileName.ReplaceAll("AliESDs.root", ""); + } + else if(fileName.Contains("#AliAOD.root")){ + zip = kTRUE; + } + else if(fileName.Contains("AliAOD.root")){ + fileName.ReplaceAll("AliAOD.root", ""); + } + else if(fileName.Contains("#galice.root")){ + // For running with galice and kinematics alone... + zip = kTRUE; } + else if(fileName.Contains("galice.root")){ + // For running with galice and kinematics alone... + fileName.ReplaceAll("galice.root", ""); + } + + + TString pathName("./"); + if (fileName.Length() != 0) { + pathName = fileName; + } + + printf("AliESDInputHandler::Notify() Path: %s\n", pathName.Data()); + + if (fRunTag) { + fRunTag->Clear(); + } else { + fRunTag = new AliRunTag(); + } + + delete fTreeT; fTreeT = 0; + + if (fChainT) { + delete fChainT; + fChainT = 0; + } + + if (!fChainT) { + fChainT = new TChain("T"); + } + + + + const char* tagPattern = "ESD.tag.root"; + const char* name = 0x0; + TString tagFilename; + if (zip) { + TFile* file = fTree->GetCurrentFile(); + TArchiveFile* arch = file->GetArchive(); + TObjArray* arr = arch->GetMembers(); + TIter next(arr); + + while ((file = (TFile*) next())) { + name = file->GetName(); + if (strstr(name,tagPattern)) { + tagFilename = pathName.Data(); + tagFilename += "#"; + tagFilename += name; + fChainT->Add(tagFilename); + AliInfo(Form("Adding %s to tag chain \n", tagFilename.Data())); + }//pattern check + } // archive file loop + } else { + void * dirp = gSystem->OpenDirectory(pathName.Data()); + while((name = gSystem->GetDirEntry(dirp))) { + if (strstr(name,tagPattern)) { + tagFilename = pathName.Data(); + tagFilename += "/"; + tagFilename += name; + fChainT->Add(tagFilename); + AliInfo(Form("Adding %s to tag chain \n", tagFilename.Data())); + }//pattern check + }//directory loop + } + fChainT->SetBranchAddress("AliTAG",&fRunTag); + fChainT->GetEntry(0); return kTRUE; } + + +Option_t *AliESDInputHandler::GetDataType() const +{ +// Returns handled data type. + return gESDDataType; +}