From Bogdan:
authormtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 22 Jan 2009 18:14:34 +0000 (18:14 +0000)
committermtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 22 Jan 2009 18:14:34 +0000 (18:14 +0000)
Add preliminary version of the gentle MUON geometry (need extension in
ROOT for proper one) and the necessary macros to include it in the
"scan" viewers.

Some minor changes in AliEveMUONTrack and MUON_display* macros.

From Matevz:

Clone anyscan_init.C over visscan_init.C - now they are identical.
anyscan_init.C is now deprecated and will be removed soon.

Remove obsolete alice-macros/SplitGLView.C. All functionality (and
more) now available from the EVE window manager.

Set svn:keywords of all macros and alice-macros to Id.

19 files changed:
EVE/EveDet/AliEveMUONTrack.cxx
EVE/alice-data/gentle_geo_muon.root [new file with mode: 0644]
EVE/alice-macros/MUON_displayData.C
EVE/alice-macros/MUON_displaySimu.C
EVE/alice-macros/SplitGLView.C [deleted file]
EVE/alice-macros/acorde_raw.C
EVE/alice-macros/aod_HF.C
EVE/alice-macros/esd_cascade_points.C
EVE/alice-macros/event_first.C
EVE/alice-macros/event_last.C
EVE/alice-macros/fmd_hits2.C
EVE/alice-macros/geom_gentle_muon.C [new file with mode: 0644]
EVE/alice-macros/geom_gentle_trd.C
EVE/alice-macros/its_common_foos.C
EVE/alice-macros/kine_print.C
EVE/alice-macros/tpc_raw.C
EVE/alice-macros/trd_clusters.C
EVE/macros/anyscan_init.C
EVE/macros/visscan_init.C

