fGridHandler(NULL),
fExtraFiles(""),
fAutoBranchHandling(kTRUE),
- fTable()
+ fTable(),
+ fRunFromPath(0)
{
// Default constructor.
fgAnalysisManager = this;
fGridHandler(NULL),
fExtraFiles(),
fAutoBranchHandling(other.fAutoBranchHandling),
- fTable()
+ fTable(),
+ fRunFromPath(0)
{
// Copy constructor.
fTasks = new TObjArray(*other.fTasks);
fgCommonFileName = "AnalysisResults.root";
fgAnalysisManager = this;
fAutoBranchHandling = other.fAutoBranchHandling;
- fTable.Clear("nodelete");
+ fTable.Clear("nodelete");
+ fRunFromPath = other.fRunFromPath;
}
return *this;
}
return entry;
return fTree ? fTree->GetTree()->GetEntry(entry, getall) : 0;
}
-
+
+//______________________________________________________________________________
+Int_t AliAnalysisManager::GetRunFromAlienPath(const char *path)
+{
+// Attempt to extract run number from input data path. Works only for paths to
+// alice data in alien.
+// sim: /alice/sim/<production>/run_no/...
+// data: /alice/data/year/period/000run_no/... (ESD or AOD)
+ TString s(path);
+ TString srun;
+ Int_t run = 0;
+ Int_t index = s.Index("/alice/sim");
+ if (index >= 0) {
+ for (Int_t i=0; i<3; i++) {
+ index = s.Index("/", index+1);
+ if (index<0) return 0;
+ }
+ srun = s(index+1,6);
+ run = atoi(srun);
+ }
+ index = s.Index("/alice/data");
+ if (index >= 0) {
+ for (Int_t i=0; i<4; i++) {
+ index = s.Index("/", index+1);
+ if (index<0) return 0;
+ }
+ srun = s(index+1,9);
+ run = atoi(srun);
+ }
+ return run;
+}
+
//______________________________________________________________________________
Bool_t AliAnalysisManager::Init(TTree *tree)
{
}
if (fDebug > 1) printf("->AliAnalysisManager::Notify() file: %s\n", curfile->GetName());
+ Int_t run = AliAnalysisManager::GetRunFromAlienPath(curfile->GetName());
+ if (run) SetRunFromPath(run);
+ if (fDebug > 1) printf(" ### run found from path: %d\n", run);
TIter next(fTasks);
AliAnalysisTask *task;
- // Call Notify for all tasks
- while ((task=(AliAnalysisTask*)next()))
- task->Notify();
// Call Notify of the event handlers
if (fInputEventHandler) {
fMCtruthEventHandler->Notify(curfile->GetName());
}
+ // Call Notify for all tasks
+ while ((task=(AliAnalysisTask*)next()))
+ task->Notify();
+
if (fDebug > 1) printf("<-AliAnalysisManager::Notify()\n");
return kTRUE;
}
for (icont=0; icont<fParamCont->GetEntriesFast(); icont++) allOutputs->Add(fParamCont->At(icont));
TIter next1(allOutputs);
TString handlerFile = "";
+ TString extraOutputs = "";
if (fOutputEventHandler) {
handlerFile = fOutputEventHandler->GetOutputFileName();
+ extraOutputs = fOutputEventHandler->GetExtraOutputs();
}
icont = 0;
TList filestmp;
if (!file) {
//if (handlerFile == filename && !gSystem->AccessPathName(filename)) openoption = "UPDATE";
Bool_t firsttime = kTRUE;
- if (filestmp.FindObject(filename)) {
+ if (filestmp.FindObject(filename) || extraOutputs.Contains(filename)) {
firsttime = kFALSE;
} else {
filestmp.Add(new TNamed(filename,""));