AliEveEventManager
authormtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 5 Aug 2008 17:29:12 +0000 (17:29 +0000)
committermtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 5 Aug 2008 17:29:12 +0000 (17:29 +0000)
------------------

In Open() use AliRawReader::Create(rawPath) to instantiate AliRawReader.

In GotoEvent():
- do not call fESDTree->Refresh() as it crashes with root-5.21.1-alice;
- use AliRawReader::GotoEvent() and use iteration with NextEvent() as
  a fallback.

In Close() also close/destroy run-loader and raw-reader.

AliEveEventManagerEditor
------------------------

Add buttons "Last Event" and "Refresh" (reopens data-files).

alice-macros
------------

visscan_init.C - open editor on track-counter object after loading is
complete.

SplitGLView.C - do not expand projection-managers as projected objects
now react to changes in the projectable.

EVE/EveBase/AliEveEventManager.cxx
EVE/EveBase/AliEveEventManagerEditor.cxx
EVE/EveBase/AliEveEventManagerEditor.h
EVE/alice-macros/SplitGLView.C
EVE/alice-macros/esd_tracks.C
EVE/macros/visscan_init.C

index b572e28..bbdb25e 100644 (file)
@@ -262,21 +262,10 @@ void AliEveEventManager::Open()
   TString rawPath(Form("%s/%s", fPath.Data(), fgRawFileName.Data()));
   // If i use open directly, raw-reader reports an error but i have
   // no way to detect it.
-  // Is this (AccessPathName check) ok for xrootd / alien?
+  // Is this (AccessPathName check) ok for xrootd / alien? Yes, not for http.
   if (gSystem->AccessPathName(rawPath, kReadPermission) == kFALSE)
   {
-    if (fgRawFileName.EndsWith("/"))
-    {
-      fRawReader = new AliRawReaderFile(rawPath);
-    }
-    else if (fgRawFileName.EndsWith(".root"))
-    {
-      fRawReader = new AliRawReaderRoot(rawPath);
-    }
-    else if (!fgRawFileName.IsNull())
-    {
-      fRawReader = new AliRawReaderDate(rawPath);
-    } 
+    fRawReader = AliRawReader::Create(rawPath);
   }
 
   if (fRawReader == 0)
