]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Added method Event::GotoEvent(Int_t) and shortcuts Next/PrevEvent().
authormtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 11 Jul 2006 12:49:37 +0000 (12:49 +0000)
committermtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 11 Jul 2006 12:49:37 +0000 (12:49 +0000)
EVE/Alieve/EventAlieve.cxx
EVE/Alieve/EventAlieve.h

index fd3ff95a2814b9b8348cd9f56c21d9a15d24c58a..3d1b17f41b50e2e6b29caea61dd5fcd31b75a8c0 100644 (file)
@@ -95,13 +95,11 @@ void Event::Open()
       TString alice_path = fPath + "/";
       fRunLoader->SetDirName(alice_path);
     }
-    if(fRunLoader->LoadgAlice() != 0) {
+    if(fRunLoader->LoadgAlice() != 0)
       throw(eH + "failed loading gAlice.");
-    }
 
-    if(fRunLoader->GetEvent(fEventId) != 0) {
+    if(fRunLoader->GetEvent(fEventId) != 0)
       throw(eH + "failed getting required event.");
-    }
   }
 
   if(fgUseESDTree) {
@@ -141,10 +139,53 @@ void Event::Open()
     }
   }
 
-  SetName(Form("Event%d", fEventId));
+  SetName(Form("Event %d", fEventId));
   SetTitle(fPath);
 }
 
+void Event::GotoEvent(Int_t event)
+{
+  static const Exc_t eH("Event::GotoEvent ");
+
+  if(fgUseRunLoader && fRunLoader == 0)
+    throw(eH + "RunLoader not initialized.");
+
+  if(fgUseESDTree && fESDTree == 0)
+    throw(eH + "ESDTree not initialized.");
+
+  Int_t maxEvent = 0;
+  if(fgUseRunLoader)
+    maxEvent = fRunLoader->GetNumberOfEvents() - 1;
+  else if(fgUseESDTree)
+    maxEvent = fESDTree->GetEntries() - 1;
+
+  if(event < 0 || event > maxEvent)
+    throw(eH + Form("event %d not present, available range [%d, %d].",
+                   event, 0, maxEvent));
+
+  DestroyElements();
+  fEventId = event;
+  SetName(Form("Event %d", fEventId));
+  UpdateItems();
+
+  if(fgUseRunLoader) {
+    if(fRunLoader->GetEvent(fEventId) != 0)
+      throw(eH + "failed getting required event.");
+  }
+
+  if(fgUseESDTree) {
+    if(fESDTree->GetEntry(fEventId) <= 0)
+      throw(eH + "failed getting required event from ESD.");
+
+    if(fESDfriendTree != 0) {
+      if(fESDfriendTree->GetEntry(fEventId) <= 0)
+       throw(eH + "failed getting required event from ESDfriend.");
+
+      fESD->SetESDfriend(fESDfriend);
+    }
+  }
+}
+
 void Event::Close()
 {
   
index 636a50e585d8fc7bea04d8af8a433fcf07268873..0508af03381ba6df929e345e95a313753e173705 100644 (file)
@@ -42,6 +42,9 @@ public:
   Event(TString path, Int_t ev=0);
 
   void Open();
+  void GotoEvent(Int_t event);
+  void NextEvent() { GotoEvent(fEventId + 1); }
+  void PrevEvent() { GotoEvent(fEventId - 1); }
   void Close();
 
   Int_t         GetEventId()   const { return fEventId; }