]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliESDInputHandlerRP.cxx
AliESDHeader: AliTriggerConfiguration and more trigger scalers added
[u/mrichter/AliRoot.git] / STEER / AliESDInputHandlerRP.cxx
index c77a0bc1fd30819982fe7bd7ef9aae6c41b08c9b..8febf1f3db8379d0f82b63a1b445ca8a56d96271 100644 (file)
@@ -42,6 +42,7 @@ ClassImp(AliESDInputHandlerRP)
 AliESDInputHandlerRP::AliESDInputHandlerRP() :
     AliESDInputHandler(),
     fRTrees(   new TObjArray()),
+    fRDirs (   new TObjArray()),
     fRFiles(   new TList()),
     fDetectors(new TList()),
     fDirR(0),
@@ -60,6 +61,7 @@ AliESDInputHandlerRP::AliESDInputHandlerRP() :
 AliESDInputHandlerRP::AliESDInputHandlerRP(const char* name, const char* title):
     AliESDInputHandler(name, title),
     fRTrees(   new TObjArray()),
+    fRDirs (   new TObjArray()),
     fRFiles(   new TList()),
     fDetectors(new TList()),
     fDirR(0),
@@ -96,14 +98,18 @@ Bool_t AliESDInputHandlerRP::Init(Option_t* opt)
        } else {
            file = TFile::Open(Form("%s#%s.RecPoints.root", fPathName->Data(), det->GetName()));
        }
-       if (!file) AliFatal(Form("AliESDInputHandlerRP: %s.RecPoints.root not found in %s ! \n", det->GetName(), fPathName->Data()));
+       if (!file) {
+         AliError(Form("AliESDInputHandlerRP: %s.RecPoints.root not found in %s ! \n", det->GetName(), fPathName->Data()));
+         return kFALSE;
+       }
        fRFiles->Add(file);
     }
 
     if (file) {
        fEventsPerFile = file->GetNkeys() - file->GetNProcessIDs();
     } else {
-       AliFatal(Form("AliESDInputHandlerRP: No file with RecPoints found in %s ! \n", fPathName->Data()));
+       AliError(Form("AliESDInputHandlerRP: No file with RecPoints found in %s ! \n", fPathName->Data()));
+       return kFALSE;
     }
     
 
@@ -112,15 +118,16 @@ Bool_t AliESDInputHandlerRP::Init(Option_t* opt)
     fFileNumber       =  0;
     // Get number of events from esd tree 
     printf("AliESDInputHandlerRP::Init() %d %d\n",__LINE__, fNEvents);
+    //
+    AliESDInputHandler::Init(opt);
+    //
     return kTRUE;
 }
 
 Bool_t AliESDInputHandlerRP::BeginEvent(Long64_t entry)
 {
     // Begin the next event
-    // Delegate first to base class
-    AliESDInputHandler::BeginEvent(entry);
-//
+    //
     if (entry == -1) {
        fEventNumber++;
        entry = fEventNumber;
@@ -129,10 +136,15 @@ Bool_t AliESDInputHandlerRP::BeginEvent(Long64_t entry)
     }
     
     if (entry >= fNEvents) {
-       AliWarning(Form("AliESDInputHandlerRP: Event number out of range %5d %5d\n", entry, fNEvents));
+       AliWarning(Form("AliESDInputHandlerRP: Event number out of range %5lld %5d\n", entry, fNEvents));
        return kFALSE;
     }
-    return LoadEvent(entry);
+    
+    LoadEvent(entry);
+
+    // Delegate to base class
+    return AliESDInputHandler::BeginEvent(entry);
+
 }
 
 Bool_t AliESDInputHandlerRP::LoadEvent(Int_t iev)
@@ -140,6 +152,7 @@ Bool_t AliESDInputHandlerRP::LoadEvent(Int_t iev)
     // Load the event number iev
     //
     // Calculate the file number
+  if (fEventsPerFile<=0) return kFALSE;
     Int_t inew  = iev / fEventsPerFile;
     if (inew != fFileNumber) {
        fFileNumber = inew;
@@ -149,22 +162,24 @@ Bool_t AliESDInputHandlerRP::LoadEvent(Int_t iev)
     }
     // Folder name
     char folder[20];
