]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/EveBase/AliEveEventManager.cxx
Remove obsolete comments about TTree::Refresh() not working.
[u/mrichter/AliRoot.git] / EVE / EveBase / AliEveEventManager.cxx
index d7f9aee504c60ed8d6736f15068cbea311ec6e71..eb9e7b57dd90508d9ef8e403b469cd1455973275 100644 (file)
@@ -303,9 +303,6 @@ void AliEveEventManager::Open()
       // We use TFile::Open() instead of gSystem->AccessPathName
       // as it seems to work better when attachine alieve to a
       // running reconstruction process with auto-save on.
-      // There was also a problem with TTree::Refresh() - it didn't
-      // save the friend branch on a separate file, fixed in 5.22.2 -
-      // so we might want to try the old way again soon.
       TString p(Form("%s/AliESDfriends.root", fPath.Data()));
       TFile *esdFriendFile = TFile::Open(p);
       if (esdFriendFile)
@@ -424,8 +421,16 @@ void AliEveEventManager::Open()
   TString gaPath(Form("%s/galice.root", fPath.Data()));
   // If i use open directly, we get fatal.
   // Is AccessPathName check ok for xrootd / alien? Yes, not for http.
-  if (gSystem->AccessPathName(gaPath, kReadPermission) == kFALSE)
-  {
+  // Seems not to work for alien anymore.
+  // Fixed in ROOT on 27.10.2009, rev 30888.
+  // To revert after we move to root-5.26.
+  TFile *gafile = TFile::Open(gaPath);
+  if (gafile)
+  {
+    gafile->Close();
+    delete gafile;
+  // if (gSystem->AccessPathName(gaPath, kReadPermission) == kFALSE)
+  // {
     fRunLoader = AliRunLoader::Open(gaPath, GetName());
     if (fRunLoader)
     {
@@ -541,8 +546,11 @@ void AliEveEventManager::Open()
        cdb->SetDefaultStorage(fgCdbUri);
       } else
        cdb->SetDefaultStorage(fgCdbUri);
+
+      cdb->SetRun(runNo);
+
       if (cdb->IsDefaultStorageSet() == kFALSE)
-       throw kEH + "CDB initialization failed.";
+       throw kEH + "CDB initialization failed for '" + fgCdbUri + "'.";
     }
     
     if (fgCdbUri.BeginsWith("local://"))
@@ -564,7 +572,6 @@ void AliEveEventManager::Open()
        }
       }
     }
-    cdb->SetRun(runNo);
   }
 
   fIsOpen = kTRUE;
@@ -603,7 +610,7 @@ void AliEveEventManager::SetEvent(AliRunLoader *runLoader, AliRawReader *rawRead
   if (fAutoLoad) StartAutoLoadTimer();
 }
 
-Int_t AliEveEventManager::GetMaxEventId(Bool_t /*refreshESD*/) const
+Int_t AliEveEventManager::GetMaxEventId(Bool_t refreshESD) const
 {
   // Returns maximum available event id.
   // If under external control or event is not opened -1 is returned.
@@ -622,11 +629,11 @@ Int_t AliEveEventManager::GetMaxEventId(Bool_t /*refreshESD*/) const
 
   if (fESDTree)
   {
-    // Refresh crashes with root-5.21.1-alice.
-    // Fixed by Philippe 5.8.2008 r25053, can be reactivated
-    // when we move to a newer root.
-    // if (refreshESD)
-    //   fESDTree->Refresh();
+    if (refreshESD)
+    {
+       fESDTree->Refresh();
+       fPEventSelector->Update();
+    }
     return fESDTree->GetEntries() - 1;
   }
   else if (fAODTree)
@@ -682,10 +689,8 @@ void AliEveEventManager::GotoEvent(Int_t event)
   Int_t maxEvent = 0;
   if (fESDTree)
   {
-    // Refresh crashes with root-5.21.1-alice.
-    // Fixed by Philippe 5.8.2008 r25053, can be reactivated
-    // when we move to a newer root.
-    // fESDTree->Refresh();
+    if (event >= fESDTree->GetEntries())
+      fESDTree->Refresh();
     maxEvent = fESDTree->GetEntries() - 1;
     if (event < 0)
       event = fESDTree->GetEntries() + event;
@@ -831,7 +836,7 @@ void AliEveEventManager::NextEvent()
 
     gSystem->ExitLoop();
   }
-  else
+  else if (fESDTree)
   {
     Int_t nextevent=0;
     if (fPEventSelector->FindNext(nextevent))
@@ -839,6 +844,10 @@ void AliEveEventManager::NextEvent()
       GotoEvent(nextevent);
     }
   }
+  else if (fEventId < GetMaxEventId(kTRUE))
+  {
+    GotoEvent(fEventId + 1);
+  }
 }
 
 void AliEveEventManager::PrevEvent()
@@ -855,10 +864,18 @@ void AliEveEventManager::PrevEvent()
   {
     throw (kEH + "Event-loop is under external control.");
   }
-  Int_t nextevent=0;
-  if (fPEventSelector->FindPrev(nextevent))
+
+  if (fESDTree)
   {
-    GotoEvent(nextevent);
+    Int_t nextevent=0;
+    if (fPEventSelector->FindPrev(nextevent))
+    {
+      GotoEvent(nextevent);
+    }
+  }
+  else if (fEventId > 0)
+  {
+    GotoEvent(fEventId - 1);
   }
 }
 
@@ -879,7 +896,8 @@ void AliEveEventManager::Close()
 
   if (fESDTree) {
     delete fESD;       fESD       = 0;
-    delete fESDfriend; fESDfriend = 0;
+    // delete fESDfriend; // friend tree is deleted with the tree
+    fESDfriend = 0;
     fESDfriendExists = kFALSE;
 
     delete fESDTree;   fESDTree = 0;
@@ -1271,6 +1289,8 @@ void AliEveEventManager::AfterNewEventLoaded()
 
   static const TEveException kEH("AliEveEventManager::AfterNewEventLoaded ");
 
+  NewEventDataLoaded();
+
   if (fExecutor)
     fExecutor->ExecMacros();
 
@@ -1300,6 +1320,13 @@ void AliEveEventManager::AfterNewEventLoaded()
   }
 }
 
+void AliEveEventManager::NewEventDataLoaded()
+{
+  // Emit NewEventDataLoaded signal.
+
+  Emit("NewEventDataLoaded()");
+}
+
 void AliEveEventManager::NewEventLoaded()
 {
   // Emit NewEventLoaded signal.