index cd2e9a5ab5435473e050753313cca5d2190be491..20ca3c75598179d9f4d05326f5606f40a4c74103 100644 (file)
@@ -529,7 +529,6 @@ void AliEveMUONTrack::MakeMUONTrack(AliMUONTrack *mtrack)
     if (iHit == 0) {
       if (IsMUONTrack() || IsESDTrack()) {
        pt = TMath::Sqrt(trackParam->Px()*trackParam->Px()+trackParam->Py()*trackParam->Py());
-       printf("Set line color = %d \n",ColorIndex(pt));
        SetLineColor(ColorIndex(pt));
       }
       pv[0] = trackParam->Px();
diff --git a/EVE/alice-data/gentle_geo_muon.root b/EVE/alice-data/gentle_geo_muon.root
new file mode 100644 (file)
index 0000000..c121d45
Binary files /dev/null and b/EVE/alice-data/gentle_geo_muon.root differ
index 0514b1ef13d05badd3f7a2d2c1f1833c818e1a63..ea09a82fd1d6815922d2c071e45501bb8f1448a8 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: MUON_display.C 24485 2008-03-13 15:27:38Z mtadel $
+// $Id$
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
 
 /**************************************************************************
@@ -61,7 +61,7 @@ void MUON_displayData(Bool_t fromRaw = kFALSE, Bool_t showTracks = kTRUE, Bool_t
   g_fromRaw = fromRaw;
 
   TString dataPath = TString(AliEveEventManager::GetMaster()->GetTitle());
-  dataPath.Append("/rawmuon.root");
+  dataPath.Append("/raw.root");
 
   AliRunLoader* rl =  AliEveEventManager::AssertRunLoader();
   g_muon_data = new AliEveMUONData;
index 05cf74aa8bab3b463536daff2dc468d48c90377f..abd20375f04838be4c1ab668db5043aef5bf7a7c 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: MUON_display.C 24485 2008-03-13 15:27:38Z mtadel $
+// $Id$
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
 
 /**************************************************************************
@@ -61,7 +61,7 @@ void MUON_displaySimu(Bool_t fromRaw = kFALSE, Bool_t showTracks = kTRUE, Bool_t
   g_fromRaw = fromRaw;
 
   TString dataPath = TString(AliEveEventManager::GetMaster()->GetTitle());
-  dataPath.Append("/rawmuon.root");
+  dataPath.Append("/raw.root");
 
   AliRunLoader* rl =  AliEveEventManager::AssertRunLoader();
   g_muon_data = new AliEveMUONData;
diff --git a/EVE/alice-macros/SplitGLView.C b/EVE/alice-macros/SplitGLView.C
deleted file mode 100644 (file)
index 5d901a4..0000000
+++ /dev/null
@@ -1,1421 +0,0 @@
-
-#include "TApplication.h"
-#include "TSystem.h"
-#include "TGFrame.h"
-#include "TGLayout.h"
-#include "TGSplitter.h"
-#include "TGLWidget.h"
-#include "TEvePad.h"
-#include "TGeoManager.h"
-#include "TString.h"
-#include "TGMenu.h"
-#include "TGStatusBar.h"
-#include "TGFileDialog.h"
-#include "TGMsgBox.h"
-#include "TGLPhysicalShape.h"
-#include "TGLLogicalShape.h"
-#include "HelpText.h"
-#include "TClass.h"
-#include "Riostream.h"
-#include "TEnv.h"
-#include "TGListTree.h"
-#include "TOrdCollection.h"
-#include "TArrayF.h"
-#include "TGHtml.h"
-#include "TPRegexp.h"
-
-#include "TEveManager.h"
-#include "TEveViewer.h"
-#include "TEveBrowser.h"
-#include "TEveProjectionManager.h"
-#include "TEveGeoNode.h"
-#include "TEveEventManager.h"
-#include "TEveTrack.h"
-#include "TEveSelection.h"
-
-#include "TRootEmbeddedCanvas.h"
-#include "TGSplitFrame.h"
-#include "TGLOverlayButton.h"
-#include "TGLEmbeddedViewer.h"
-#include "TGShapedFrame.h"
-#include "TGButton.h"
-#include "TGTab.h"
-#include "TEnv.h"
-
-#include "TCanvas.h"
-#include "TFormula.h"
-#include "TF1.h"
-#include "TH1F.h"
-
-#ifdef WIN32
-#include <TWin32SplashThread.h>
-#endif
-
-const char *filetypes[] = { 
-   "ROOT files",    "*.root",
-   "All files",     "*",
-   0,               0 
-};
-
-const char *rcfiletypes[] = { 
-   "All files",     "*",
-   0,               0 
-};
-
-////////////////////////////////////////////////////////////////////////////////
-class TGShapedToolTip : public TGShapedFrame {
-
-private:
-   TGShapedToolTip(const TGShapedToolTip&); // Not implemented
-   TGShapedToolTip& operator=(const TGShapedToolTip&); // Not implemented
-
-protected:
-   Int_t                 fTextX, fTextY, fTextH;
-   TString               fTextCol;
-
-   TRootEmbeddedCanvas  *fEc;       // embedded canvas for histogram
-   TH1                  *fHist;     // user histogram
-   TString               fText;     // info (as tool tip) text
-
-   virtual void          DoRedraw() {}
-
-public:
-   TGShapedToolTip(const char *picname, Int_t cx=0, Int_t cy=0, Int_t cw=0, 
-                   Int_t ch=0, Int_t tx=0, Int_t ty=0, Int_t th=0, 
-                   const char *col="#ffffff");
-   virtual ~TGShapedToolTip();
-
-   virtual void   CloseWindow();
-   void           CreateCanvas(Int_t cx, Int_t cy, Int_t cw, Int_t ch);
-   void           CreateCanvas(Int_t cw, Int_t ch, TGLayoutHints *hints);
-   TH1           *GetHisto() const { return fHist; }
-   const char    *GetText() const { return fText.Data(); }
-   void           Refresh();
-   void           SetHisto(TH1 *hist);
-   void           SetText(const char *text);
-   void           SetTextColor(const char *col);
-   void           SetTextAttributes(Int_t tx, Int_t ty, Int_t th, const char *col=0);
-   void           Show(Int_t x, Int_t y, const char *text = 0, TH1 *hist = 0);
-
-   ClassDef(TGShapedToolTip, 0) // Shaped composite frame
-};
-
-////////////////////////////////////////////////////////////////////////////////
-class HtmlObjTable : public TObject {
-public:                     // make them public for shorter code
-
-   TString   fName;
-   Int_t     fNValues;      // number of values
-   Int_t     fNFields;      // number of fields
-   TArrayF  *fValues;
-   TString  *fLabels;
-   Bool_t    fExpand;
-
-   TString   fHtml;         // HTML output code
-
-   void Build();
-   void BuildTitle();
-   void BuildLabels();
-   void BuildTable();
-
-public:
-   HtmlObjTable(const char *name, Int_t nfields, Int_t nvals, Bool_t exp=kTRUE);
-   virtual ~HtmlObjTable();
-
-   void     SetLabel(Int_t col, const char *label) { fLabels[col] = label; }
-   void     SetValue(Int_t col, Int_t row, Float_t val) { fValues[col].SetAt(val, row); }
-   TString  Html() const { return fHtml; }
-
-   ClassDef(HtmlObjTable, 0);
-};
-
-////////////////////////////////////////////////////////////////////////////////
-class HtmlSummary {
-public:                           // make them public for shorter code
-   Int_t           fNTables;
-   TOrdCollection *fObjTables;    // ->array of object tables
-   TString         fHtml;         // output HTML string
-   TString         fTitle;        // page title
-   TString         fHeader;       // HTML header
-   TString         fFooter;       // HTML footer
-
-   void     MakeHeader();
-   void     MakeFooter();
-
-public:
-   HtmlSummary(const char *title);
-   virtual ~HtmlSummary();
-
-   HtmlObjTable  *AddTable(const char *name, Int_t nfields, Int_t nvals, 
-                           Bool_t exp=kTRUE, Option_t *opt="");
-   HtmlObjTable  *GetTable(Int_t at) const { return (HtmlObjTable *)fObjTables->At(at); }
-   void           Build();
-   void           Clear(Option_t *option="");
-   void           Reset(Option_t *option="");
-   TString        Html() const { return fHtml; }
-
-   ClassDef(HtmlSummary, 0);
-};
-
-////////////////////////////////////////////////////////////////////////////////
-class SplitGLView : public TGMainFrame {
-
-public:
-   enum EMyCommands {
-      kFileOpen, kFileExit, kFileLoadConfig, kFileSaveConfig,
-      kHelpAbout, kGLPerspYOZ, kGLPerspXOZ, kGLPerspXOY, kGLXOY,
-      kGLXOZ, kGLZOY, kGLOrthoRotate, kGLOrthoDolly, kSceneUpdate, 
-      kSceneUpdateAll, kSummaryUpdate
-   };
-
-private:
-   TEvePad               *fPad;           // pad used as geometry container
-   TGSplitFrame          *fSplitFrame;    // main (first) split frame
-   TGLEmbeddedViewer     *fViewer0;       // main GL viewer
-   TGLEmbeddedViewer     *fViewer1;       // first GL viewer
-   TGLEmbeddedViewer     *fViewer2;       // second GL viewer
-   TGLEmbeddedViewer     *fActViewer;     // actual (active) GL viewer
-   static HtmlSummary    *fgHtmlSummary;  // summary HTML table
-   static TGHtml         *fgHtml;
-   TGMenuBar             *fMenuBar;       // main menu bar
-   TGPopupMenu           *fMenuFile;      // 'File' popup menu
-   TGPopupMenu           *fMenuHelp;      // 'Help' popup menu
-   TGPopupMenu           *fMenuCamera;    // 'Camera' popup menu
-   TGPopupMenu           *fMenuScene;     // 'Scene' popup menu
-   TGStatusBar           *fStatusBar;     // status bar
-   TGShapedToolTip       *fShapedToolTip; // shaped tooltip
-   Bool_t                 fIsEmbedded;
-
-   TEveViewer            *fViewer[3];
-   TEveProjectionManager *fRPhiMgr;
-   TEveProjectionManager *fRhoZMgr;
-
-public:
-   SplitGLView(const TGWindow *p=0, UInt_t w=800, UInt_t h=600, Bool_t embed=kFALSE);
-   virtual ~SplitGLView();
-
-   void           ItemClicked(TGListTreeItem *item, Int_t btn, Int_t x, Int_t y);
-   void           HandleMenu(Int_t id);
-   void           OnClicked(TObject *obj);
-   void           OnMouseIdle(TGLPhysicalShape *shape, UInt_t posx, UInt_t posy);
-   void           OnMouseOver(TGLPhysicalShape *shape);
-   void           OnViewerActivated();
-   void           OpenFile(const char *fname);
-   void           SwapToMainView(TGLViewerBase *viewer);
-   void           ToggleOrthoRotate();
-   void           ToggleOrthoDolly();
-   void           UnDock(TGLViewerBase *viewer);
-   void           LoadConfig(const char *fname);
-   void           SaveConfig(const char *fname);
-   static void    UpdateSummary();
-
-   TEveProjectionManager *GetRPhiMgr() const { return fRPhiMgr; }
-   TEveProjectionManager *GetRhoZMgr() const { return fRhoZMgr; }
-
-   ClassDef(SplitGLView, 0)
-};
-
-TEveProjectionManager *gRPhiMgr = 0;
-TEveProjectionManager *gRhoZMgr = 0;
-
-ClassImp(TGShapedToolTip)
-ClassImp(HtmlObjTable)
-ClassImp(HtmlSummary)
-ClassImp(SplitGLView)
-
-HtmlSummary *SplitGLView::fgHtmlSummary = 0;
-TGHtml *SplitGLView::fgHtml = 0;
-
-//______________________________________________________________________________
-TGShapedToolTip::TGShapedToolTip(const char *pname, Int_t cx, Int_t cy, Int_t cw, 
-                             Int_t ch, Int_t tx, Int_t ty, Int_t th, 
-                             const char *col) : 
-   TGShapedFrame(pname, gClient->GetDefaultRoot(), 400, 300, kTempFrame | 
-                 kHorizontalFrame), fEc(0), fHist(0)
-{
-   // Shaped window constructor
-
-   fTextX = tx; fTextY = ty; fTextH = th;
-   if (col)
-      fTextCol = col;
-   else
-      fTextCol = "0x000000";
-
-   // create the embedded canvas
-   if ((cx > 0) && (cy > 0) && (cw > 0) && (ch > 0)) {
-      Int_t lhRight  = fWidth-cx-cw;
-      Int_t lhBottom = fHeight-cy-ch;
-      fEc = new TRootEmbeddedCanvas("ec", this, cw, ch, 0);
-      AddFrame(fEc, new TGLayoutHints(kLHintsTop | kLHintsLeft, cx, 
-                                      lhRight, cy, lhBottom));
-   }
-   MapSubwindows();
-   Resize();
-   Resize(fBgnd->GetWidth(), fBgnd->GetHeight());
-}
-
-//______________________________________________________________________________
-TGShapedToolTip::~TGShapedToolTip() 
-{
-   // Destructor.
-
-   if (fHist)
-      delete fHist;
-   if (fEc)
-      delete fEc;
-}
-
-//______________________________________________________________________________
-void TGShapedToolTip::CloseWindow() 
-{
-   // Close shaped window.
-   
-   DeleteWindow();
-}
-
-//______________________________________________________________________________
-void TGShapedToolTip::Refresh()
-{
-   // Redraw the window with current attributes.
-
-   const char *str = fText.Data();
-   char *string = strdup(str);
-   Int_t nlines = 0, size = fTextH;
-   TString fp = gEnv->GetValue("Root.TTFontPath", "");
-   TString ar = fp + "/arial.ttf";
-   char *s = strtok((char *)string, "\n");
-   TImage *img = (TImage*)fImage->Clone("img");
-   img->DrawText(fTextX, fTextY+(nlines*size), s, size, fTextCol, ar);
-   while ((s = strtok(0, "\n"))) {
-      nlines++;
-      img->DrawText(fTextX, fTextY+(nlines*size), s, size, fTextCol, ar);
-   }
-   img->PaintImage(fId, 0, 0, 0, 0, 0, 0, "opaque");
-   free(string);
-   delete img;
-   gVirtualX->Update();
-}
-
-//______________________________________________________________________________
-void TGShapedToolTip::CreateCanvas(Int_t cx, Int_t cy, Int_t cw, Int_t ch)
-{
-
-   // create the embedded canvas
-   Int_t lhRight  = fWidth-cx-cw;
-   Int_t lhBottom = fHeight-cy-ch;
-   fEc = new TRootEmbeddedCanvas("ec", this, cw, ch, 0);
-   AddFrame(fEc, new TGLayoutHints(kLHintsTop | kLHintsLeft, cx, 
-                                   lhRight, cy, lhBottom));
-   MapSubwindows();
-   Resize();
-   Resize(fBgnd->GetWidth(), fBgnd->GetHeight());
-   if (IsMapped()) {
-      Refresh();
-   }
-}
-
-//______________________________________________________________________________
-void TGShapedToolTip::CreateCanvas(Int_t cw, Int_t ch, TGLayoutHints *hints)
-{
-   // Create the embedded canvas.
-
-   fEc = new TRootEmbeddedCanvas("ec", this, cw, ch, 0);
-   AddFrame(fEc, hints);
-   MapSubwindows();
-   Resize();
-   Resize(fBgnd->GetWidth(), fBgnd->GetHeight());
-   if (IsMapped()) {
-      Refresh();
-   }
-}
-
-//______________________________________________________________________________
-void TGShapedToolTip::SetHisto(TH1 *hist)
-{
-   // Set which histogram has to be displayed in the embedded canvas.
-
-   if (hist) {
-      if (fHist) {
-         delete fHist;
-         if (fEc)
-            fEc->GetCanvas()->Clear();
-      }
-      fHist = (TH1 *)hist->Clone();
-      if (fEc) {
-         fEc->GetCanvas()->SetBorderMode(0);
-         fEc->GetCanvas()->SetFillColor(10);
-         fEc->GetCanvas()->cd();
-         fHist->Draw();
-         fEc->GetCanvas()->Update();
-      }
-   }
-}
-
-//______________________________________________________________________________
-void TGShapedToolTip::SetText(const char *text)
-{
-   // Set which text has to be displayed.
-
-   if (text) {
-      fText = text;
-   }
-   if (IsMapped())
-      Refresh();
-}
-
-//______________________________________________________________________________
-void TGShapedToolTip::SetTextColor(const char *col)
-{
-   // Set text color.
-
-   fTextCol = col;
-   if (IsMapped())
-      Refresh();
-}
-
-//______________________________________________________________________________
-void TGShapedToolTip::SetTextAttributes(Int_t tx, Int_t ty, Int_t th, 
-                                        const char *col)
-{
-   // Set text attributes (position, size and color).
-
-   fTextX = tx; fTextY = ty; fTextH = th;
-   if (col)
-      fTextCol = col;
-   if (IsMapped())
-      Refresh();
-}
-
-//______________________________________________________________________________
-void TGShapedToolTip::Show(Int_t x, Int_t y, const char *text, TH1 *hist)
-{
-   // Show (popup) the shaped window at location x,y and possibly
-   // set the text and histogram to be displayed.
-
-   Move(x, y);
-   MapWindow();
-
-   if (text)
-      SetText(text);
-   if (hist)
-      SetHisto(hist);
-   // end of demo code -------------------------------------------
-   if (fHist) {
-      fEc->GetCanvas()->SetBorderMode(0);
-      fEc->GetCanvas()->SetFillColor(10);
-      fEc->GetCanvas()->cd();
-      fHist->Draw();
-      fEc->GetCanvas()->Update();
-   }
-   Refresh();
-}
-
-//______________________________________________________________________________
-HtmlObjTable::HtmlObjTable(const char *name, Int_t nfields, Int_t nvals, Bool_t exp) : 
-   fName(name), fNValues(nvals), fNFields(nfields), fExpand(exp)
-{
-   // Constructor.
-
-   fValues = new TArrayF[fNFields];
-   for (int i=0;i<fNFields;i++)
-      fValues[i].Set(nvals);
-   fLabels = new TString[fNFields];
-}
-
-//______________________________________________________________________________
-HtmlObjTable::~HtmlObjTable()
-{
-   // Destructor.
-
-   delete [] fValues;
-   delete [] fLabels;
-}
-
-//______________________________________________________________________________
-void HtmlObjTable::Build()
-{
-   // Build HTML code.
-
-   fHtml = "<table width=100% border=1 cellspacing=0 cellpadding=0 bgcolor=f0f0f0> ",
-
-   BuildTitle();
-   if (fExpand && (fNFields > 0) && (fNValues > 0)) {
-      BuildLabels();
-      BuildTable();
-   }
-
-   fHtml += "</table>";
-}
-
-//______________________________________________________________________________
-void HtmlObjTable::BuildTitle()
-{
-   // Build table title.
-   
-   fHtml += "<tr><td colspan=";
-   fHtml += Form("%d>", fNFields+1);
-   fHtml += "<table width=100% border=0 cellspacing=2 cellpadding=0 bgcolor=6e6ea0>";
-   fHtml += "<tr><td align=left>";
-   fHtml += "<font face=Verdana size=3 color=ffffff><b><i>";
-   fHtml += fName;
-   fHtml += "</i></b></font></td>";
-   fHtml += "<td>";
-   fHtml += "<td align=right> ";
-   fHtml += "<font face=Verdana size=3 color=ffffff><b><i>";
-   fHtml += Form("Size = %d", fNValues);
-   fHtml += "</i></b></font></td></tr>";
-   fHtml += "</table>";
-   fHtml += "</td></tr>";
-}
-
-//______________________________________________________________________________
-void HtmlObjTable::BuildLabels()
-{
-   // Build table labels.
-
-   Int_t i;
-   fHtml += "<tr bgcolor=c0c0ff>";
-   fHtml += "<th> </th>"; // for the check boxes
-   for (i=0;i<fNFields;i++) {
-      fHtml += "<th> ";
-      fHtml += fLabels[i];
-      fHtml += " </th>"; // for the check boxes
-   }
-   fHtml += "</tr>";
-}
-
-//______________________________________________________________________________
-void HtmlObjTable::BuildTable()
-{
-   // Build part of table with values.
-
-   for (int i = 0; i < fNValues; i++) {
-      if (i%2)
-         fHtml += "<tr bgcolor=e0e0ff>";
-      else
-         fHtml += "<tr bgcolor=ffffff>";
-      
-      TString name = fName;
-      name.ReplaceAll(" ", "_");
-      // checkboxes
-      fHtml += "<td bgcolor=d0d0ff align=\"center\">";
-      fHtml += "<input type=\"checkbox\" name=\"";
-      fHtml += name;
-      fHtml += Form("[%d]\">",i);
-      fHtml += "</td>";
-
-      for (int j = 0; j < fNFields; j++) {
-         fHtml += "<td width=";
-         fHtml += Form("%d%%", 100/fNFields);
-         fHtml += " align=\"center\"";
-         fHtml += ">";
-         fHtml += Form("%1.4f", fValues[j][i]);
-         fHtml += "</td>";
-      }
-      fHtml += "</tr> ";
-   }
-}
-
-//______________________________________________________________________________
-HtmlSummary::HtmlSummary(const char *title) : fNTables(0), fTitle(title)
-{
-   // Constructor.
-
-   fObjTables = new TOrdCollection();
-}
-
-//______________________________________________________________________________
-HtmlSummary::~HtmlSummary()
-{
-   // Destructor.
-
-   Reset();
-}
-
-//______________________________________________________________________________
-HtmlObjTable *HtmlSummary::AddTable(const char *name, Int_t nfields, Int_t nvals,
-                                    Bool_t exp, Option_t *option)
-{
-   // Add a new table in our list of tables.
-
-   TString opt = option;
-   opt.ToLower();
-   HtmlObjTable *table = new HtmlObjTable(name, nfields, nvals, exp);
-   fNTables++;
-   if (opt.Contains("first"))
-      fObjTables->AddFirst(table);
-   else
-      fObjTables->Add(table);
-   return table;
-}
-
-//______________________________________________________________________________
-void HtmlSummary::Clear(Option_t *option)
-{
-   // Clear the table list.
-
-   if (option && option[0] == 'D')
-      fObjTables->Delete(option);
-   else
-      fObjTables->Clear(option);
-   fNTables = 0;
-}
-
-//______________________________________________________________________________
-void HtmlSummary::Reset(Option_t *)
-{
-   // Reset (delete) the table list;
-
-   delete fObjTables; fObjTables = 0;
-   fNTables = 0;
-}
-
-//______________________________________________________________________________
-void HtmlSummary::Build()
-{
-   // Build the summary.
-
-   MakeHeader();
-   for (int i=0;i<fNTables;i++) {
-      GetTable(i)->Build();
-      fHtml += GetTable(i)->Html();
-   }
-   MakeFooter();
-}
-
-//______________________________________________________________________________
-void HtmlSummary::MakeHeader()
-{
-   // Make HTML header.
-
-   fHeader  = "<html><head><title>";
-   fHeader += fTitle;
-   fHeader += "</title></head><body>";
-   fHeader += "<center><h2><font color=#2222ee><i>";
-   fHeader += fTitle;
-   fHeader += "</i></font></h2></center>";
-   fHtml    = fHeader;
-}
-
-//______________________________________________________________________________
-void HtmlSummary::MakeFooter()
-{
-   // Make HTML footer.
-
-   fFooter  = "<br><p><br><center><strong><font size=2 color=#2222ee>";
-   fFooter += "Example of using Html widget to display tabular data";
-   fFooter += "<br>";
-   fFooter += "© 2007-2008 Bertrand Bellenot";
-   fFooter += "</font></strong></center></body></html>";  
-   fHtml   += fFooter;
-}
-
-//______________________________________________________________________________
-SplitGLView::SplitGLView(const TGWindow *p, UInt_t w, UInt_t h, Bool_t embed) :
-   TGMainFrame(p, w, h), fActViewer(0), fShapedToolTip(0), fIsEmbedded(embed)
-{
-   // Main frame constructor.
-
-   TGSplitFrame    *frm    = 0;
-   TEveScene       *s      = 0;
-
-   // create the "file" popup menu
-   fMenuFile = new TGPopupMenu(gClient->GetRoot());
-   fMenuFile->AddEntry("&Open...", kFileOpen);
-   fMenuFile->AddSeparator();
-   fMenuFile->AddEntry( "&Update Summary", kSummaryUpdate);
-   fMenuFile->AddSeparator();
-   fMenuFile->AddEntry("&Load Config...", kFileLoadConfig);
-   fMenuFile->AddEntry("&Save Config...", kFileSaveConfig);
-   fMenuFile->AddSeparator();
-   fMenuFile->AddEntry("E&xit", kFileExit);
-
-   // create the "camera" popup menu
-   fMenuCamera = new TGPopupMenu(gClient->GetRoot());
-   fMenuCamera->AddEntry("Perspective (Floor XOZ)", kGLPerspXOZ);
-   fMenuCamera->AddEntry("Perspective (Floor YOZ)", kGLPerspYOZ);
-   fMenuCamera->AddEntry("Perspective (Floor XOY)", kGLPerspXOY);
-   fMenuCamera->AddEntry("Orthographic (XOY)", kGLXOY);
-   fMenuCamera->AddEntry("Orthographic (XOZ)", kGLXOZ);
-   fMenuCamera->AddEntry("Orthographic (ZOY)", kGLZOY);
-   fMenuCamera->AddSeparator();
-   fMenuCamera->AddEntry("Ortho allow rotate", kGLOrthoRotate);
-   fMenuCamera->AddEntry("Ortho allow dolly",  kGLOrthoDolly);
-
-   fMenuScene = new TGPopupMenu(gClient->GetRoot());
-   fMenuScene->AddEntry("&Update Current", kSceneUpdate);
-   fMenuScene->AddEntry("Update &All", kSceneUpdateAll);
-
-   // create the "help" popup menu
-   fMenuHelp = new TGPopupMenu(gClient->GetRoot());
-   fMenuHelp->AddEntry("&About", kHelpAbout);
-
-   // create the main menu bar
-   fMenuBar = new TGMenuBar(this, 1, 1, kHorizontalFrame);
-   fMenuBar->AddPopup("&File", fMenuFile, new TGLayoutHints(kLHintsTop | 
-                                                            kLHintsLeft, 0, 4, 0, 0));
-   fMenuBar->AddPopup("&Camera", fMenuCamera, new TGLayoutHints(kLHintsTop | 
-                                                                kLHintsLeft, 0, 4, 0, 0));
-   fMenuBar->AddPopup("&Scene", fMenuScene, new TGLayoutHints(kLHintsTop | 
-                                                              kLHintsLeft, 0, 4, 0, 0));
-   fMenuBar->AddPopup("&Help", fMenuHelp, new TGLayoutHints(kLHintsTop | 
-                                                            kLHintsRight));
-
-   AddFrame(fMenuBar, new TGLayoutHints(kLHintsTop | kLHintsExpandX));
-
-   // connect menu signals to our menu handler slot
-   fMenuFile->Connect("Activated(Int_t)", "SplitGLView", this,
-                      "HandleMenu(Int_t)");
-   fMenuCamera->Connect("Activated(Int_t)", "SplitGLView", this,
-                        "HandleMenu(Int_t)");
-   fMenuScene->Connect("Activated(Int_t)", "SplitGLView", this,
-                       "HandleMenu(Int_t)");
-   fMenuHelp->Connect("Activated(Int_t)", "SplitGLView", this,
-                      "HandleMenu(Int_t)");
-   
-   if (fIsEmbedded && gEve) {
-      // use status bar from the browser
-      fStatusBar = gEve->GetBrowser()->GetStatusBar();
-   }
-   else {
-      // create the status bar
-      Int_t parts[] = {45, 15, 10, 30};
-      fStatusBar = new TGStatusBar(this, 50, 10);
-      fStatusBar->SetParts(parts, 4);
-      AddFrame(fStatusBar, new TGLayoutHints(kLHintsBottom | kLHintsExpandX, 
-                                             0, 0, 10, 0));
-   }
-
-   // create eve pad (our geometry container)
-   fPad = new TEvePad();
-
-   // create the split frames
-   fSplitFrame = new TGSplitFrame(this, 800, 600);
-   AddFrame(fSplitFrame, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
-   // split horizontaly
-   fSplitFrame->HSplit(350);
-   // split bottom part vartically
-   fSplitFrame->GetSecond()->VSplit(400);
-
-   TGLOverlayButton *but1, *but2, *but3, *but4, *but5, *but6;
-   // get top (main) split frame
-   frm = fSplitFrame->GetFirst();
-   // create (embed) a GL viewer inside
-   fViewer0 = new TGLEmbeddedViewer(frm, fPad);
-   but1 = new TGLOverlayButton(fViewer0, "Swap", 10.0, -10.0, 55.0, 16.0);
-   but1->Connect("Clicked(TGLViewerBase*)", "SplitGLView", this, "SwapToMainView(TGLViewerBase*)");
-   but2 = new TGLOverlayButton(fViewer0, "Undock", 70.0, -10.0, 55.0, 16.0);
-   but2->Connect("Clicked(TGLViewerBase*)", "SplitGLView", this, "UnDock(TGLViewerBase*)");
-   frm->AddFrame(fViewer0->GetFrame(), new TGLayoutHints(kLHintsExpandX | 
-                                                         kLHintsExpandY));
-   // set the camera to perspective (XOZ) for this viewer
-   fViewer0->SetCurrentCamera(TGLViewer::kCameraPerspXOZ);
-   // connect signal we are interested to
-   fViewer0->Connect("MouseOver(TGLPhysicalShape*)", "SplitGLView", this, 
-                     "OnMouseOver(TGLPhysicalShape*)");
-   fViewer0->Connect("Activated()", "SplitGLView", this, 
-                     "OnViewerActivated()");
-   fViewer0->Connect("MouseIdle(TGLPhysicalShape*,UInt_t,UInt_t)", 
-                     "SplitGLView", this, 
-                     "OnMouseIdle(TGLPhysicalShape*,UInt_t,UInt_t)");
-   fViewer0->Connect("Clicked(TObject*)", "SplitGLView", this, 
-                     "OnClicked(TObject*)");
-   fViewer[0] = new TEveViewer("SplitGLViewer[0]");
-   fViewer[0]->SetGLViewer(fViewer0, fViewer0->GetFrame());
-   fViewer[0]->IncDenyDestroy();
-   if (fIsEmbedded && gEve) {
-      fViewer[0]->AddScene(gEve->GetGlobalScene());
-      fViewer[0]->AddScene(gEve->GetEventScene());
-      gEve->AddElement(fViewer[0], gEve->GetViewers());
-      s = gEve->SpawnNewScene("Rho-Z Projection");
-      // projections
-      fRhoZMgr = new TEveProjectionManager();
-      gEve->AddElement(fRhoZMgr, (TEveElement *)s);
-      gEve->AddToListTree(fRhoZMgr, kFALSE);
-   }
-
-   // get bottom left split frame
-   frm = fSplitFrame->GetSecond()->GetFirst();
-
-   // create (embed) a GL viewer inside
-   fViewer1 = new TGLEmbeddedViewer(frm, fPad);
-   but3 = new TGLOverlayButton(fViewer1, "Swap", 10.0, -10.0, 55.0, 16.0);
-   but3->Connect("Clicked(TGLViewerBase*)", "SplitGLView", this, "SwapToMainView(TGLViewerBase*)");
-   but4 = new TGLOverlayButton(fViewer1, "Undock", 70.0, -10.0, 55.0, 16.0);
-   but4->Connect("Clicked(TGLViewerBase*)", "SplitGLView", this, "UnDock(TGLViewerBase*)");
-   frm->AddFrame(fViewer1->GetFrame(), new TGLayoutHints(kLHintsExpandX | 
-                   kLHintsExpandY));
-
-   // set the camera to orthographic (XOY) for this viewer
-   fViewer1->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
-   // connect signal we are interested to
-   fViewer1->Connect("MouseOver(TGLPhysicalShape*)", "SplitGLView", this, 
-                     "OnMouseOver(TGLPhysicalShape*)");
-   fViewer1->Connect("Activated()", "SplitGLView", this, 
-                     "OnViewerActivated()");
-   fViewer1->Connect("MouseIdle(TGLPhysicalShape*,UInt_t,UInt_t)", 
-                     "SplitGLView", this, 
-                     "OnMouseIdle(TGLPhysicalShape*,UInt_t,UInt_t)");
-   fViewer1->Connect("Clicked(TObject*)", "SplitGLView", this, 
-                     "OnClicked(TObject*)");
-   fViewer[1] = new TEveViewer("SplitGLViewer[1]");
-   fViewer[1]->SetGLViewer(fViewer1, fViewer1->GetFrame());
-   fViewer[1]->IncDenyDestroy();
-   if (fIsEmbedded && gEve) {
-      fRhoZMgr->ImportElements((TEveElement *)gEve->GetGlobalScene());
-      fRhoZMgr->ImportElements((TEveElement *)gEve->GetEventScene());
-      fRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ);
-      fViewer[1]->AddScene(s);
-      gEve->AddElement(fViewer[1], gEve->GetViewers());
-      gRhoZMgr = fRhoZMgr;
-
-      s = gEve->SpawnNewScene("R-Phi Projection");
-      // projections
-      fRPhiMgr = new TEveProjectionManager();
-      gEve->AddElement(fRPhiMgr, (TEveElement *)s);
-      gEve->AddToListTree(fRPhiMgr, kFALSE);
-   }
-
-   // get bottom right frame
-   frm = fSplitFrame->GetSecond()->GetSecond();
-   // create (embed) a GL viewer inside
-   fViewer2 = new TGLEmbeddedViewer(frm, fPad);
-   but5 = new TGLOverlayButton(fViewer2, "Swap", 10.0, -10.0, 55.0, 16.0);
-   but5->Connect("Clicked(TGLViewerBase*)", "SplitGLView", this, "SwapToMainView(TGLViewerBase*)");
-   but6 = new TGLOverlayButton(fViewer2, "Undock", 70.0, -10.0, 55.0, 16.0);
-   but6->Connect("Clicked(TGLViewerBase*)", "SplitGLView", this, "UnDock(TGLViewerBase*)");
-   frm->AddFrame(fViewer2->GetFrame(), new TGLayoutHints(kLHintsExpandX | 
-                   kLHintsExpandY));
-
-   // set the camera to orthographic (XOY) for this viewer
-   fViewer2->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
-   // connect signal we are interested to
-   fViewer2->Connect("MouseOver(TGLPhysicalShape*)", "SplitGLView", this, 
-                     "OnMouseOver(TGLPhysicalShape*)");
-   fViewer2->Connect("Activated()", "SplitGLView", this, 
-                     "OnViewerActivated()");
-   fViewer2->Connect("MouseIdle(TGLPhysicalShape*,UInt_t,UInt_t)", 
-                     "SplitGLView", this, 
-                     "OnMouseIdle(TGLPhysicalShape*,UInt_t,UInt_t)");
-   fViewer2->Connect("Clicked(TObject*)", "SplitGLView", this, 
-                     "OnClicked(TObject*)");
-   fViewer[2] = new TEveViewer("SplitGLViewer[2]");
-   fViewer[2]->SetGLViewer(fViewer2, fViewer2->GetFrame());
-   fViewer[2]->IncDenyDestroy();
-   if (fIsEmbedded && gEve) {
-      fRPhiMgr->ImportElements((TEveElement *)gEve->GetGlobalScene());
-      fRPhiMgr->ImportElements((TEveElement *)gEve->GetEventScene());
-      fRPhiMgr->SetProjection(TEveProjection::kPT_RPhi);
-      fViewer[2]->AddScene(s);
-      gEve->AddElement(fViewer[2], gEve->GetViewers());
-      gRPhiMgr = fRPhiMgr;
-   }
-
-   /*
-   // Summary view ... incomplete
-   frm = fSplitFrame->GetSecond();
-
-   hfrm  = new TGHorizontalFrame(frm);
-   button= new TGPictureButton(hfrm, gClient->GetPicture("$ALICE_ROOT/EVE/alice-data/swap.png"));
-   button->SetToolTipText("Swap to big view");
-   hfrm->AddFrame(button);
-   button->Connect("Clicked()","SplitGLView",this,"SwapToMainView()");
-   fgHtmlSummary = new HtmlSummary("Alice Event Display Summary Table");
-   fgHtml = new TGHtml(hfrm, 100, 100, -1);
-   hfrm->AddFrame(fgHtml, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
-   frm->AddFrame(hfrm, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
-   */
-
-   if (fIsEmbedded && gEve) {
-      gEve->GetListTree()->Connect("Clicked(TGListTreeItem*, Int_t, Int_t, Int_t)",
-                                   "SplitGLView", this, "ItemClicked(TGListTreeItem*, Int_t, Int_t, Int_t)");
-   }
-
-   fShapedToolTip = new TGShapedToolTip("$ALICE_ROOT/EVE/alice-data/Default.png", 120, 22, 160, 110, 
-                                        23, 115, 12, "#ffff80");
-   Resize(GetDefaultSize());
-   MapSubwindows();
-   MapWindow();
-
-   fSplitFrame->Layout();
-   // !!!! LoadConfig(".everc");
-}
-
-//______________________________________________________________________________
-SplitGLView::~SplitGLView()
-{
-   // Clean up main frame...
-   // Cleanup();
-   
-   fMenuFile->Disconnect("Activated(Int_t)", this, "HandleMenu(Int_t)");
-   fMenuCamera->Disconnect("Activated(Int_t)", this, "HandleMenu(Int_t)");
-   fMenuScene->Disconnect("Activated(Int_t)", this, "HandleMenu(Int_t)");
-   fMenuHelp->Disconnect("Activated(Int_t)", this, "HandleMenu(Int_t)");
-   fViewer0->Disconnect("MouseOver(TGLPhysicalShape*)", this, 
-                         "OnMouseOver(TGLPhysicalShape*)");
-   fViewer0->Disconnect("Activated()", this, "OnViewerActivated()");
-   fViewer0->Disconnect("MouseIdle(TGLPhysicalShape*,UInt_t,UInt_t)", 
-                         this, "OnMouseIdle(TGLPhysicalShape*,UInt_t,UInt_t)");
-   fViewer1->Disconnect("MouseOver(TGLPhysicalShape*)", this, 
-                         "OnMouseOver(TGLPhysicalShape*)");
-   fViewer1->Disconnect("Activated()", this, "OnViewerActivated()");
-   fViewer1->Disconnect("MouseIdle(TGLPhysicalShape*,UInt_t,UInt_t)", 
-                         this, "OnMouseIdle(TGLPhysicalShape*,UInt_t,UInt_t)");
-   fViewer2->Disconnect("MouseOver(TGLPhysicalShape*)", this, 
-                         "OnMouseOver(TGLPhysicalShape*)");
-   fViewer2->Disconnect("Activated()", this, "OnViewerActivated()");
-   fViewer2->Disconnect("MouseIdle(TGLPhysicalShape*,UInt_t,UInt_t)", 
-                         this, "OnMouseIdle(TGLPhysicalShape*,UInt_t,UInt_t)");
-   if (!fIsEmbedded) {
-      delete fViewer[0];
-      delete fViewer[1];
-      delete fViewer[2];
-   }
-   delete fShapedToolTip;
-   delete fMenuFile;
-   delete fMenuScene;
-   delete fMenuCamera;
-   delete fMenuHelp;
-   if (!fIsEmbedded)
-      delete fMenuBar;
-   delete fViewer0;
-   delete fViewer1;
-   delete fViewer2;
-   delete fSplitFrame;
-   delete fPad;
-   if (!fIsEmbedded) {
-      delete fStatusBar;
-      gApplication->Terminate(0);
-   }
-}
-
-//______________________________________________________________________________
-void SplitGLView::HandleMenu(Int_t id)
-{
-   // Handle menu items.
-
-   static TString rcdir(".");
-   static TString rcfile(".everc");
-
-   switch (id) {
-
-      case kFileOpen:
-         {
-            static TString dir(".");
-            TGFileInfo fi;
-            fi.fFileTypes = filetypes;
-            fi.fIniDir    = StrDup(dir);
-            new TGFileDialog(gClient->GetRoot(), this, kFDOpen, &fi);
-            if (fi.fFilename)
-               OpenFile(fi.fFilename);
-            dir = fi.fIniDir;
-         }
-         break;
-
-      case kFileLoadConfig:
-         {
-            TGFileInfo fi;
-            fi.fFileTypes = rcfiletypes;
-            fi.fIniDir    = StrDup(rcdir);
-            fi.fFilename  = StrDup(rcfile);
-            new TGFileDialog(gClient->GetRoot(), this, kFDOpen, &fi);
-            if (fi.fFilename) {
-               rcfile = fi.fFilename;
-               LoadConfig(fi.fFilename);
-            }
-            rcdir = fi.fIniDir;
-         }
-         break;
-
-      case kFileSaveConfig:
-         {
-            TGFileInfo fi;
-            fi.fFileTypes = rcfiletypes;
-            fi.fIniDir    = StrDup(rcdir);
-            fi.fFilename  = StrDup(rcfile);
-            new TGFileDialog(gClient->GetRoot(), this, kFDSave, &fi);
-            if (fi.fFilename) {
-               rcfile = fi.fFilename;
-               SaveConfig(fi.fFilename);
-            }
-            rcdir = fi.fIniDir;
-         }
-         break;
-
-      case kFileExit:
-         CloseWindow();
-         break;
-
-      case kGLPerspYOZ:
-         if (fActViewer)
-            fActViewer->SetCurrentCamera(TGLViewer::kCameraPerspYOZ);
-         break;
-      case kGLPerspXOZ:
-         if (fActViewer)
-            fActViewer->SetCurrentCamera(TGLViewer::kCameraPerspXOZ);
-         break;
-      case kGLPerspXOY:
-         if (fActViewer)
-            fActViewer->SetCurrentCamera(TGLViewer::kCameraPerspXOY);
-         break;
-      case kGLXOY:
-         if (fActViewer)
-            fActViewer->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
-         break;
-      case kGLXOZ:
-         if (fActViewer)
-            fActViewer->SetCurrentCamera(TGLViewer::kCameraOrthoXOZ);
-         break;
-      case kGLZOY:
-         if (fActViewer)
-            fActViewer->SetCurrentCamera(TGLViewer::kCameraOrthoZOY);
-         break;
-      case kGLOrthoRotate:
-         ToggleOrthoRotate();
-         break;
-      case kGLOrthoDolly:
-         ToggleOrthoDolly();
-         break;
-
-      case kSceneUpdate:
-         if (fActViewer)
-            fActViewer->UpdateScene();
-         UpdateSummary();
-         break;
-
-      case kSceneUpdateAll:
-         fViewer0->UpdateScene();
-         fViewer1->UpdateScene();
-         fViewer2->UpdateScene();
-         UpdateSummary();
-         break;
-
-      case kSummaryUpdate:
-         UpdateSummary();
-         break;
-
-      case kHelpAbout:
-         {
-#ifdef R__UNIX
-            TString rootx;
-# ifdef ROOTBINDIR
-            rootx = ROOTBINDIR;
-# else
-            rootx = gSystem->Getenv("ROOTSYS");
-            if (!rootx.IsNull()) rootx += "/bin";
-# endif
-            rootx += "/root -a &";
-            gSystem->Exec(rootx);
-#else
-#ifdef WIN32
-            new TWin32SplashThread(kTRUE);
-#else
-            char str[32];
-            sprintf(str, "About ROOT %s...", gROOT->GetVersion());
-            hd = new TRootHelpDialog(this, str, 600, 400);
-            hd->SetText(gHelpAbout);
-            hd->Popup();
-#endif
-#endif
-         }
-         break;
-
-      default:
-         break;
-   }
-}
-
-//______________________________________________________________________________
-void SplitGLView::OnClicked(TObject *obj)
-{
-   // Handle click events in GL viewer
-
-   if (obj)
-      fStatusBar->SetText(Form("User clicked on: \"%s\"", obj->GetName()), 1);
-   else
-      fStatusBar->SetText("", 1);
-}
-
-//______________________________________________________________________________
-void SplitGLView::OnMouseIdle(TGLPhysicalShape *shape, UInt_t posx, UInt_t posy)
-{
-   // Slot used to handle "OnMouseIdle" signal coming from any GL viewer.
-   // We receive a pointer on the physical shape in which the mouse cursor is
-   // and the actual cursor position (x,y)
-
-   Window_t wtarget;
-   Int_t    x = 0, y = 0;
-
-   static TH1F *h1f = 0;
-   TFormula *form1 = new TFormula("form1","abs(sin(x)/x)");
-   form1->Update(); // silent warning about unused variable...
-   TF1 *sqroot = new TF1("sqroot","x*gaus(0) + [3]*form1",0,10);
-   sqroot->SetParameters(10,4,1,20);
-   if (h1f == 0)
-      h1f = new TH1F("h1f","",50,0,10);
-   h1f->Reset();
-   h1f->SetFillColor(45);
-   h1f->SetStats(0);
-   h1f->FillRandom("sqroot",200);
-
-   if (fShapedToolTip) {
-      fShapedToolTip->UnmapWindow();
-   }
-   if (shape && shape->GetLogical() && shape->GetLogical()->GetExternal()) {
-      // get the actual viewer who actually emitted the signal
-      TGLEmbeddedViewer *actViewer = dynamic_cast<TGLEmbeddedViewer*>((TQObject*)gTQSender);
-      // then translate coordinates from the root (screen) coordinates 
-      // to the actual frame (viewer) ones
-      gVirtualX->TranslateCoordinates(actViewer->GetFrame()->GetId(),
-               gClient->GetDefaultRoot()->GetId(), posx, posy, x, y,
-               wtarget);
-      // Then display our tooltip at this x,y location
-      if (fShapedToolTip) {
-         fShapedToolTip->Show(x+5, y+5, Form("%s\n     \n%s",
-                              shape->GetLogical()->GetExternal()->IsA()->GetName(), 
-                              shape->GetLogical()->GetExternal()->GetName()), h1f);
-      }
-   }
-}
-
-//______________________________________________________________________________
-void SplitGLView::OnMouseOver(TGLPhysicalShape *shape)
-{
-   // Slot used to handle "OnMouseOver" signal coming from any GL viewer.
-   // We receive a pointer on the physical shape in which the mouse cursor is.
-
-   // display informations on the physical shape in the status bar
-   if (shape && shape->GetLogical() && shape->GetLogical()->GetExternal())
-      fStatusBar->SetText(Form("Mouse Over: \"%s\"", 
-         shape->GetLogical()->GetExternal()->GetName()), 0);
-   else
-      fStatusBar->SetText("", 0);
-}
-
-//______________________________________________________________________________
-void SplitGLView::OnViewerActivated()
-{
-   // Slot used to handle "Activated" signal coming from any GL viewer.
-   // Used to know which GL viewer is active.
-
-   static Pixel_t green = 0;
-   // set the actual GL viewer frame to default color
-   if (fActViewer && fActViewer->GetFrame())
-      fActViewer->GetFrame()->ChangeBackground(GetDefaultFrameBackground());
-
-   // change the actual GL viewer to the one who emitted the signal
-   // fActViewer = (TGLEmbeddedViewer *)gTQSender;
-   fActViewer = dynamic_cast<TGLEmbeddedViewer*>((TQObject*)gTQSender);
-
-   if (fActViewer == 0) {
-      printf ("dyncast failed ...\n");
-      return;
-   }
-
-   // get the highlight color (only once)
-   if (green == 0) {
-      gClient->GetColorByName("green", green);
-   }
-   // set the new actual GL viewer frame to highlight color
-   if (fActViewer->GetFrame())
-      fActViewer->GetFrame()->ChangeBackground(green);
-
-   // update menu entries to match actual viewer's options
-   if (fActViewer->GetOrthoXOYCamera()->GetDollyToZoom() &&
-       fActViewer->GetOrthoXOZCamera()->GetDollyToZoom() &&
-       fActViewer->GetOrthoZOYCamera()->GetDollyToZoom())
-      fMenuCamera->UnCheckEntry(kGLOrthoDolly);
-   else
-      fMenuCamera->CheckEntry(kGLOrthoDolly);
-
-   if (fActViewer->GetOrthoXOYCamera()->GetEnableRotate() &&
-       fActViewer->GetOrthoXOYCamera()->GetEnableRotate() &&
-       fActViewer->GetOrthoXOYCamera()->GetEnableRotate())
-      fMenuCamera->CheckEntry(kGLOrthoRotate);
-   else
-      fMenuCamera->UnCheckEntry(kGLOrthoRotate);
-}
-
-//______________________________________________________________________________
-void SplitGLView::OpenFile(const char *fname)
-{
-   // Open a Root file to display a geometry in the GL viewers.
-
-   TString filename = fname;
-   // check if the file type is correct
-   if (!filename.EndsWith(".root")) {
-      new TGMsgBox(gClient->GetRoot(), this, "OpenFile",
-                   Form("The file \"%s\" is not a root file!", fname),
-                   kMBIconExclamation, kMBOk);
-      return;
-   }
-   // check if the root file contains a geometry
-   if (TGeoManager::Import(fname) == 0) {
-      new TGMsgBox(gClient->GetRoot(), this, "OpenFile",
-                   Form("The file \"%s\" does't contain a geometry", fname),
-                   kMBIconExclamation, kMBOk);
-      return;
-   }
-   gGeoManager->DefaultColors();
-   // delete previous primitives (if any)
-   fPad->GetListOfPrimitives()->Delete();
-   // and add the geometry to eve pad (container)
-   fPad->GetListOfPrimitives()->Add(gGeoManager->GetTopVolume());
-   // paint the geometry in each GL viewer
-   fViewer0->PadPaint(fPad);
-   fViewer1->PadPaint(fPad);
-   fViewer2->PadPaint(fPad);
-}
-
-//______________________________________________________________________________
-void SplitGLView::ToggleOrthoRotate()
-{
-   // Toggle state of the 'Ortho allow rotate' menu entry.
-
-   if (fMenuCamera->IsEntryChecked(kGLOrthoRotate))
-      fMenuCamera->UnCheckEntry(kGLOrthoRotate);
-   else
-      fMenuCamera->CheckEntry(kGLOrthoRotate);
-   Bool_t state = fMenuCamera->IsEntryChecked(kGLOrthoRotate);
-   if (fActViewer) {
-      fActViewer->GetOrthoXOYCamera()->SetEnableRotate(state);
-      fActViewer->GetOrthoXOYCamera()->SetEnableRotate(state);
-      fActViewer->GetOrthoXOYCamera()->SetEnableRotate(state);
-   }
-}
-
-//______________________________________________________________________________
-void SplitGLView::ToggleOrthoDolly()
-{
-   // Toggle state of the 'Ortho allow dolly' menu entry.
-
-   if (fMenuCamera->IsEntryChecked(kGLOrthoDolly))
-      fMenuCamera->UnCheckEntry(kGLOrthoDolly);
-   else
-      fMenuCamera->CheckEntry(kGLOrthoDolly);
-   Bool_t state = ! fMenuCamera->IsEntryChecked(kGLOrthoDolly);
-   if (fActViewer) {
-      fActViewer->GetOrthoXOYCamera()->SetDollyToZoom(state);
-      fActViewer->GetOrthoXOZCamera()->SetDollyToZoom(state);
-      fActViewer->GetOrthoZOYCamera()->SetDollyToZoom(state);
-   }
-}
-
-//______________________________________________________________________________
-void SplitGLView::ItemClicked(TGListTreeItem *item, Int_t, Int_t, Int_t)
-{
-   // Item has been clicked, based on mouse button do:
-
-   static const TEveException eh("SplitGLView::ItemClicked ");
-   TEveElement* re = (TEveElement*)item->GetUserData();
-   if(re == 0) return;
-   TObject* obj = re->GetObject(eh);
-   if (obj->InheritsFrom("TEveViewer")) {
-      TGLViewer *v = ((TEveViewer *)obj)->GetGLViewer();
-      //v->Activated();
-      if (v->InheritsFrom("TGLEmbeddedViewer")) {
-         TGLEmbeddedViewer *ev = (TGLEmbeddedViewer *)v;
-        gVirtualX->SetInputFocus(ev->GetGLWidget()->GetId());
-      }
-   }
-}
-
-//______________________________________________________________________________
-void SplitGLView::LoadConfig(const char *fname)
-{
-
-   Int_t height, width;
-   TEnv *env = new TEnv(fname);
-
-   Int_t mainheight = env->GetValue("MainView.Height", 434);
-   Int_t blwidth    = env->GetValue("Bottom.Left.Width", 266);
-   Int_t bcwidth    = env->GetValue("Bottom.Center.Width", 266);
-   Int_t brwidth    = env->GetValue("Bottom.Right.Width", 266);
-   Int_t top_height = env->GetValue("Right.Tab.Height", 0);
-   Int_t bottom_height = env->GetValue("Bottom.Tab.Height", 0);
-
-   if (fIsEmbedded && gEve) {
-      Int_t sel = env->GetValue("Eve.Selection", gEve->GetSelection()->GetPickToSelect());
-      Int_t hi = env->GetValue("Eve.Highlight", gEve->GetHighlight()->GetPickToSelect());
-      gEve->GetBrowser()->EveMenu(9+sel);
-      gEve->GetBrowser()->EveMenu(13+hi);
-
-      width  = env->GetValue("Eve.Width", (Int_t)gEve->GetBrowser()->GetWidth());
-      height = env->GetValue("Eve.Height", (Int_t)gEve->GetBrowser()->GetHeight());
-      gEve->GetBrowser()->Resize(width, height);
-   }
-
-   // top (main) split frame
-   width = fSplitFrame->GetFirst()->GetWidth();
-   fSplitFrame->GetFirst()->Resize(width, mainheight);
-   // bottom left split frame
-   height = fSplitFrame->GetSecond()->GetFirst()->GetHeight();
-   fSplitFrame->GetSecond()->GetFirst()->Resize(blwidth, height);
-   // bottom center split frame
-   height = fSplitFrame->GetSecond()->GetSecond()->GetFirst()->GetHeight();
-   fSplitFrame->GetSecond()->GetSecond()->GetFirst()->Resize(bcwidth, height);
-   // bottom right split frame
-   height = fSplitFrame->GetSecond()->GetSecond()->GetSecond()->GetHeight();
-   fSplitFrame->GetSecond()->GetSecond()->GetSecond()->Resize(brwidth, height);
-
-   fSplitFrame->Layout();
-
-   if (fIsEmbedded && gEve) {
-      width = ((TGCompositeFrame *)gEve->GetBrowser()->GetTabBottom()->GetParent())->GetWidth();
-      ((TGCompositeFrame *)gEve->GetBrowser()->GetTabBottom()->GetParent())->Resize(width, bottom_height);
-      width = ((TGCompositeFrame *)gEve->GetBrowser()->GetTabRight()->GetParent())->GetWidth();
-      ((TGCompositeFrame *)gEve->GetBrowser()->GetTabRight()->GetParent())->Resize(width, top_height);
-   }
-}
-
-//______________________________________________________________________________
-void SplitGLView::SaveConfig(const char *fname)
-{
-
-   Int_t bottom_height = 0;
-   Int_t top_height = 0;
-   TGSplitFrame *frm;
-   TEnv *env = new TEnv(fname);
-
-   if (fIsEmbedded && gEve) {
-      env->SetValue("Eve.Width", (Int_t)gEve->GetBrowser()->GetWidth());
-      env->SetValue("Eve.Height", (Int_t)gEve->GetBrowser()->GetHeight());
-   }
-   // get top (main) split frame
-   frm = fSplitFrame->GetFirst();
-   env->SetValue("MainView.Height", (Int_t)frm->GetHeight());
-   // get bottom left split frame
-   frm = fSplitFrame->GetSecond()->GetFirst();
-   env->SetValue("Bottom.Left.Width", (Int_t)frm->GetWidth());
-   // get bottom center split frame
-   frm = fSplitFrame->GetSecond()->GetSecond()->GetFirst();
-   env->SetValue("Bottom.Center.Width", (Int_t)frm->GetWidth());
-   // get bottom right split frame
-   frm = fSplitFrame->GetSecond()->GetSecond()->GetSecond();
-   env->SetValue("Bottom.Right.Width", (Int_t)frm->GetWidth());
-   if (fIsEmbedded && gEve) {
-      top_height = (Int_t)((TGCompositeFrame *)gEve->GetBrowser()->GetTabRight()->GetParent())->GetHeight();
-      env->SetValue("Right.Tab.Height", top_height);
-      bottom_height = (Int_t)((TGCompositeFrame *)gEve->GetBrowser()->GetTabBottom()->GetParent())->GetHeight();
-      env->SetValue("Bottom.Tab.Height", bottom_height);
-
-      env->SetValue("Eve.Selection", gEve->GetSelection()->GetPickToSelect());
-      env->SetValue("Eve.Highlight", gEve->GetHighlight()->GetPickToSelect());
-   }
-
-   env->SaveLevel(kEnvLocal);
-#ifdef R__WIN32
-   if (!gSystem->AccessPathName(Form("%s.new", fname))) {
-      gSystem->Exec(Form("del %s", fname));
-      gSystem->Rename(Form("%s.new", fname), fname);
-   }
-#endif
-}
-
-//______________________________________________________________________________
-void SplitGLView::SwapToMainView(TGLViewerBase *viewer)
-{
-   // Swap frame embedded in a splitframe to the main view (slot method).
-
-   TGCompositeFrame *parent = 0;
-   if (!fSplitFrame->GetFirst()->GetFrame())
-      return;
-   if (viewer == 0) {
-      TGPictureButton *src = (TGPictureButton*)gTQSender;
-      parent = (TGCompositeFrame *)src->GetParent();
-      while (parent && !parent->InheritsFrom("TGSplitFrame")) {
-         parent = (TGCompositeFrame *)parent->GetParent();
-      }
-   }
-   else {
-      TGCompositeFrame *src = ((TGLEmbeddedViewer *)viewer)->GetFrame();
-      if (!src) return;
-      TGLOverlayButton *but = (TGLOverlayButton *)((TQObject *)gTQSender);
-      but->ResetState();
-      parent = (TGCompositeFrame *)src->GetParent();
-   }
-   if (parent && parent->InheritsFrom("TGSplitFrame"))
-      ((TGSplitFrame *)parent)->SwitchToMain();
-}
-
-//______________________________________________________________________________
-void SplitGLView::UnDock(TGLViewerBase *viewer)
-{
-   // Undock frame embedded in a splitframe (slot method).
-
-   TGCompositeFrame *src = ((TGLEmbeddedViewer *)viewer)->GetFrame();
-   if (!src) return;
-   TGLOverlayButton *but = (TGLOverlayButton *)((TQObject *)gTQSender);
-   but->ResetState();
-   TGCompositeFrame *parent = (TGCompositeFrame *)src->GetParent();
-   if (parent && parent->InheritsFrom("TGSplitFrame"))
-      ((TGSplitFrame *)parent)->ExtractFrame();
-}
-
-//______________________________________________________________________________
-void SplitGLView::UpdateSummary()
-{
-   // Update summary of current event.
-   // Currently unused.
-   return;
-
-   TEveElement::List_i i;
-   TEveElement::List_i j;
-   Int_t k;
-   TEveElement *el;
-   HtmlObjTable *table;
-   TEveEventManager *mgr = gEve ? gEve->GetCurrentEvent() : 0;
-   if (mgr) {
-      fgHtmlSummary->Clear("D");
-      for (i=mgr->BeginChildren(); i!=mgr->EndChildren(); ++i)
-      {
-         el = ((TEveElement*)(*i));
-         if (el->IsA() == TEvePointSet::Class()) {
-            TEvePointSet *ps = (TEvePointSet *)el;
-            TString ename  = ps->GetElementName();
-            TString etitle = ps->GetElementTitle();
-            //ename.Remove(ename.First('\''));
-            //etitle.Remove(0, 2);
-            Int_t nel = atoi(etitle.Data());
-            table = fgHtmlSummary->AddTable(ename, 0, nel);
-         }
-         else if (el->IsA() == TEveTrackList::Class()) {
-            TEveTrackList *tracks = (TEveTrackList *)el;
-            TString ename  = tracks->GetElementName();
-            // ename.Remove(ename.First('\''));
-            table = fgHtmlSummary->AddTable(ename.Data(), 5, 
-                                            tracks->NumChildren(), kTRUE, "first");
-            table->SetLabel(0, "Momentum");
-            table->SetLabel(1, "P_t");
-            table->SetLabel(2, "Phi");
-            table->SetLabel(3, "Theta");
-            table->SetLabel(4, "Eta");
-            k=0;
-            for (j=tracks->BeginChildren(); j!=tracks->EndChildren(); ++j) {
-               Float_t p     = ((TEveTrack*)(*j))->GetMomentum().Mag();
-               table->SetValue(0, k, p);
-               Float_t pt    = ((TEveTrack*)(*j))->GetMomentum().Perp();
-               table->SetValue(1, k, pt);
-               Float_t phi   = ((TEveTrack*)(*j))->GetMomentum().Phi();
-               table->SetValue(2, k, phi);
-               Float_t theta = ((TEveTrack*)(*j))->GetMomentum().Theta();
-               table->SetValue(3, k, theta);
-               Float_t eta   = ((TEveTrack*)(*j))->GetMomentum().Eta();
-               table->SetValue(4, k, eta);
-               ++k;
-            }
-         }
-      }
-      fgHtmlSummary->Build();
-      fgHtml->Clear();
-      fgHtml->ParseText((char*)fgHtmlSummary->Html().Data());
-      fgHtml->Layout();
-   }
-}
-
-// Linkdef
-#ifdef __CINT__
-
-#pragma link C++ class SplitGLView;
-
-#endif
index 3a5ef3582a4f15ab9cd2af71614cffecda757c0d..a1ce3e7b5b6fa23efc87c78a291cfaec28a46c2f 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: geom_acorde.C 23412 2008-01-18 21:04:54Z mtadel $
+// $Id$
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
 
 /**************************************************************************
index 38e30e74203a926174bef75c4156e2681cd4f914..a42687a4978717a283c55098f90b8100f0291e17 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: esd_V0.C 26897 2008-06-25 23:58:36Z mtadel $
+// $Id$
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
 
 /**************************************************************************
index e8f0731673ba9fc788d221934d8ca74e16a07d56..59486596de2833e22ada8d74f1f4eaa4f3cbc836 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: esd_cascade_points.C 26897 2008-06-25 23:58:36Z mtadel $
+// $Id$
 
 /**************************************************************************
  * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
index 7877caf09e9d4661becb7644ca976b817a1e6dce..7c9f56e2204f24150c947a67aa77fbda3aaea30c 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: event_goto.C 24485 2008-03-13 15:27:38Z mtadel $
+// $Id$
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
 
 /**************************************************************************
index 18f5f8f66c4949659ba7589799b9839c638ca1f3..3b71e73f60ab57f6442b27acf5b510742d7bc6fd 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: event_goto.C 24485 2008-03-13 15:27:38Z mtadel $
+// $Id$
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
 
 /**************************************************************************
index 4f3b9b7db7cca758aade26d484305e108ef08996..799084b53f476cd0c12f6b7b2cda323ff9424158 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: fmd_hits.C 26897 2008-06-25 23:58:36Z mtadel $
+// $Id$
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
 
 /**************************************************************************
diff --git a/EVE/alice-macros/geom_gentle_muon.C b/EVE/alice-macros/geom_gentle_muon.C
new file mode 100644 (file)
index 0000000..a8458a0
--- /dev/null
@@ -0,0 +1,31 @@
+void DrawDeep(TEveGeoShape *gsre) {
+  
+  for (TEveElement::List_i i = gsre->BeginChildren(); i != gsre->EndChildren(); ++i) {
+    TEveGeoShape* lvl = (TEveGeoShape*) *i;
+    lvl->SetRnrSelf(kFALSE);
+    if (!lvl->HasChildren()) {
+      lvl->SetRnrSelf(kTRUE);
+      lvl->SetMainColor(3);
+      lvl->SetMainTransparency(50);
+    }
+    DrawDeep(lvl);
+  }
+
+}
+
+TEveGeoShape* geom_gentle_muon() {
+
+  TFile f("$ALICE_ROOT/EVE/alice-data/gentle_geo_muon.root");
+  TEveGeoShapeExtract* gse = (TEveGeoShapeExtract*) f.Get("Gentle MUON");
+  TEveGeoShape* gsre = TEveGeoShape::ImportShapeExtract(gse);
+  gEve->AddGlobalElement(gsre);
+  f.Close();
+
+  gsre->SetRnrSelf(kFALSE);
+
+  DrawDeep(gsre);
+
+  return gsre;
+
+}
+
index e9f6cce9404f70beaf4e2ac1f36e426b1641eb27..358c57ebdb79bc4c54499c06d3a1bc687e939fd4 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: geom_gentle.C 24242 2008-03-02 02:23:52Z mtadel $
+// $Id$
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
 
 /**************************************************************************
index 231b2cc4d110d1bb54c33980ab0221b7a71adad9..fc891118c8b1cfd4b20793e124c796d5334f1193 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: its_raw.C 24929 2008-04-04 13:51:43Z mtadel $
+// $Id$
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
 
 /**************************************************************************
index ba1c111ea1f3e45f3fdae86aae17786f0dc8bb00..ad3a6504d59e62c6cfed00d55b428c6ac44684b8 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: kine_tracks.C 27225 2008-07-10 15:42:46Z mtadel $
+// $Id$
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2008
 
 /**************************************************************************
index 723a7a2d468cfdbd8b6654502d4d7c084e095496..dda4886d47d1abdb782eb9eef31402551b5bfc51 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: tpc_sector_raw_test.C 25672 2008-05-09 11:56:22Z cvetan $
+// $Id$
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
 
 /**************************************************************************
index 8cffb366358e1d66465ec480480d9bf91719e2fc..8cb21ac752d1caef556e9d88be38937b12854b07 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: tpc_clusters.C 23497 2008-01-23 20:43:14Z mtadel $
+// $Id$
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
 
 /**************************************************************************
index 1b9f89cc670f28167ba97b084feced1833e41422..abafe47b3736c897e544d897a81ebf20789d88a5 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: NLT_trackcount_init.C 24927 2008-04-04 13:46:04Z mtadel $
+// $Id$
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
 
 /**************************************************************************
@@ -7,6 +7,9 @@
  * full copyright notice.                                                 *
  **************************************************************************/
 
