Fix Prev/NextEvent() when ESD is not present and the event-selector
authormtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 19 Oct 2009 09:37:54 +0000 (09:37 +0000)
committermtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 19 Oct 2009 09:37:54 +0000 (09:37 +0000)
can't do anything.

Reactivate esdtree->Refresh() in GetMaxEventId().

EVE/EveBase/AliEveEventManager.cxx

index d7b66fb..d45ced6 100644 (file)
@@ -611,7 +611,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.
@@ -630,11 +630,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)
@@ -839,7 +839,7 @@ void AliEveEventManager::NextEvent()
 
     gSystem->ExitLoop();
   }
-  else
+  else if (fESDTree)
   {
     Int_t nextevent=0;
     if (fPEventSelector->FindNext(nextevent))
@@ -847,6 +847,10 @@ void AliEveEventManager::NextEvent()
       GotoEvent(nextevent);
     }
   }
+  else if (fEventId < GetMaxEventId(kTRUE))
+  {
+    GotoEvent(fEventId + 1);
+  }
 }
 
 void AliEveEventManager::PrevEvent()
@@ -863,10 +867,18 @@ void AliEveEventManager::PrevEvent()
   {
     throw (kEH + "Event-loop is under external control.");
   }
-  Int_t nextevent=0;
-  if (fPEventSelector->FindPrev(nextevent))
+
+  if (fESDTree)
+  {
+    Int_t nextevent=0;
+    if (fPEventSelector->FindPrev(nextevent))
+    {
+      GotoEvent(nextevent);
+    }
+  }
+  else if (fEventId > 0)
   {
-    GotoEvent(nextevent);
+    GotoEvent(fEventId - 1);
   }
 }