X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=sidebyside;f=STEER%2FAliESDInputHandler.cxx;h=29705f41c71edc3dcb4a006e9af2dcc14f98b6cd;hb=1e122ba8ea49d0934052b7fba98235f2f440c60d;hp=e6e86712113532dc89cc2ea67fedb283c39b6e17;hpb=e12e402cf3b354ce4969ac344fa5ac493ad4875f;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliESDInputHandler.cxx b/STEER/AliESDInputHandler.cxx index e6e86712113..29705f41c71 100644 --- a/STEER/AliESDInputHandler.cxx +++ b/STEER/AliESDInputHandler.cxx @@ -21,6 +21,11 @@ //------------------------------------------------------------------------- #include +#include +#include +#include +#include +#include #include #include #include @@ -28,16 +33,26 @@ #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(0x0), fBranches(""), - fBranchesOn("") + fBranchesOn(""), + fAnalysisType(0), + fNEvents(0), + fUseTags(kFALSE), + fChainT(0), + fTreeT(0), + fRunTag(0) { // default constructor } @@ -45,21 +60,23 @@ AliESDInputHandler::AliESDInputHandler() : //______________________________________________________________________________ AliESDInputHandler::~AliESDInputHandler() { - // destructor + // destructor // delete fEvent; } //______________________________________________________________________________ AliESDInputHandler::AliESDInputHandler(const char* name, const char* title): - AliInputEventHandler(name, title), fEvent(0x0), fBranches(""), fBranchesOn("") + AliInputEventHandler(name, title), fEvent(0x0), fBranches(""), fBranchesOn(""), fAnalysisType(0), + fNEvents(0), fUseTags(kFALSE), fChainT(0), fTreeT(0), fRunTag(0) { // Constructor } -Bool_t AliESDInputHandler::Init(TTree* tree, Option_t* /*opt*/) +Bool_t AliESDInputHandler::Init(TTree* tree, Option_t* opt) { // Initialisation necessary for each new tree - fTree = tree; + fAnalysisType = opt; + fTree = tree; if (!fTree) return kFALSE; // Get pointer to ESD event @@ -73,6 +90,7 @@ Bool_t AliESDInputHandler::Init(TTree* tree, Option_t* /*opt*/) fEvent = new AliESDEvent(); fEvent->ReadFromTree(fTree); + fNEvents = fTree->GetEntries(); return kTRUE; } @@ -94,6 +112,101 @@ Bool_t AliESDInputHandler::FinishEvent() return kTRUE; } +Bool_t AliESDInputHandler::Notify(const char* path) +{ + // Notify a directory change + AliInfo(Form("Directory change %s \n", path)); + // + 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; +} + + void AliESDInputHandler::SwitchOffBranches() const { // // Switch of branches on user request @@ -122,3 +235,9 @@ void AliESDInputHandler::SwitchOnBranches() const { AliInfo(Form("Branch %s switched on \n", str.Data())); } } + +Option_t *AliESDInputHandler::GetDataType() const +{ +// Returns handled data type. + return gESDDataType; +}