+// This macro has been cloned to visscan_init.C
+// This one will be removed soon and will not be updated any further.
+
 class AliEveMacroExecutor;
 
 class TEveProjectionManager;
@@ -17,6 +20,7 @@ TEveGeoShape *gGeomGentle     = 0;
 TEveGeoShape *gGeomGentleRPhi = 0;
 TEveGeoShape *gGeomGentleRhoZ = 0;
 TEveGeoShape *gGeomGentleTRD  = 0;
+TEveGeoShape *gGeomGentleMUON = 0;
 
 TEveScene *gRPhiGeomScene  = 0;
 TEveScene *gRhoZGeomScene  = 0;
@@ -30,7 +34,10 @@ TEveViewer *g3DView   = 0;
 TEveViewer *gRPhiView = 0;
 TEveViewer *gRhoZView = 0;
 
-Bool_t gShowTRD = kFALSE;
+Bool_t gShowTRD      = kFALSE;
+Bool_t gShowMUON     = kTRUE;
+Bool_t gShowMUONRPhi = kFALSE;
+Bool_t gShowMUONRhoZ = kFALSE;
 
 Bool_t gCenterProjectionsAtPrimaryVertex = kFALSE;
 
@@ -62,6 +69,10 @@ void anyscan_init()
     TEveUtil::LoadMacro("geom_gentle_trd.C");
     gGeomGentleTRD = geom_gentle_trd();
   }
