In Open() and GotoEvent() try the ESD operations first, fallback to run-loader.
authormtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 4 Aug 2008 17:49:45 +0000 (17:49 +0000)
committermtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 4 Aug 2008 17:49:45 +0000 (17:49 +0000)
EVE/EveBase/AliEveEventManager.cxx

index e1f2500..b572e28 100644 (file)
@@ -169,9 +169,54 @@ void AliEveEventManager::Open()
 
   Int_t runNo = -1;
 
+  // Open ESD and ESDfriends
+
+  TString esdPath(Form("%s/%s", fPath.Data(), fgESDFileName.Data()));
+  if ((fESDFile = TFile::Open(esdPath)))
+  {
+    fESD = new AliESDEvent();
+    fESDTree = (TTree*) fESDFile->Get("esdTree");
+    if (fESDTree != 0)
+    {
+      fESD->ReadFromTree(fESDTree);
+      fESDTree->GetEntry(0);
+      if (runNo < 0)
+        runNo = fESD->GetESDRun()->GetRunNumber();
+
+      // Check if ESDfriends exists and attach the branch
+      TString p(Form("%s/AliESDfriends.root", fPath.Data()));
+      if (gSystem->AccessPathName(p, kReadPermission) == kFALSE)
+      {
+        fESDfriendExists = kTRUE;
+        fESDTree->SetBranchStatus ("ESDfriend*", 1);
+        fESDTree->SetBranchAddress("ESDfriend.", &fESDfriend);
+      }
+    }
+    else // esdtree == 0
+    {
+      delete fESDFile; fESDFile = 0;
+      Warning(kEH, "failed getting the esdTree.");
+    }
+  }
+  else // esd not readable
+  {
+    Warning(kEH, "can not read ESD file '%s'.", esdPath.Data());
+  }
+  if (fESDTree == 0)
+  {
+    if (fgAssertESD)
+    {
+      throw (kEH + "ESD not initialized. Its precence was requested.");
+    } else {
+      Warning(kEH, "ESD not initialized.");
+    }
+  }
+
+  // Open RunLoader from galice.root
+
   TString gaPath(Form("%s/galice.root", fPath.Data()));
   // If i use open directly, we get fatal.
-  // Is this (AccessPathName check) ok for xrootd / alien?
+  // Is AccessPathName check ok for xrootd / alien? Yes, not for http.
   if (gSystem->AccessPathName(gaPath, kReadPermission) == kFALSE)
   {
     fRunLoader = AliRunLoader::Open(gaPath);
@@ -185,7 +230,8 @@ void AliEveEventManager::Open()
 
       if (fRunLoader->LoadHeader() == 0)
       {
-        runNo = fRunLoader->GetHeader()->GetRun();
+        if (runNo < 0)
+          runNo = fRunLoader->GetHeader()->GetRun();
       }
       else
       {
@@ -211,46 +257,7 @@ void AliEveEventManager::Open()
       Warning(kEH, "Bootstraping of run-loader failed.");
   }
 
-
-  TString esdPath(Form("%s/%s", fPath.Data(), fgESDFileName.Data()));
-  if ((fESDFile = TFile::Open(esdPath)))
-  {
-    fESD = new AliESDEvent();
-    fESDTree = (TTree*) fESDFile->Get("esdTree");
-    if (fESDTree != 0)
-    {
-      fESD->ReadFromTree(fESDTree);
-      fESDTree->GetEntry(0);
-      runNo = fESD->GetESDRun()->GetRunNumber();
-
-      // Check if ESDfriends exists and attach the branch
-      TString p(Form("%s/AliESDfriends.root", fPath.Data()));
-      if (gSystem->AccessPathName(p, kReadPermission) == kFALSE)
-      {
-        fESDfriendExists = kTRUE;
-        fESDTree->SetBranchStatus ("ESDfriend*", 1);
-        fESDTree->SetBranchAddress("ESDfriend.", &fESDfriend);
-      }
-    }
-    else // esdtree == 0
-    {
-      delete fESDFile; fESDFile = 0;
-      Warning(kEH, "failed getting the esdTree.");
-    }
-  }
-  else // esd not readable
-  {
-    Warning(kEH, "can not read ESD file '%s'.", esdPath.Data());
-  }
-  if (fESDTree == 0)
-  {
-    if (fgAssertESD)
-    {
-      throw (kEH + "ESD not initialized. Its precence was requested.");
-    } else {
-      Warning(kEH, "ESD not initialized.");
-    }
-  }
+  // Open raw-data file
 
   TString rawPath(Form("%s/%s", fPath.Data(), fgRawFileName.Data()));
   // If i use open directly, raw-reader reports an error but i have
@@ -370,19 +377,19 @@ void AliEveEventManager::GotoEvent(Int_t event)
   static const TEveException kEH("AliEveEventManager::GotoEvent ");
 
   Int_t maxEvent = 0;
-  if (fRunLoader)
-  {
-    maxEvent = fRunLoader->GetNumberOfEvents() - 1;
-    if (event < 0)
-      event = fRunLoader->GetNumberOfEvents() + event;
-  }
-  else if (fESDTree)
+  if (fESDTree)
   {
     fESDTree->Refresh();
     maxEvent = fESDTree->GetEntries() - 1;
     if (event < 0)
       event = fESDTree->GetEntries() + event;
   }
+  else if (fRunLoader)
+  {
+    maxEvent = fRunLoader->GetNumberOfEvents() - 1;
+    if (event < 0)
+      event = fRunLoader->GetNumberOfEvents() + event;
+  }
   else if (fRawReader)
   {
     maxEvent = 10000000;
@@ -410,11 +417,6 @@ void AliEveEventManager::GotoEvent(Int_t event)
   // additinal parents.
   DestroyElements();
 
-  if (fRunLoader) {
-    if (fRunLoader->GetEvent(event) != 0)
-      throw (kEH + "failed getting required event.");
-  }
-
   if (fESDTree) {
     if (fESDTree->GetEntry(event) <= 0)
       throw (kEH + "failed getting required event from ESD.");
@@ -423,6 +425,11 @@ void AliEveEventManager::GotoEvent(Int_t event)
       fESD->SetESDfriend(fESDfriend);
   }
 
+  if (fRunLoader) {
+    if (fRunLoader->GetEvent(event) != 0)
+      throw (kEH + "failed getting required event.");
+  }
+
   if (fRawReader)
   {
     Int_t rawEv = fEventId;