-    sprintf(folder, "Event%d", iev);
+    snprintf(folder, 20, "Event%d", iev);
     // Tree R
     TIter next(fRFiles);
     TFile* file;
-    Int_t idx = 0;
+    Int_t idx  = 0;
     
     while ((file = (TFile*) next()))
     {
        file->GetObject(folder, fDirR);
+       
        if (!fDirR) {
            AliWarning(Form("AliESDInputHandlerRP: Event #%5d not found\n", iev));
            return kFALSE;
        }
        TTree* tree = 0;
        fDirR->GetObject("TreeR", tree);
-       fRTrees->AddAt(tree, idx++);
+       fRDirs ->AddAt(fDirR, idx  );
+       fRTrees->AddAt(tree,  idx++);
     }
     return kTRUE;
 }
@@ -201,9 +216,11 @@ Bool_t AliESDInputHandlerRP::Notify(const char *path)
   // Notify about directory change
   // The directory is taken from the 'path' argument
   // 
-    AliInfo(Form("Directory change %s \n", path));
+
     // Get path to directory
     TString fileName(path);
+    if (fileName.IsNull()) return kFALSE;
+    AliInfo(Form("Directory change %s \n", path));
 
     if(fileName.Contains("#")){
     // If this is an archive it will contain a # 
@@ -223,15 +240,22 @@ Bool_t AliESDInputHandlerRP::Notify(const char *path)
     
     if (fIsArchive) {
        // Archive
-       TFile* file = TFile::Open(fPathName->Data());
-       TArchiveFile* arch = file->GetArchive();
-       members = arch->GetMembers();
+      TFile* file = TFile::Open(fPathName->Data());
+      TArchiveFile* arch = file->GetArchive();
+      members = arch->GetMembers();
+      fPathName->ReplaceAll("#AliESDs.root", "");
     } else {
-       // Directory
-       TString wd = gSystem->WorkingDirectory();
-       TSystemDirectory dir(".", fPathName->Data());
-       members = dir.GetListOfFiles();
-       gSystem->cd(wd);
+       // Directory or alien archive
+      if (fileName.BeginsWith("alien:")) {
+        TFile* file = TFile::Open(Form("%s/root_archive.zip", fPathName->Data()));
+        TArchiveFile* arch = file->GetArchive();
+        members = arch->GetMembers();
+      } else {  
+        TString wd = gSystem->WorkingDirectory();
+        TSystemDirectory dir(".", fPathName->Data());
+        members = dir.GetListOfFiles();
+        gSystem->cd(wd);
+      }  
     }
 
     TIter next(members);
@@ -243,7 +267,12 @@ Bool_t AliESDInputHandlerRP::Notify(const char *path)
     {
        TString name(entry->GetName());
        TObjArray* tokens = name.Tokenize(".");
-       Int_t ntok = tokens->GetEntries();
+       Int_t ntok = 0;
+       if (tokens) {
+         ntok = tokens->GetEntries();
+       } else {
+         continue;
+       }
        if (ntok <= 1) continue;
        TString str = ((TObjString*) tokens->At(1))->GetString();
        if (!(strcmp(str.Data(), "RecPoints"))){
@@ -265,15 +294,17 @@ Bool_t AliESDInputHandlerRP::Notify(const char *path)
     ResetIO();
     InitIO("");
     // Some clean-up
-    members->Delete();
+    if (members) members->Delete();
 
+    AliESDInputHandler::Notify(path);
+    
     return kTRUE;
 }
 
 Bool_t AliESDInputHandlerRP::FinishEvent()
 {
     // Clean-up after each event
-    delete fDirR;  fDirR = 0;
+    fRDirs->Delete();
     AliESDInputHandler::FinishEvent();
     return kTRUE;
 }
@@ -281,7 +312,7 @@ Bool_t AliESDInputHandlerRP::FinishEvent()
 void AliESDInputHandlerRP::ResetIO()
 {
 // Delete trees and files
-    fRFiles->Delete();
+    fRFiles->Clear("nodelete");
     fExtension="";
 }