+  if (gShowMUON) {
+    TEveUtil::LoadMacro("geom_gentle_muon.C");
+    gGeomGentleMUON = geom_gentle_muon();
+  }
 
   // Scenes
 
@@ -90,8 +101,8 @@ void anyscan_init()
     gRPhiGeomScene->AddElement(a);
   }
   gRPhiMgr->ImportElements(gGeomGentleRPhi, gRPhiGeomScene);
-  if (gShowTRD)
-    gRPhiMgr->ImportElements(gGeomGentleTRD, gRPhiGeomScene);
+  if (gShowTRD)      gRPhiMgr->ImportElements(gGeomGentleTRD, gRPhiGeomScene);
+  if (gShowMUONRPhi) gRPhiMgr->ImportElements(gGeomGentleMUON, gRPhiGeomScene);
 
   gRhoZMgr = new TEveProjectionManager();
   gRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ);
@@ -107,8 +118,8 @@ void anyscan_init()
     gRhoZGeomScene->AddElement(a);
   }
   gRhoZMgr->ImportElements(gGeomGentleRhoZ, gRhoZGeomScene);
-  if (gShowTRD)
-    gRhoZMgr->ImportElements(gGeomGentleTRD, gRhoZGeomScene);
+  if (gShowTRD)      gRhoZMgr->ImportElements(gGeomGentleTRD, gRhoZGeomScene);
+  if (gShowMUONRhoZ) gRhoZMgr->ImportElements(gGeomGentleMUON, gRhoZGeomScene);
 
   // Viewers
 