@@ -295,7 +284,7 @@ void AliEveEventManager::Open()
     {
       fRawReader->NextEvent();
       runNo = fRawReader->GetRunNumber();
-      printf("Determining run-no from raw ... run=%d\n", runNo);
+      Info(kEH, "Determining run-no from raw ... run=%d.", runNo);
       fRawReader->RewindEvents();
     } else {
       throw (kEH + "unknown run number.");
@@ -379,7 +368,10 @@ void AliEveEventManager::GotoEvent(Int_t event)
   Int_t maxEvent = 0;
   if (fESDTree)
   {
-    fESDTree->Refresh();
+    // 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();
     maxEvent = fESDTree->GetEntries() - 1;
     if (event < 0)
       event = fESDTree->GetEntries() + event;
@@ -432,25 +424,29 @@ void AliEveEventManager::GotoEvent(Int_t event)
 
   if (fRawReader)
   {
-    Int_t rawEv = fEventId;
-    if (event < rawEv)
-    {
-      fRawReader->RewindEvents();
-      rawEv = -1;
-    }
-
-    while (rawEv < event)
+    // AliRawReader::GotoEvent(Int_t) works for AliRawReaderRoot/Chain.
+    if (fRawReader->GotoEvent(event) == kFALSE)
     {
-      if ( ! fRawReader->NextEvent())
+      // Use fallback method - iteration with NextEvent().
+      Int_t rawEv = fEventId;
+      if (event < rawEv)
       {
         fRawReader->RewindEvents();
-        fEventId = -1;
-        throw (kEH + Form("Error going to next raw-event from event %d.", rawEv));
+        rawEv = -1;
       }
-      ++rawEv;
-    }
 
-    printf ("Loaded raw-event %d.\n", rawEv);
+      while (rawEv < event)
+      {
+        if ( ! fRawReader->NextEvent())
+        {
+          fRawReader->RewindEvents();
+          fEventId = -1;
+          throw (kEH + Form("Error going to next raw-event from event %d.", rawEv));
+        }
+        ++rawEv;
+      }
+      Warning(kEH, "Loaded raw-event %d with fallback method.\n", rawEv);
+    }
   }
 
   fEventId = event;
@@ -494,16 +490,23 @@ void AliEveEventManager::PrevEvent()
 
 void AliEveEventManager::Close()
 {
-  // Close the event files.
-  // For the moment only ESD is closed. Needs to be investigated for
-  // AliRunLoader and Raw.
+  // Close the event data-files and delete ESD, ESDfriend, run-loader
+  // and raw-reader.
 
   if (fESDTree) {
     delete fESD;       fESD       = 0;
     delete fESDfriend; fESDfriend = 0;
 
-    delete fESDTree; fESDTree = 0;
-    delete fESDFile; fESDFile = 0;
+    delete fESDTree;   fESDTree = 0;
+    delete fESDFile;   fESDFile = 0;
+  }
+
+  if (fRunLoader) {
+    delete fRunLoader; fRunLoader = 0;
+  }
+
+  if (fRawReader) {
+    delete fRawReader; fRawReader = 0;
   }
 }
 
index 88f57fc..579fd2e 100644 (file)
@@ -33,6 +33,8 @@ AliEveEventManagerEditor::AliEveEventManagerEditor(const TGWindow *p, Int_t widt
   fAutoLoadTime(0),
   fNextEvent(0),
   fPrevEvent(0),
+  fLastEvent(0),
+  fRefresh(0),
   fEventInfo(0)
 {
   // Constructor.
@@ -60,15 +62,35 @@ AliEveEventManagerEditor::AliEveEventManagerEditor(const TGWindow *p, Int_t widt
   {
     TGHorizontalFrame* f = new TGHorizontalFrame(this);
     fPrevEvent = new TGTextButton(f, "Previous Event");
-    f->AddFrame(fPrevEvent, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
+    fPrevEvent->SetWidth(100);
+    fPrevEvent->ChangeOptions(fPrevEvent->GetOptions() | kFixedWidth);
+    f->AddFrame(fPrevEvent, new TGLayoutHints(kLHintsNormal, 0,4,0,0));
     fPrevEvent->Connect("Clicked()",
                        "AliEveEventManagerEditor", this, "DoPrevEvent()");
     fNextEvent = new TGTextButton(f, "Next Event");
-    f->AddFrame(fNextEvent, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
+    fNextEvent->SetWidth(100);
+    fNextEvent->ChangeOptions(fNextEvent->GetOptions() | kFixedWidth);
+    f->AddFrame(fNextEvent, new TGLayoutHints(kLHintsNormal, 4,0,0,0));
     fNextEvent->Connect("Clicked()",
                        "AliEveEventManagerEditor", this, "DoNextEvent()");
     AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
   }
+  {
+    TGHorizontalFrame* f = new TGHorizontalFrame(this);
+    fLastEvent = new TGTextButton(f, "Last Event");
+    fLastEvent->SetWidth(100);
+    fLastEvent->ChangeOptions(fLastEvent->GetOptions() | kFixedWidth);
+    f->AddFrame(fLastEvent, new TGLayoutHints(kLHintsNormal, 0,4,0,0));
+    fLastEvent->Connect("Clicked()",
+                       "AliEveEventManagerEditor", this, "DoLastEvent()");
+    fRefresh = new TGTextButton(f, "Refresh");
+    fRefresh->SetWidth(100);
+    fRefresh->ChangeOptions(fRefresh->GetOptions() | kFixedWidth);
+    f->AddFrame(fRefresh, new TGLayoutHints(kLHintsNormal, 4,0,0,0));
+    fRefresh->Connect("Clicked()",
+                       "AliEveEventManagerEditor", this, "DoRefresh()");
+    AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
+  }
 
   {
     TGVerticalFrame* f = new TGVerticalFrame(this);
@@ -139,3 +161,20 @@ void AliEveEventManagerEditor::DoNextEvent()
   // Load next event
   fM->NextEvent();
 }
+
+//______________________________________________________________________________
+void AliEveEventManagerEditor::DoLastEvent()
+{
+  // Load last event
+  fM->GotoEvent(-1);
+}
+
+//______________________________________________________________________________
+void AliEveEventManagerEditor::DoRefresh()
+{
+  // Refresh / reopen data-files
+  Int_t ev = fM->GetEventId();
+  fM->Close();
+  fM->Open();
+  fM->GotoEvent(ev);
+}
index 5218822..70ecfc5 100644 (file)
@@ -36,6 +36,8 @@ public:
    void DoSetAutoLoadTime();
    void DoPrevEvent();
    void DoNextEvent();
+   void DoLastEvent();
+   void DoRefresh();
 
 protected:
    AliEveEventManager            *fM; // Model object.
@@ -46,6 +48,8 @@ protected:
 
    TGTextButton     *fNextEvent; // Load next event
    TGTextButton     *fPrevEvent; // Load previous event
+   TGTextButton     *fLastEvent; // Load last event
+   TGTextButton     *fRefresh;   // Refresh opened data-files (reopen)
 
    TGTextView       *fEventInfo; // Text box with event info
 
index 030f0b2..5d625e1 100644 (file)
@@ -726,7 +726,7 @@ SplitGLView::SplitGLView(const TGWindow *p, UInt_t w, UInt_t h, Bool_t embed) :
       // projections
       fRhoZMgr = new TEveProjectionManager();
       gEve->AddElement(fRhoZMgr, (TEveElement *)s);
-      gEve->AddToListTree(fRhoZMgr, kTRUE);
+      gEve->AddToListTree(fRhoZMgr, kFALSE);
    }
 
    // get bottom left split frame
@@ -771,7 +771,7 @@ SplitGLView::SplitGLView(const TGWindow *p, UInt_t w, UInt_t h, Bool_t embed) :
       // projections
       fRPhiMgr = new TEveProjectionManager();
       gEve->AddElement(fRPhiMgr, (TEveElement *)s);
-      gEve->AddToListTree(fRPhiMgr, kTRUE);
+      gEve->AddToListTree(fRPhiMgr, kFALSE);
    }
 
    // get bottom right frame
index 46d6641..4b4f7f2 100644 (file)
@@ -262,7 +262,8 @@ TEveElementList* esd_tracks_vertex_cut()
 
   AliESDEvent* esd = AliEveEventManager::AssertESD();
 
-  TEveElementList* cont = new TEveElementList("ESD Tracks", 0, kTRUE);
+  TEveElementList* cont = new TEveElementList("ESD Tracks");
+
   gEve->AddElement(cont);
   TEveTrackList *tl[5];
   Int_t            tc[5];
index b435928..4bea974 100644 (file)
@@ -57,7 +57,7 @@ void visscan_init()
 
 
   // geometry
-  gGeomGentle    = geom_gentle();
+  gGeomGentle = geom_gentle();
   if (gShowTRD) gGeomGentleTRD = geom_gentle_trd();
 
 
@@ -86,6 +86,8 @@ void visscan_init()
   gAliEveEvent->AddNewEventCommand("on_new_event();");
   gAliEveEvent->GotoEvent(0);
 
+  gEve->EditElement(g_trkcnt);
+
   gEve->Redraw3D(kTRUE);
 }