index a0a54ecf589cdfb9a1e035fd2ecad8fb084eabb0..ed23c410a1a52fdf090c6c55f3f90c18f34d98ac 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: NLT_trackcount_init.C 24927 2008-04-04 13:46:04Z mtadel $
+// $Id$
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
 
 /**************************************************************************
@@ -7,70 +7,87 @@
  * full copyright notice.                                                 *
  **************************************************************************/
 
+class AliEveMacroExecutor;
+
 class TEveProjectionManager;
 class TEveGeoShape;
 class TEveUtil;
 
-R__EXTERN TEveProjectionManager *gRPhiMgr;
-R__EXTERN TEveProjectionManager *gRhoZMgr;
-
 TEveGeoShape *gGeomGentle     = 0;
 TEveGeoShape *gGeomGentleRPhi = 0;
 TEveGeoShape *gGeomGentleRhoZ = 0;
 TEveGeoShape *gGeomGentleTRD  = 0;
+TEveGeoShape *gGeomGentleMUON = 0;
+
+TEveScene *gRPhiGeomScene  = 0;
+TEveScene *gRhoZGeomScene  = 0;
+TEveScene *gRPhiEventScene = 0;
+TEveScene *gRhoZEventScene = 0;
+
+TEveProjectionManager *gRPhiMgr = 0;
+TEveProjectionManager *gRhoZMgr = 0;
+
+TEveViewer *g3DView   = 0;
+TEveViewer *gRPhiView = 0;
+TEveViewer *gRhoZView = 0;
 
-Bool_t gShowTRD = kFALSE;
+Bool_t gShowTRD      = kFALSE;
+Bool_t gShowMUON     = kTRUE;
+Bool_t gShowMUONRPhi = kFALSE;
+Bool_t gShowMUONRhoZ = kFALSE;
+
+Bool_t gCenterProjectionsAtPrimaryVertex = kFALSE;
 
 void visscan_init()
 {
   TEveUtil::LoadMacro("alieve_init.C");
-  alieve_init(".", -1, 0, 0, 0, 0, kFALSE, kTRUE, kFALSE, kFALSE);
+  alieve_init(".", -1);
 
-  AliEveTrackFitter* fitter = new AliEveTrackFitter();
-  gEve->AddToListTree(fitter, 1);
-  gEve->AddElement(fitter, gEve->GetEventScene());
+  // TEveLine::SetDefaultSmooth(1);
 
-  AliEveTrackCounter* g_trkcnt = new AliEveTrackCounter("Primary Counter");
-  gEve->AddToListTree(g_trkcnt, kFALSE);
+  TEveUtil::AssertMacro("VizDB_scan.C");
+
+  AliEveMacroExecutor *exec    = AliEveEventManager::GetMaster()->GetExecutor();
+  TEveBrowser         *browser = gEve->GetBrowser();
+
+  //==============================================================================
+  // Geometry, scenes, projections and viewers
+  //==============================================================================
+
+  browser->ShowCloseTab(kFALSE);
 
   // Geometry
+
   TEveUtil::LoadMacro("geom_gentle.C");
-  gGeomGentle     = geom_gentle();
+  gGeomGentle = geom_gentle();
   gGeomGentleRPhi = geom_gentle_rphi(); gGeomGentleRPhi->IncDenyDestroy();
   gGeomGentleRhoZ = geom_gentle_rhoz(); gGeomGentleRhoZ->IncDenyDestroy();
   if (gShowTRD) {
     TEveUtil::LoadMacro("geom_gentle_trd.C");
     gGeomGentleTRD = geom_gentle_trd();
   }
+  if (gShowMUON) {
+    TEveUtil::LoadMacro("geom_gentle_muon.C");
+    gGeomGentleMUON = geom_gentle_muon();
+  }
 
-  // Per event data
-  TEveUtil::LoadMacro("primary_vertex.C");
-  TEveUtil::LoadMacro("esd_V0_points.C");
-  TEveUtil::LoadMacro("esd_V0.C");
-  TEveUtil::LoadMacro("esd_cascade_points.C");
-  TEveUtil::LoadMacro("esd_cascade.C");
-  TEveUtil::LoadMacro("esd_tracks.C");
-  TEveUtil::LoadMacro("its_clusters.C+");
-  TEveUtil::LoadMacro("tpc_clusters.C+");
-  TEveUtil::LoadMacro("trd_clusters.C+");
-  TEveUtil::LoadMacro("tof_clusters.C+");
-
-  // TEveLine::SetDefaultSmooth(1);
-
-  TEveBrowser* browser = gEve->GetBrowser();
-  browser->ShowCloseTab(kFALSE);
-
-  gROOT->ProcessLine(".L SplitGLView.C+");
-  browser->ExecPlugin("SplitGLView", 0, "new SplitGLView(gClient->GetRoot(), 600, 450, kTRUE)");
+  // Scenes
 
-  browser->ShowCloseTab(kTRUE);
+  gRPhiGeomScene  = gEve->SpawnNewScene("RPhi Geometry",
+                    "Scene holding projected geometry for the RPhi view.");
+  gRhoZGeomScene  = gEve->SpawnNewScene("RhoZ Geometry",
+                   "Scene holding projected geometry for the RhoZ view.");
+  gRPhiEventScene = gEve->SpawnNewScene("RPhi Event Data",
+                   "Scene holding projected geometry for the RPhi view.");
+  gRhoZEventScene = gEve->SpawnNewScene("RhoZ Event Data",
+                   "Scene holding projected geometry for the RhoZ view.");
 
-  browser->StartEmbedding(TRootBrowser::kBottom);
-  new AliEveEventManagerWindow(AliEveEventManager::GetMaster());
-  browser->StopEmbedding("EventCtrl");
+  // Projection managers
 
-  // Projections
-  if (gRPhiMgr) {
+  gRPhiMgr = new TEveProjectionManager();
+  gRPhiMgr->SetProjection(TEveProjection::kPT_RPhi);
+  gEve->AddToListTree(gRPhiMgr, kFALSE);
+  {
     TEveProjectionAxes* a = new TEveProjectionAxes(gRPhiMgr);
     a->SetMainColor(kWhite);
     a->SetTitle("R-Phi");
@@ -78,9 +95,16 @@ void visscan_init()
     a->SetTitleFontName("comicbd");
     a->SetLabelSize(0.025);
     a->SetLabelFontName("comicbd");
-    gEve->GetScenes()->FindChild("R-Phi Projection")->AddElement(a);
+    gRPhiGeomScene->AddElement(a);
   }
-  if (gRhoZMgr) {
+  gRPhiMgr->ImportElements(gGeomGentleRPhi, gRPhiGeomScene);
+  if (gShowTRD)      gRPhiMgr->ImportElements(gGeomGentleTRD, gRPhiGeomScene);
+  if (gShowMUONRPhi) gRPhiMgr->ImportElements(gGeomGentleMUON, gRPhiGeomScene);
+
+  gRhoZMgr = new TEveProjectionManager();
+  gRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ);
+  gEve->AddToListTree(gRhoZMgr, kFALSE);
+  {
     TEveProjectionAxes* a = new TEveProjectionAxes(gRhoZMgr);
     a->SetMainColor(kWhite);
     a->SetTitle("Rho-Z");
@@ -88,10 +112,141 @@ void visscan_init()
     a->SetTitleFontName("comicbd");
     a->SetLabelSize(0.025);
     a->SetLabelFontName("comicbd");
-    gEve->GetScenes()->FindChild("Rho-Z Projection")->AddElement(a);
+    gRhoZGeomScene->AddElement(a);
   }
+  gRhoZMgr->ImportElements(gGeomGentleRhoZ, gRhoZGeomScene);
+  if (gShowTRD)      gRhoZMgr->ImportElements(gGeomGentleTRD, gRhoZGeomScene);
+  if (gShowMUONRhoZ) gRhoZMgr->ImportElements(gGeomGentleMUON, gRhoZGeomScene);
+
+  // Viewers
+
+  TEveWindowSlot *slot = 0;
+  TEveWindowPack *pack = 0;
+
+  slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
+  pack = slot->MakePack();
+  pack->SetElementName("Multi View");
+  pack->SetHorizontal();
+  pack->SetShowTitleBar(kFALSE);
+  pack->NewSlot()->MakeCurrent();
+  g3DView = gEve->SpawnNewViewer("3D View", "");
+  g3DView->AddScene(gEve->GetGlobalScene());
+  g3DView->AddScene(gEve->GetEventScene());
+
+  pack = pack->NewSlot()->MakePack();
+  pack->SetShowTitleBar(kFALSE);
+  pack->NewSlot()->MakeCurrent();
+  gRPhiView = gEve->SpawnNewViewer("RPhi View", "");
+  gRPhiView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
+  gRPhiView->AddScene(gRPhiGeomScene);
+  gRPhiView->AddScene(gRPhiEventScene);
+
+  pack->NewSlot()->MakeCurrent();
+  gRhoZView = gEve->SpawnNewViewer("RhoZ View", "");
+  gRhoZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
+  gRhoZView->AddScene(gRhoZGeomScene);
+  gRhoZView->AddScene(gRhoZEventScene);
+
+
+  //==============================================================================
+  // Registration of per-event macros
+  //==============================================================================
+
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Track",   "kine_tracks.C", "kine_tracks", "", kFALSE));
+
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Hit ITS", "its_hits.C",    "its_hits",    "", kFALSE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Hit TPC", "tpc_hits.C",    "tpc_hits",    "", kFALSE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Hit T0",  "t0_hits.C",     "t0_hits",     "", kFALSE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Hit FMD", "fmd_hits.C",    "fmd_hits",    "", kFALSE));
+
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "DIG FMD",     "fmd_digits.C",  "fmd_digits",  "", kFALSE));
+
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW TPC",     "tpc_raw.C",     "tpc_raw",     "", kFALSE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW T0",      "t0_raw.C",      "t0_raw",      "", kFALSE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW FMD",     "fmd_raw.C",     "fmd_raw",     "", kFALSE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW VZERO",   "vzero_raw.C",   "vzero_raw",   "", kFALSE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW ACORDE",  "acorde_raw.C",  "acorde_raw",  "", kFALSE));
+
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX",         "primary_vertex.C", "primary_vertex",             "",                kTRUE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse",     "",                kTRUE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Box",     "primary_vertex.C", "primary_vertex_box",         "kFALSE, 3, 3, 3", kFALSE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX",         "primary_vertex.C", "primary_vertex_spd",         "",                kTRUE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse_spd", "",                kTRUE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Box",     "primary_vertex.C", "primary_vertex_box_spd",     "kFALSE, 3, 3, 3", kFALSE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX",         "primary_vertex.C", "primary_vertex_tpc",         "",                kFALSE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse_tpc", "",                kFALSE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Box",     "primary_vertex.C", "primary_vertex_box_tpc",     "kFALSE, 3, 3, 3", kFALSE));
+
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC V0",   "esd_V0_points.C",       "esd_V0_points_onfly"));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC V0",   "esd_V0_points.C",       "esd_V0_points_offline"));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC V0",   "esd_V0.C",              "esd_V0"));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC CSCD", "esd_cascade_points.C",  "esd_cascade_points"));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC CSCD", "esd_cascade.C",         "esd_cascade"));
+
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track", "esd_tracks.C", "esd_tracks",             "", kFALSE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track", "esd_tracks.C", "esd_tracks_MI",          "", kFALSE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track", "esd_tracks.C", "esd_tracks_by_category", "", kTRUE));
+
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Tracklet", "esd_spd_tracklets.C", "esd_spd_tracklets", "", kFALSE));
+
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC ZDC",      "esd_zdc.C", "esd_zdc", "", kFALSE));
+
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus",     "clusters.C+",     "clusters", "", kFALSE));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus ITS", "its_clusters.C+", "its_clusters"));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TPC", "tpc_clusters.C+", "tpc_clusters"));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TRD", "trd_clusters.C+", "trd_clusters"));
+  exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TOF", "tof_clusters.C+", "tof_clusters"));
+
+
+  //==============================================================================
+  // Additional GUI components
+  //==============================================================================
+
+  slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
+  slot->StartEmbedding();
+  AliEveMacroExecutorWindow* exewin = new AliEveMacroExecutorWindow(exec);
+  slot->StopEmbedding("DataSelection");
+  exewin->PopulateMacros();
+
+  slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
+  slot->StartEmbedding();
+  new AliQAHistViewer(gClient->GetRoot(), 600, 400, kTRUE);
+  slot->StopEmbedding("QA histograms");
+
+  browser->GetTabRight()->SetTab(1);
+
+  browser->StartEmbedding(TRootBrowser::kBottom);
+  new AliEveEventManagerWindow(AliEveEventManager::GetMaster());
+  browser->StopEmbedding("EventCtrl");
+
+  slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
+  TEveWindowTab *store_tab = slot->MakeTab();
+  store_tab->SetElementNameTitle("WindowStore",
+    "Undocked windows whose previous container is not known\n"
+    "are placed here when the main-frame is closed.");
+  gEve->GetWindowManager()->SetDefaultContainer(store_tab);
 
-  // Event
+  //==============================================================================
+  // AliEve objects - global tools
+  //==============================================================================
+
+  AliEveTrackFitter* fitter = new AliEveTrackFitter();
+  gEve->AddToListTree(fitter, 1);
+  gEve->AddElement(fitter, gEve->GetEventScene());
+
+  AliEveTrackCounter* g_trkcnt = new AliEveTrackCounter("Primary Counter");
+  gEve->AddToListTree(g_trkcnt, kFALSE);
+
+
+  //==============================================================================
+  // Final stuff
+  //==============================================================================
+
+  // A refresh to show proper window.
+  gEve->Redraw3D(kTRUE);
+  gSystem->ProcessEvents();
+
+  // Register command to call on each event.
   AliEveEventManager::GetMaster()->AddNewEventCommand("on_new_event();");
   AliEveEventManager::GetMaster()->GotoEvent(0);
 
@@ -104,70 +259,45 @@ void visscan_init()
 
 void on_new_event()
 {
-  try {
-    TEvePointSet* itsc = its_clusters();
-    if (itsc) {
-      itsc->SetMarkerColor(5);
-    }
-
-    TEvePointSet* tpcc = tpc_clusters();
-    if (tpcc) {
-      tpcc->SetMarkerColor(4);
-    }
-
-    TEvePointSet* trdc = trd_clusters();
-    if (trdc) {
-      trdc->SetMarkerColor(7);
-      trdc->SetMarkerStyle(4);
-      trdc->SetMarkerSize(0.5);
-    }
-
-    TEvePointSet* tofc = tof_clusters();
-    if (tofc) {
-      tofc->SetMarkerColor(kOrange);
-      tofc->SetMarkerStyle(4);
-      tofc->SetMarkerSize(0.5);
-    }
-  }
-  catch(TEveException& exc) {
-    printf("Exception loading ITS/TPC clusters: %s\n", exc.Data());
-  }
-
-  primary_vertex();
-  primary_vertex_ellipse();
-  primary_vertex_spd();
-  primary_vertex_ellipse_spd();
-
-  esd_V0_points();
-  esd_V0();
-
-  esd_cascade_points();
-  esd_cascade();
-
   AliEveTrackCounter* g_trkcnt = AliEveTrackCounter::fgInstance;
   g_trkcnt->Reset();
   g_trkcnt->SetEventId(AliEveEventManager::GetMaster()->GetEventId());
 
-  TEveElementList* cont = esd_tracks_by_category();
-
-  // Here we expect several TEveTrackList containers.
-  // First two have reasonable primaries (sigma-to-prim-vertex < 5).
-  // Others are almost certainly secondaries.
-  Int_t count = 1;
-  TEveElement::List_i i = cont->BeginChildren();
-  while (i != cont->EndChildren())
+  if (g_esd_tracks_by_category_container != 0)
   {
-    TEveTrackList* l = dynamic_cast<TEveTrackList*>(*i);
-    if (l != 0)
+    TEveElementList* cont = g_esd_tracks_by_category_container;
+
+    // Here we expect several TEveTrackList containers.
+    // First two have reasonable primaries (sigma-to-prim-vertex < 5).
+    // Others are almost certainly secondaries.
+    Int_t count = 1;
+    TEveElement::List_i i = cont->BeginChildren();
+    while (i != cont->EndChildren())
     {
-      g_trkcnt->RegisterTracks(l, (count <= 2));
-      ++count;
+      TEveTrackList* l = dynamic_cast<TEveTrackList*>(*i);
+      if (l != 0)
+      {
+       g_trkcnt->RegisterTracks(l, (count <= 2));
+       ++count;
+      }
+      ++i;
     }
-    ++i;
+
+    // Set it to zero, so that we do not reuse an old one.
+    g_esd_tracks_by_category_container = 0;
+  }
+  else
+  {
+    Warning("on_new_event", "g_esd_tracks_by_category_container not initialized.");
   }
 
-  AliESDEvent* esd = AliEveEventManager::AssertESD();
+  Double_t x[3] = { 0, 0, 0 };
+
+  if (AliEveEventManager::HasESD())
   {
+    AliESDEvent* esd = AliEveEventManager::AssertESD();
+    esd->GetPrimaryVertex()->GetXYZ(x);
+
     TTimeStamp ts(esd->GetTimeStamp());
     TString win_title("Eve Main Window -- Timestamp: ");
     win_title += ts.AsString("s");
@@ -175,25 +305,21 @@ void on_new_event()
     win_title += esd->GetEventNumberInFile();
     gEve->GetBrowser()->SetWindowName(win_title);
   }
-  Double_t x[3];
-  esd->GetPrimaryVertex()->GetXYZ(x);
 
   TEveElement* top = gEve->GetCurrentEvent();
 
-  if (gRPhiMgr && top) {
-    gRPhiMgr->DestroyElements();
-    gRPhiMgr->SetCenter(x[0], x[1], x[2]);
-    gRPhiMgr->ImportElements(gGeomGentleRPhi);
-    if (gShowTRD) gRPhiMgr->ImportElements(gGeomGentleTRD);
-    gRPhiMgr->ImportElements(top);
+  if (gRPhiMgr && top)
+  {
+    gRPhiEventScene->DestroyElements();
+    if (gCenterProjectionsAtPrimaryVertex)
+      gRPhiMgr->SetCenter(x[0], x[1], x[2]);
+    gRPhiMgr->ImportElements(top, gRPhiEventScene);
   }
-  if (gRhoZMgr && top) {
-    gRhoZMgr->DestroyElements();
-    gRhoZMgr->SetCenter(x[0], x[1], x[2]);
-    gRhoZMgr->ImportElements(gGeomGentleRhoZ);
-    if (gShowTRD) gRhoZMgr->ImportElements(gGeomGentleTRD);
-    gRhoZMgr->ImportElements(top);
+  if (gRhoZMgr && top)
+  {
+    gRhoZEventScene->DestroyElements();
+    if (gCenterProjectionsAtPrimaryVertex)
+      gRhoZMgr->SetCenter(x[0], x[1], x[2]);
+    gRhoZMgr->ImportElements(top, gRhoZEventScene);
   }
-
-  gROOT->ProcessLine("SplitGLView::UpdateSummary()");
 }