Merge the following revisions between 29371 and 30342 from
authormtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 10 Dec 2008 17:04:51 +0000 (17:04 +0000)
committermtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 10 Dec 2008 17:04:51 +0000 (17:04 +0000)
branches/EVE-dev/EVE-root-trunk.

Current trunk of ROOT is required for compilation.

29371
29387
29519
29641
29642
29877
30116
30259
30295
30303
30304
30334
30335
30336
30342

34 files changed:
EVE/EveBase/AliEveCosmicRayFitter.cxx
EVE/EveBase/AliEveEventManager.cxx
EVE/EveBase/AliEveEventManagerEditor.cxx
EVE/EveBase/AliEveJetPlane.cxx
EVE/EveBase/AliEveMacro.cxx
EVE/EveBase/AliEveMacro.h
EVE/EveBase/AliEveMacroEditor.cxx
EVE/EveBase/AliEveMacroExecutor.cxx
EVE/EveBase/AliEveMacroExecutor.h
EVE/EveBase/AliEveMacroExecutorWindow.cxx
EVE/EveBase/AliEveV0.h
EVE/EveBase/AliEveV0Editor.cxx
EVE/EveDet/AliEveITSModuleStepper.cxx
EVE/EveDet/AliEveTOFSectorEditor.h
EVE/EveDet/AliEveTPCSector2D.cxx
EVE/EveDet/AliEveTPCSector2DGL.cxx
EVE/EveDet/AliEveTPCSector3D.cxx
EVE/EveDet/AliEveTPCSectorViz.cxx
EVE/EveDet/AliEveTPCSectorVizEditor.cxx
EVE/EveDet/AliEveTPCSectorVizEditor.h
EVE/alice-macros/SplitGLView.C
EVE/alice-macros/its_clusters.C
EVE/alice-macros/its_module_stepper.C
EVE/alice-macros/tof_clusters.C
EVE/alice-macros/tpc_clusters.C
EVE/alice-macros/tpc_digits.C
EVE/alice-macros/trd_clusters.C
EVE/alice-macros/trd_tracks.C
EVE/macros/alieve_init.C
EVE/macros/alieve_online.C
EVE/macros/anyscan_init.C
EVE/macros/auto_rotate.C
EVE/macros/embed_init.C
EVE/macros/visscan_init.C

index 997791d..4c34534 100644 (file)
@@ -240,11 +240,11 @@ void AliEveCosmicRayFitter::FitTrack()
 
   TEveTrackPropagator* tp = fTrackList->GetPropagator();
 
-  tp->InitTrack(rc.fV, rc.fP, 1, 0);
+  tp->InitTrack(rc.fV, 0);
   tp->GoToBounds(rc.fP);
 
   rc.fP.Set(-1, -params1(1), -params2(1));
-  tp->InitTrack(rc.fV, rc.fP, 1, 0);
+  tp->InitTrack(rc.fV, 0);
   tp->GoToBounds(rc.fP);
   tp->FillPointSet(track);
   tp->ResetTrack();
index a6eb37a..2e487ca 100644 (file)
@@ -1241,7 +1241,7 @@ void AliEveEventManager::AfterNewEventLoaded()
     TIter next(fSubManagers);
     while ((fgCurrent = dynamic_cast<AliEveEventManager*>(next())) != 0)
     {
-      // gEve->SetCurrentEvent(fgCurrent);
+      gEve->SetCurrentEvent(fgCurrent);
       try
       {
        fgCurrent->GotoEvent(fEventId);
@@ -1254,7 +1254,7 @@ void AliEveEventManager::AfterNewEventLoaded()
       }
     }
     fgCurrent = fgMaster;
-    // gEve->SetCurrentEvent(fgMaster);
+    gEve->SetCurrentEvent(fgMaster);
   }
 }
 
index 5823489..3276c09 100644 (file)
@@ -286,7 +286,6 @@ void AliEveEventManagerWindow::Update()
   fEventId->SetState(evNavOn);
   fInfoLabel->SetText(Form("/ %d", fM->GetMaxEventId()));
 
-  // fAutoLoadTime->SetEnabled(fM->GetAutoLoad());
   fAutoLoad->SetState(fM->GetAutoLoad() ? kButtonDown : kButtonUp);
   fAutoLoadTime->SetValue(fM->GetAutoLoadTime());
 
index 755b12f..fcc52bd 100644 (file)
@@ -105,8 +105,8 @@ void AliEveJetPlane::Paint(Option_t* /*option*/)
 
   // Section kCore
   buff.fID           = this;
-  buff.fColor        = fGridColor;
-  buff.fTransparency = 0;
+  buff.fColor        = GetMainColor();
+  buff.fTransparency = GetMainTransparency();
   if (HasMainTrans()) RefMainTrans().SetBuffer3D(buff);
   buff.SetSectionsValid(TBuffer3D::kCore);
 
index c15aae3..1c93428 100644 (file)
 #include "AliEveMacro.h"
 
 //______________________________________________________________________________
-// Full description of AliEveMacro
 //
-// !!! Eventually, fSources should be a bitfield, but we need a widget
-// that can show/edit this. Like combo-box with a check-box for each
-// entry.
+// Member fSources is a bitfield, but we do not have a widget
+// that can show/edit this (a combo-box with a check-box for each
+// entry). So ... use a single value for now,
 
 ClassImp(AliEveMacro)
 
@@ -23,13 +22,57 @@ AliEveMacro::AliEveMacro(Int_t src, const TString& tags, const TString& mac,
                         const TString& foo, const TString& args, Bool_t act) :
   TObject(),
   fSources(src), fTags(tags), fMacro (mac),
-  fFunc   (foo), fArgs(args), fActive(act)
+  fFunc   (foo), fArgs(args), fActive(act),
+  fExecStatus(kNotRun), fExecExcString(), fExecResult(0)
 {
   // Constructor.
 }
 
 /******************************************************************************/
 
+void AliEveMacro::ResetExecState()
+{
+  // Reset exec variables into state as if the macro has not been run.
+
+  fExecStatus      = kNotRun;
+  fExecExcString = "";
+  fExecResult      = 0;
+}
+
+void AliEveMacro::SetExecNoData()
+{
+  // Set last execution state to 'NoData'.
+
+  fExecStatus = kNoData;
+}
+
+
+void AliEveMacro::SetExecOK(TEveElement* result)
+{
+  // Set last execution state to 'OK' and register result.
+
+  fExecStatus = kOK;
+  fExecResult = result;
+}
+
+
+void AliEveMacro::SetExecException(const TString& exception)
+{
+  // Set last execution state to 'Exception' and store the exception string.
+
+  fExecStatus    = kException;
+  fExecExcString = exception;
+}
+
+void AliEveMacro::SetExecError()
+{
+  // Set last execution state to 'Error'.
+
+  fExecStatus = kError;
+}
+
+/******************************************************************************/
+
 TString AliEveMacro::FormForExec() const
 {
   // Return string suitable for execution.
index 00c1347..ee6113b 100644 (file)
@@ -13,6 +13,8 @@
 #include <TObject.h>
 #include <TString.h>
 
+class TEveElement;
+
 //______________________________________________________________________________
 // Short description of AliEveMacro
 //
@@ -22,7 +24,17 @@ class AliEveMacro : public TObject
   friend class AliEveMacroEditor;
 
 public:
-  enum DataSource_e { kNone = 0, kRunLoader, kESD, kESDfriend, kRawReader };
+  enum DataSource_e { kNone      = 0,
+                      kRunLoader = 1,
+                      kESD       = 2,
+                      kESDfriend = 4,
+                      kRawReader = 8 };
+
+  enum ExecStatus_e { kNotRun    = -2,
+                      kNoData    = -1,
+                      kOK        =  0,
+                      kException =  1,
+                      kError     =  2 };
 
   AliEveMacro(Int_t src, const TString& tags, const TString& mac, const TString& foo,
              const TString& args="", Bool_t act=kTRUE);
@@ -41,20 +53,45 @@ public:
   Bool_t         GetActive() const          { return fActive; }
   void           SetActive(Bool_t x)        { fActive = x; }
 
+  Bool_t         RequiresRunLoader() const { return fSources & kRunLoader; }
+  Bool_t         RequiresESD()       const { return fSources & kESD;       }
+  Bool_t         RequiresESDfriend() const { return fSources & kESDfriend; }
+  Bool_t         RequiresRawReader() const { return fSources & kRawReader; }
+
+  void           ResetExecState();
+
+  void           SetExecNoData();
+  void           SetExecOK(TEveElement* result);
+  void           SetExecException(const TString& exception);
+  void           SetExecError();
+
+  ExecStatus_e   GetExecStatus()    const { return fExecStatus;    }
+  const TString& GetExecException() const { return fExecExcString; }
+  TEveElement*   GetExecResult()    const { return fExecResult;    }
+
+  Bool_t         WasExecTried()     const { return fExecStatus >= kOK; }
+  Bool_t         WasExecOK()        const { return fExecStatus == kOK; }
+
   TString        FormForExec() const;
   TString        FormForDisplay() const;
 
 protected:
-  Int_t   fSources; // Source of data.
+  Int_t   fSources; // Source of data, bitwise or of DataSource_e entries.
   TString fTags;    // Tags describing the macro (for selection).
   TString fMacro;   // Macro where func is defined; if null, assume it is there.
   TString fFunc;    // Function to call.
   TString fArgs;    // Arguments for the function.
   Bool_t  fActive;  // Flag if macro is active.
 
+  ExecStatus_e  fExecStatus;
+  TString       fExecExcString;
+  TEveElement  *fExecResult;
+
 private:
+  AliEveMacro(const AliEveMacro&);            // Not implemented
+  AliEveMacro& operator=(const AliEveMacro&); // Not implemented
 
-  ClassDef(AliEveMacro, 0); // Short description.
+  ClassDef(AliEveMacro, 0); // Encapsulation of data reqired for execution of a CINT macro and the result of its last execution.
 };
 
 #endif
index ed4a888..a04e5d6 100644 (file)
@@ -110,13 +110,10 @@ void AliEveMacroEditor::SetModel(TObject* obj)
   fM = dynamic_cast<AliEveMacro*>(obj);
 
   fSources->Select  (fM->GetSources(), kFALSE);
-  // TGTextEntry emits a signal no matter what ...
-  TQObject::BlockAllSignals(kTRUE);
-  fTags   ->SetText (fM->GetTags());
-  fMacro  ->SetText (fM->GetMacro());
-  fFunc   ->SetText (fM->GetFunc());
-  fArgs   ->SetText (fM->GetArgs());
-  TQObject::BlockAllSignals(kFALSE);
+  fTags   ->SetText (fM->GetTags(),  kFALSE);
+  fMacro  ->SetText (fM->GetMacro(), kFALSE);
+  fFunc   ->SetText (fM->GetFunc(),  kFALSE);
+  fArgs   ->SetText (fM->GetArgs(),  kFALSE);
   fActive ->SetState(fM->fActive ? kButtonDown : kButtonUp);
 }
 
index 80044f1..63642ea 100644 (file)
 #include <TROOT.h>
 
 //______________________________________________________________________________
-// Full description of AliEveMacroExecutor
 //
+// Contains a list of AliEveMacros.
+// The macros are added via AddMacro() and are owned by the executor.
+// The macros can be executed via ExecMacros().
+// They are executed in order in which they are registered.
 
 ClassImp(AliEveMacroExecutor)
 
@@ -85,55 +88,69 @@ void AliEveMacroExecutor::ExecMacros()
   {
     // printf ("macro '%s'; func '%s'; args '%s'\n", mac->GetMacro().Data(), mac->GetFunc().Data(), mac->GetArgs().Data());
 
+    mac->ResetExecState();
+    
     if (mac->GetActive() == kFALSE || mac->GetFunc().IsNull())
     {
       continue;
     }
 
-    switch (mac->GetSources())
+    if ((mac->RequiresRunLoader() && ! AliEveEventManager::HasRunLoader()) ||
+        (mac->RequiresESD()       && ! AliEveEventManager::HasESD())       ||
+        (mac->RequiresESDfriend() && ! AliEveEventManager::HasESDfriend()) ||
+        (mac->RequiresRawReader() && ! AliEveEventManager::HasRawReader()))
     {
-      case AliEveMacro::kRunLoader:
-       if ( ! AliEveEventManager::HasRunLoader())
-         continue;
-       break;
-      case AliEveMacro::kESD:
-       if ( ! AliEveEventManager::HasESD())
-         continue;
-       break;
-      case AliEveMacro::kESDfriend:
-       if ( ! AliEveEventManager::HasESDfriend())
-         continue;
-       break;
-      case AliEveMacro::kRawReader:
-       if ( ! AliEveEventManager::HasRawReader())
-         continue;
-       break;
-      default:
-       break;
+      mac->SetExecNoData();
+      continue;
     }
 
     TString cmd(mac->FormForExec());
     try
     {
-      gInterpreter->ProcessLine(cmd);
+      Long_t                   result = 0;
+      TInterpreter::EErrorCode error  = TInterpreter::kNoError;
+
+      result = gInterpreter->ProcessLine(cmd, &error);
+
       // Try to fix broken cint state? Code taken form pyroot.
-      if ( G__get_return( 0 ) > G__RETURN_NORMAL )
+      if (G__get_return(0) > G__RETURN_NORMAL)
+      {
+       printf ("*** FIXING CINT STATE AFTER RETURN ***\n");
+       G__security_recover(0);
+      }
+
+      if (error)
+      {
+        mac->SetExecError();
+        Error("ExecMacros", "Executing %s::%s, CINT error ... hopefully recovered.",
+              mac->GetMacro().Data(), cmd.Data());
+      }
+      else
       {
-       printf ("***INFIXING***\n");
-       G__security_recover( 0 );    // 0 ensures silence
+        TEveElement *el  = (TEveElement*) result;
+        TObject     *obj = dynamic_cast<TObject*>(el);
+        if (el != 0 && obj == 0)
+        {
+          Warning("ExecMacros", "Executing %s::%s, returned TEveElement seems bad, setting it to 0.",
+                  mac->GetMacro().Data(), cmd.Data());
+          el = 0;
+        }
+        mac->SetExecOK(el);
       }
     }
     catch(TEveException& exc)
     {
+      mac->SetExecException(exc);
+
+      // Try to fix broken cint state? Code taken form pyroot.
+      if (G__get_return(0) > G__RETURN_NORMAL)
+      {
+       printf ("*** FIXING CINT STATE AFTER EXCEPTION ***\n");
+       G__security_recover(0);
+      }
+
       Error("ExecMacros", "Executing %s::%s, caught exception: '%s'.",
            mac->GetMacro().Data(), cmd.Data(), exc.Data());
     }
-
-    // Try to fix broken cint state? Code taken form pyroot.
-    if ( G__get_return( 0 ) > G__RETURN_NORMAL )
-    {
-      printf ("***POSTFIXING****\n");
-      G__security_recover( 0 );    // 0 ensures silence
-    }
   }
 }
index 30eaac8..bd7eab6 100644 (file)
@@ -38,7 +38,7 @@ private:
   AliEveMacroExecutor(const AliEveMacroExecutor&);            // Not implemented
   AliEveMacroExecutor& operator=(const AliEveMacroExecutor&); // Not implemented
 
-  ClassDef(AliEveMacroExecutor, 0); // Short description.
+  ClassDef(AliEveMacroExecutor, 0); // Container for and executor of AliEveMacros.
 };
 
 #endif
index c3bb19c..96b5fe7 100644 (file)
@@ -198,10 +198,7 @@ void AliEveMacroExecutorWindow::PopulateMacros(Bool_t keep_selected)
   TString     select = fSelectTags->GetText();
   if ( ! select.IsNull())
   {
-    // "i" does not work (get pcre_exec error = -3 PCRE_ERROR_BADOPTION)
-    // same for 1 (the value of PCRE_CASELESS)
-    // using case-sensitive matching then ... must investigate in root
-    regexp = new TPMERegexp(select);
+    regexp = new TPMERegexp(select, "io");
   }
 
   TIter next(fM->fMacros);
index c327549..eb61fcf 100644 (file)
@@ -35,6 +35,7 @@ class AliEveV0List;
 class AliEveV0 : public TEvePointSet
 {
   friend class AliEveV0List;
+  friend class AliEveV0Editor;
 
 public:
   AliEveV0();
index 88c7ec5..3dbb159 100644 (file)
@@ -83,7 +83,44 @@ void AliEveV0Editor::SetModel(TObject* obj)
 //    Update();
 // }
 
+#include <TEveManager.h>
+#include <TEveWindow.h>
+#include <TEveViewer.h>
+#include <TEveScene.h>
+
+#include <TGLCamera.h>
+#include <TGLViewer.h>
+
+#include <TLatex.h>
+#include <TRootEmbeddedCanvas.h>
+
 void AliEveV0Editor::DisplayDetailed()
 {
   printf("Hura!\n");
+
+  TEveWindowSlot *slot = TEveWindow::CreateWindowMainFrame();
+  TEveWindowPack *pack = slot->MakePack();
+  pack->SetShowTitleBar(kFALSE);
+  pack->NewSlot()->MakeCurrent();
+
+  TEveViewer *viewer = gEve->SpawnNewViewer("V0 Detailed View");
+  TEveScene  *scene  = gEve->SpawnNewScene("V0 Detail Scene");
+  viewer->AddScene(scene);
+  scene->AddElement(fM);
+
+  viewer->GetGLViewer()->ResetCamerasAfterNextUpdate();
+
+  TGLCamera& cam = viewer->GetGLViewer()->CurrentCamera();
+  cam.SetExternalCenter(kTRUE);
+  cam.SetCenterVec(fM->fRecDecayV.fX, fM->fRecDecayV.fY, fM->fRecDecayV.fZ);
+
+  slot = pack->NewSlot();
+  
+  TEveWindowFrame *frame = slot->MakeFrame(new TRootEmbeddedCanvas());
+  frame->SetElementName("Details");
+
+  TLatex* ltx = new TLatex(0.2, 0.2, "#frac{Jacques}{Zoozoo}");
+  ltx->Draw();
+
+  gEve->Redraw3D();
 }
index e5abf3e..68efa95 100644 (file)
@@ -74,14 +74,14 @@ AliEveITSModuleStepper::AliEveITSModuleStepper(AliEveITSDigitsInfo* di) :
   fScaleInfo = new AliEveDigitScaleInfo();
   fScaleInfo->IncRefCount();
 
-  gEve->GetGLViewer()->AddOverlayElement(this);
+  gEve->GetDefaultGLViewer()->AddOverlayElement(this);
 }
 
 AliEveITSModuleStepper::~AliEveITSModuleStepper()
 {
   // Destructor.
 
-  gEve->GetGLViewer()->RemoveOverlayElement(this);
+  gEve->GetDefaultGLViewer()->RemoveOverlayElement(this);
 
   fScaleInfo->DecRefCount();
   fDigitsInfo->DecRefCount();
index 4801e2b..d1c2609 100644 (file)
@@ -21,8 +21,6 @@ class TGHSlider;
 
 class TEveGValuator;
 class TEveGDoubleValuator;
-class TEveTransSubEditor;
-
 
 class AliEveTOFSector;
 
index ea8a7ba..bc74e54 100644 (file)
@@ -167,8 +167,8 @@ void AliEveTPCSector2D::Paint(Option_t* )
 
   // Section kCore
   buffer.fID           = this;
-  buffer.fColor        = 1;
-  buffer.fTransparency = 0;
+  buffer.fColor        = GetMainColor();
+  buffer.fTransparency = GetMainTransparency();
   if (HasMainTrans()) RefMainTrans().SetBuffer3D(buffer);
   buffer.SetSectionsValid(TBuffer3D::kCore);
 
index 0f21694..3c5a02b 100644 (file)
@@ -97,42 +97,41 @@ void AliEveTPCSector2DGL::DirectDraw(TGLRnrCtx& rnrCtx) const
 
   fSectorData = fSector->GetSectorData();
 
-  if(fRTS < fSector->fRTS && fSectorData != 0) {
+  if (fRTS < fSector->fRTS && fSectorData != 0) {
     CreateTexture();
     fRTS = fSector->fRTS;
   }
 
-  glPushAttrib(GL_CURRENT_BIT      | GL_DEPTH_BUFFER_BIT |
-               GL_COLOR_BUFFER_BIT | GL_ENABLE_BIT       | GL_POLYGON_BIT);
+  glPushAttrib(GL_CURRENT_BIT | GL_COLOR_BUFFER_BIT | GL_POLYGON_BIT | GL_ENABLE_BIT);
 
   glDisable(GL_LIGHTING);
   glDisable(GL_CULL_FACE);
 
   // Display digits
-  if(fSectorData != 0) {
-
+  if (fSectorData != 0)
+  {
     const AliEveTPCSectorData::SegmentInfo&  iSeg = AliEveTPCSectorData::GetInnSeg();
     const AliEveTPCSectorData::SegmentInfo& o1Seg = AliEveTPCSectorData::GetOut1Seg();
     const AliEveTPCSectorData::SegmentInfo& o2Seg = AliEveTPCSectorData::GetOut2Seg();
 
-    if(rnrCtx.SecSelection()) {
+    if (rnrCtx.SecSelection())
+    {
 
       if(fSector->fRnrInn)  DisplayNamedQuads(iSeg, 0, 0);
       if(fSector->fRnrOut1) DisplayNamedQuads(o1Seg, iSeg.GetNMaxPads(), 0);
       if(fSector->fRnrOut2) DisplayNamedQuads(o2Seg, 0, o1Seg.GetNRows());
-
-    } else {
-
-      if(fSector->fUseTexture) {
-       //texture
-       glEnable(GL_BLEND);
-       glDepthMask(GL_FALSE);
+    }
+    else
+    {
+      glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+      if (fSector->fUseTexture)
+      {
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+       glEnable(GL_BLEND);
 
-       glPolygonOffset(2,2);
-       glEnable(GL_POLYGON_OFFSET_FILL);
+       glAlphaFunc(GL_GREATER, 0.2);
+       glEnable(GL_ALPHA_TEST);
 
-       glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
        glBindTexture(GL_TEXTURE_2D, fTexture);
        glEnable(GL_TEXTURE_2D);
 
@@ -141,7 +140,9 @@ void AliEveTPCSector2DGL::DirectDraw(TGLRnrCtx& rnrCtx) const
        if(fSector->fRnrOut2) DisplayTexture(o2Seg, 0, o1Seg.GetNRows());
 
        glDisable(GL_TEXTURE_2D);
-      } else {
+      }
+      else
+      {
        if(fSector->fRnrInn)  DisplayQuads(iSeg, 0, 0);
        if(fSector->fRnrOut1) DisplayQuads(o1Seg, iSeg.GetNMaxPads(), 0);
        if(fSector->fRnrOut2) DisplayQuads(o2Seg, 0, o1Seg.GetNRows());
@@ -149,7 +150,6 @@ void AliEveTPCSector2DGL::DirectDraw(TGLRnrCtx& rnrCtx) const
       glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
       DisplayFrame();
     }
-
   }
 
   glPopAttrib();
@@ -194,12 +194,13 @@ void AliEveTPCSector2DGL::LoadPadrow(AliEveTPCSectorData::RowIterator& iter,
       }
     }
 
-    if(fSector->fShowMax == kFALSE && fSector->fAverage) {
+    if (fSector->fShowMax == kFALSE && fSector->fAverage) {
       padVal = (Int_t)((Float_t)padVal / (maxTime - minTime));
     }
     padVal = TMath::Min(padVal, fSector->fMaxVal);
-    if(padVal > fSector->fThreshold)
+    if (padVal > fSector->fThreshold) {
       fSector->ColorFromArray(padVal, imgPos);
+    }
     imgPos += 4;
   }
 }
@@ -210,7 +211,8 @@ void AliEveTPCSector2DGL::CreateTexture() const
 {
   // Create texture that holds pad data.
 
-  if (fImage == 0) {
+  if (fImage == 0)
+  {
     fImage = new UChar_t[fgkTextureByteSize];
     glGenTextures(1, &fTexture);
   }
index 2bf5ea6..60dd6c5 100644 (file)
@@ -95,8 +95,8 @@ void AliEveTPCSector3D::Paint(Option_t* /*option*/)
 
   // Section kCore
   buffer.fID           = this;
-  buffer.fColor        = 1;
-  buffer.fTransparency = 0;
+  buffer.fColor        = GetMainColor();
+  buffer.fTransparency = GetMainTransparency();
   if (HasMainTrans()) RefMainTrans().SetBuffer3D(buffer);
   buffer.SetSectionsValid(TBuffer3D::kCore);
 
index cf504b2..823e788 100644 (file)
@@ -181,12 +181,11 @@ void AliEveTPCSectorViz::SetupColor(Int_t val, UChar_t* pixel) const
 {
   // Set pixel color to represent signal val from the current palette.
 
-  using namespace TMath;
-  Float_t div  = Max(1, fMaxVal - fThreshold);
+  Float_t div  = TMath::Max(1, fMaxVal - fThreshold);
   Int_t   nCol = gStyle->GetNumberOfColors();
-  Int_t   cBin = (Int_t) Nint(nCol*(val - fThreshold)/div);
+  Int_t   cBin = TMath::Nint(nCol*(val - fThreshold)/div);
 
-  TEveUtil::ColorFromIdx(gStyle->GetColorPalette(Min(nCol - 1, cBin)), pixel);
+  TEveUtil::ColorFromIdx(gStyle->GetColorPalette(TMath::Min(nCol - 1, cBin)), pixel);
 }
 
 void AliEveTPCSectorViz::ClearColorArray()
index 00f8bfc..eca8a88 100644 (file)
@@ -11,7 +11,6 @@
 #include <EveDet/AliEveTPCSectorViz.h>
 
 #include <TEveGValuators.h>
-#include <TEveTransEditor.h>
 
 #include <TVirtualPad.h>
 
@@ -32,7 +31,6 @@ AliEveTPCSectorVizEditor::AliEveTPCSectorVizEditor(const TGWindow *p,
                                        UInt_t options, Pixel_t back) :
   TGedFrame(p, width, height, options | kVerticalFrame, back),
   fM(0),
-  fHMTrans   (0),
   fSectorID  (0), fAutoTrans (0),
   fRnrInn    (0), fRnrOut1   (0), fRnrOut2(0),
   fThreshold (0), fMaxVal    (0),
@@ -44,13 +42,6 @@ AliEveTPCSectorVizEditor::AliEveTPCSectorVizEditor(const TGWindow *p,
 
   Int_t labelW = 60;
 
-  MakeTitle("Transformation matrix");
-
-  fHMTrans = new TEveTransSubEditor(this);
-  fHMTrans->Connect("UseTrans()",     "AliEveTPCSectorVizEditor", this, "Update()");
-  fHMTrans->Connect("TransChanged()", "AliEveTPCSectorVizEditor", this, "Update()");
-  AddFrame(fHMTrans, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 0, 0, 0));
-
   MakeTitle("AliEveTPCSectorViz");
 
   fSectorID = new TEveGValuator(this, "SectorID", 110, 0);
@@ -126,8 +117,6 @@ void AliEveTPCSectorVizEditor::SetModel(TObject* obj)
 
   fM = dynamic_cast<AliEveTPCSectorViz*>(obj);
 
-  fHMTrans->SetModel(fM->PtrMainTrans());
-
   fSectorID->SetValue(fM->fSectorID);
   fAutoTrans->SetState(fM->fAutoTrans  ? kButtonDown : kButtonUp);
 
index a9605b2..9e61fe1 100644 (file)
@@ -20,7 +20,6 @@ class TGHSlider;
 
 class TEveGValuator;
 class TEveGDoubleValuator;
-class TEveTransSubEditor;
 
 class AliEveTPCSectorViz;
 
@@ -53,8 +52,6 @@ public:
 protected:
   AliEveTPCSectorViz   *fM;          // Model dynamic-casted to AliEveTPCSectorVizEditor
 
-  TEveTransSubEditor   *fHMTrans;    // Widget for transormation.
-
   TEveGValuator        *fSectorID;   // Widget for SectorID.
   TGCheckButton        *fAutoTrans;  // Widget for AutoTrans.
 
index 5d625e1..5d901a4 100644 (file)
@@ -35,6 +35,7 @@
 
 #include "TRootEmbeddedCanvas.h"
 #include "TGSplitFrame.h"
+#include "TGLOverlayButton.h"
 #include "TGLEmbeddedViewer.h"
 #include "TGShapedFrame.h"
 #include "TGButton.h"
@@ -200,9 +201,10 @@ public:
    void           OnMouseOver(TGLPhysicalShape *shape);
    void           OnViewerActivated();
    void           OpenFile(const char *fname);
+   void           SwapToMainView(TGLViewerBase *viewer);
    void           ToggleOrthoRotate();
    void           ToggleOrthoDolly();
-   void           SwapToMainView();
+   void           UnDock(TGLViewerBase *viewer);
    void           LoadConfig(const char *fname);
    void           SaveConfig(const char *fname);
    static void    UpdateSummary();
@@ -614,10 +616,8 @@ SplitGLView::SplitGLView(const TGWindow *p, UInt_t w, UInt_t h, Bool_t embed) :
 {
    // Main frame constructor.
 
-   TGSplitFrame *frm;
-   TEveScene *s = 0;
-   TGHorizontalFrame *hfrm;
-   TGPictureButton *button;
+   TGSplitFrame    *frm    = 0;
+   TEveScene       *s      = 0;
 
    // create the "file" popup menu
    fMenuFile = new TGPopupMenu(gClient->GetRoot());
@@ -697,10 +697,15 @@ SplitGLView::SplitGLView(const TGWindow *p, UInt_t w, UInt_t h, Bool_t embed) :
    // 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
@@ -716,7 +721,7 @@ SplitGLView::SplitGLView(const TGWindow *p, UInt_t w, UInt_t h, Bool_t embed) :
    fViewer0->Connect("Clicked(TObject*)", "SplitGLView", this, 
                      "OnClicked(TObject*)");
    fViewer[0] = new TEveViewer("SplitGLViewer[0]");
-   fViewer[0]->SetGLViewer(fViewer0);
+   fViewer[0]->SetGLViewer(fViewer0, fViewer0->GetFrame());
    fViewer[0]->IncDenyDestroy();
    if (fIsEmbedded && gEve) {
       fViewer[0]->AddScene(gEve->GetGlobalScene());
@@ -732,17 +737,14 @@ SplitGLView::SplitGLView(const TGWindow *p, UInt_t w, UInt_t h, Bool_t embed) :
    // get bottom left split frame
    frm = fSplitFrame->GetSecond()->GetFirst();
 
-   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()");
-
    // create (embed) a GL viewer inside
-   fViewer1 = new TGLEmbeddedViewer(hfrm, fPad);
-   hfrm->AddFrame(fViewer1->GetFrame(), new TGLayoutHints(kLHintsExpandX | 
-                                                          kLHintsExpandY));
-   frm->AddFrame(hfrm, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
+   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);
@@ -757,7 +759,7 @@ SplitGLView::SplitGLView(const TGWindow *p, UInt_t w, UInt_t h, Bool_t embed) :
    fViewer1->Connect("Clicked(TObject*)", "SplitGLView", this, 
                      "OnClicked(TObject*)");
    fViewer[1] = new TEveViewer("SplitGLViewer[1]");
-   fViewer[1]->SetGLViewer(fViewer1);
+   fViewer[1]->SetGLViewer(fViewer1, fViewer1->GetFrame());
    fViewer[1]->IncDenyDestroy();
    if (fIsEmbedded && gEve) {
       fRhoZMgr->ImportElements((TEveElement *)gEve->GetGlobalScene());
@@ -777,17 +779,13 @@ SplitGLView::SplitGLView(const TGWindow *p, UInt_t w, UInt_t h, Bool_t embed) :
    // get bottom right frame
    frm = fSplitFrame->GetSecond()->GetSecond();
    // create (embed) a GL viewer inside
-   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()");
-
-   // create (embed) a GL viewer inside
-   fViewer2 = new TGLEmbeddedViewer(hfrm, fPad);
-   hfrm->AddFrame(fViewer2->GetFrame(), new TGLayoutHints(kLHintsExpandX | 
-                                                          kLHintsExpandY));
-   frm->AddFrame(hfrm, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
+   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);
@@ -802,7 +800,7 @@ SplitGLView::SplitGLView(const TGWindow *p, UInt_t w, UInt_t h, Bool_t embed) :
    fViewer2->Connect("Clicked(TObject*)", "SplitGLView", this, 
                      "OnClicked(TObject*)");
    fViewer[2] = new TEveViewer("SplitGLViewer[2]");
-   fViewer[2]->SetGLViewer(fViewer2);
+   fViewer[2]->SetGLViewer(fViewer2, fViewer2->GetFrame());
    fViewer[2]->IncDenyDestroy();
    if (fIsEmbedded && gEve) {
       fRPhiMgr->ImportElements((TEveElement *)gEve->GetGlobalScene());
@@ -1315,19 +1313,43 @@ void SplitGLView::SaveConfig(const char *fname)
 }
 
 //______________________________________________________________________________
-void SplitGLView::SwapToMainView()
+void SplitGLView::SwapToMainView(TGLViewerBase *viewer)
 {
-   TGPictureButton *src = (TGPictureButton*)gTQSender;
-   TGCompositeFrame *parent = (TGCompositeFrame *)(src->GetParent());
-   TGFrame *source = dynamic_cast<TGFrameElement*>(parent->GetList()->Last())->fFrame;
-   if (!source) return;
+   // Swap frame embedded in a splitframe to the main view (slot method).
 
-   TGSplitFrame *dest = fSplitFrame->GetFirst();
-   
-   TGFrame *prev = (TGFrame *)(dest->GetFrame());
-   
-   if ((source != prev) && (source != dest))
-      TGSplitFrame::SwitchFrames(source, dest, prev);
+   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();
 }
 
 //______________________________________________________________________________
index ddfc1cd..1cb2d25 100644 (file)
@@ -79,9 +79,7 @@ TEvePointSet* its_clusters(TEveElement* cont=0, Float_t maxR=50)
   clusters->SetTitle(tip);
 
   const TString viz_tag("ITS Clusters");
-  // When going to new root call:
-  // clusters->ApplyVizTag(viz_tag, "Clusters");
-  clusters->ApplyVizTag(viz_tag);
+  clusters->ApplyVizTag(viz_tag, "Clusters");
 
   gEve->AddElement(clusters, cont);
 
index 56d5f9d..618c74c 100644 (file)
@@ -30,7 +30,7 @@ void its_module_stepper(Int_t det = 0)
   gEve->Redraw3D(kTRUE); // To enforce camera reset
   gEve->EnableRedraw();
 
-  TGLViewer* v = (TGLViewer *)gEve->GetGLViewer();
+  TGLViewer* v = gEve->GetDefaultGLViewer();
   v->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
   TGLCameraMarkupStyle* mup = v->GetCameraMarkup();
   if(mup) mup->SetShow(kFALSE);
index fcb9e26..0f66537 100644 (file)
@@ -74,9 +74,7 @@ TEvePointSet* tof_clusters(TEveElement* cont=0, Float_t maxR=390)
   clusters->SetTitle(tip);
 
   const TString viz_tag("TOF Clusters");
-  // when going to new root call:
-  // clusters->ApplyVizTag(viz_tag, "Clusters");
-  clusters->ApplyVizTag(viz_tag);
+  clusters->ApplyVizTag(viz_tag, "Clusters");
 
   gEve->AddElement(clusters, cont);
 
index 24e9ab1..8a5265b 100644 (file)
@@ -90,9 +90,7 @@ TEvePointSet* tpc_clusters(TEveElement* cont=0, Float_t maxR=270)
   clusters->SetTitle(tip);
 
   const TString viz_tag("TPC Clusters");
-  // when going to new root call:
-  // clusters->ApplyVizTag(viz_tag, "Clusters");
-  clusters->ApplyVizTag(viz_tag);
+  clusters->ApplyVizTag(viz_tag, "Clusters");
 
   gEve->AddElement(clusters, cont);
 
index 0d743e2..a266631 100644 (file)
@@ -33,7 +33,7 @@ void tpc_digits(Int_t mode=1)
     gEve->AddElement(s);
     gEve->Redraw3D();
 
-    //TGLViewer* cam = gEve->GetGLViewer();
+    //TGLViewer* cam = gEve->GetDefaultGLViewer();
     //cam->SetCurrentCamera(TGLViewer::kCameraOrthoXOY) ;
     //cam->SetOrthoCamera(TGLViewer::kCameraOrthoXOY, 2*left, 2*right, 2*top, bottom);
     //printf("%f %f %f %f\n", left, right, top, bottom);
@@ -56,7 +56,7 @@ void tpc_digits(Int_t mode=1)
        s->SetDataSource(x);
        s->SetFrameColor(col);
        s->SetAutoTrans(kTRUE);
-       gEve->AddElement(s, l);
+       l->AddElement(s);
       }
     }
     {
@@ -72,7 +72,7 @@ void tpc_digits(Int_t mode=1)
        s->SetDataSource(x);
        s->SetFrameColor(col);
        s->SetAutoTrans(kTRUE);
-       gEve->AddElement(s, l);
+       l->AddElement(s);
       }
     }
     gEve->EnableRedraw();
@@ -104,7 +104,7 @@ void tpc_digits(Int_t mode=1)
        s->SetDataSource(x);
        s->SetFrameColor(col);
        s->SetAutoTrans(kTRUE);
-       gEve->AddElement(s, l);
+       l->AddElement(s);
       }
     }
     {
@@ -120,7 +120,7 @@ void tpc_digits(Int_t mode=1)
        s->SetDataSource(x);
        s->SetFrameColor(col);
        s->SetAutoTrans(kTRUE);
-       gEve->AddElement(s, l);
+       l->AddElement(s);
       }
     }
     gEve->EnableRedraw();
index f5a2d77..8cffb36 100644 (file)
@@ -74,9 +74,7 @@ TEvePointSet* trd_clusters(TEveElement *cont = 0)
   clusters->SetTitle(tip);
 
   const TString viz_tag("TRD Clusters");
-  // when going to new root call:
-  // clusters->ApplyVizTag(viz_tag, "Clusters");
-  clusters->ApplyVizTag(viz_tag);
+  clusters->ApplyVizTag(viz_tag, "Clusters");
 
   gEve->AddElement(clusters, cont);
 
index 186b2e1..ced8ed4 100644 (file)
@@ -32,7 +32,7 @@ void trd_tracks(TEveElement *cont = 0)
   for (Int_t n=0; n<esd->GetNumberOfTracks(); n++){
     AliESDtrack* esdTrack = esd->GetTrack(n);
     AliESDfriendTrack *friendTrack = eventESDfriend->GetTrack(n);
-  
+
     TObject *cal = 0x0;
     Int_t ical = 0;
     while(cal = friendTrack->GetCalibObject(ical++)){
@@ -47,17 +47,17 @@ void trd_tracks(TEveElement *cont = 0)
   }
 
   delete reco;
-       
+
   tracks->SetTitle(Form("Tracks %d", tracks->NumChildren()));
   tracks->StampObjProps();
   gEve->AddElement(tracks, cont);
-  
+
   gEve->Redraw3D();
 
-  TGLViewer *v = gEve->GetGLViewer();
+  TGLViewer *v = gEve->GetDefaultGLViewer();
   v->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
   ((TGLOrthoCamera&)v->CurrentCamera()).SetEnableRotate(kTRUE);
   v->UpdateScene();
-  
+
   return;
 }
index cb4206d..1781239 100644 (file)
@@ -7,11 +7,6 @@
  * full copyright notice.                                                 *
  **************************************************************************/
 
-#ifndef __CINT_
-#include <list>
-#include <string>
-#endif
-
 void alieve_init(const Text_t* path   = ".", Int_t event=0,
                  const Text_t* esdfile = 0,
                  const Text_t* aodfile = 0,
@@ -27,7 +22,8 @@ void alieve_init(const Text_t* path   = ".", Int_t event=0,
   alieve_init_import_macros();
   gSystem->cd(hack);
 
-  // Temporarily assert default vizdb
+  alieve_init_basic_vizdb();
+  // Temporarily assert also default vizdb.
   TEveUtil::AssertMacro("VizDB_scan.C");
 
   gSystem->ProcessEvents();
@@ -61,8 +57,8 @@ void alieve_init_import_macros()
   if (dirhandle != 0)
   {
     char* filename;
-    TPRegexp re("\.C$");
-    std::list<string> names;
+    TPMERegexp re("\\.C$");
+    std::list<string> names; // This form understood by cint (fails with std::string).
     while ((filename = gSystem->GetDirEntry(dirhandle)) != 0)
     {
       if (re.Match(filename))
@@ -102,3 +98,14 @@ void alieve_init_import_macros()
     }
   }
 }
+
+void alieve_init_basic_vizdb()
+{
+  TEvePointSet* ps;
+
+  ps = new TEvePointSet();
+  ps->SetMarkerColor(4);
+  ps->SetMarkerSize(0.2);
+  ps->SetMarkerStyle(2);
+  gEve->InsertVizDBEntry("Clusters", ps);
+}
index 14c2a82..cad20b2 100644 (file)
@@ -37,18 +37,14 @@ void alieve_online_init()
 
   if (gRPhiMgr) {
     TEveProjectionAxes* a = new TEveProjectionAxes(gRPhiMgr);
-    a->SetNumTickMarks(3);
-    a->SetText("R-Phi");
-    a->SetFontFile("comicbd");
-    a->SetFontSize(10);
+    a->SetNdiv(3);
+    a->SetTitle("R-Phi");
     gEve->GetScenes()->FindChild("R-Phi Projection")->AddElement(a);
   }
   if (gRhoZMgr) {
     TEveProjectionAxes* a = new TEveProjectionAxes(gRhoZMgr);
-    a->SetNumTickMarks(3);
-    a->SetText("Rho-Z");
-    a->SetFontFile("comicbd");
-    a->SetFontSize(10);
+    a->SetNdiv(3);
+    a->SetTitle("Rho-Z");
     gEve->GetScenes()->FindChild("Rho-Z Projection")->AddElement(a);
   }
 
index 3b10ba0..90d3868 100644 (file)
@@ -13,16 +13,27 @@ 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;
 
+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 gCenterProjectionsAtPrimaryVertex = kFALSE;
+
 void anyscan_init()
 {
   TEveUtil::LoadMacro("alieve_init.C");
@@ -32,37 +43,17 @@ void anyscan_init()
 
   TEveUtil::AssertMacro("VizDB_scan.C");
 
+  AliEveMacroExecutor *exec    = AliEveEventManager::GetMaster()->GetExecutor();
+  TEveBrowser         *browser = gEve->GetBrowser();
 
-  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);
-
+  //==============================================================================
+  // Geometry, scenes, projections and viewers
+  //==============================================================================
 
-  gROOT->ProcessLine(".L SplitGLView.C+");
-  TEveBrowser* browser = gEve->GetBrowser();
-  browser->ExecPlugin("SplitGLView", 0, "new SplitGLView(gClient->GetRoot(), 600, 450, kTRUE)");
+  browser->ShowCloseTab(kFALSE);
 
-  if (gRPhiMgr) {
-    TEveProjectionAxes* a = new TEveProjectionAxes(gRPhiMgr);
-    a->SetNumTickMarks(3);
-    a->SetText("R-Phi");
-    a->SetFontFile("comicbd");
-    a->SetFontSize(10);
-    gEve->GetScenes()->FindChild("R-Phi Projection")->AddElement(a);
-  }
-  if (gRhoZMgr) {
-    TEveProjectionAxes* a = new TEveProjectionAxes(gRhoZMgr);
-    a->SetNumTickMarks(3);
-    a->SetText("Rho-Z");
-    a->SetFontFile("comicbd");
-    a->SetFontSize(10);
-    gEve->GetScenes()->FindChild("Rho-Z Projection")->AddElement(a);
-  }
+  // Geometry
 
-  // geometry
   TEveUtil::LoadMacro("geom_gentle.C");
   gGeomGentle = geom_gentle();
   gGeomGentleRPhi = geom_gentle_rphi(); gGeomGentleRPhi->IncDenyDestroy();
@@ -72,8 +63,84 @@ void anyscan_init()
     gGeomGentleTRD = geom_gentle_trd();
   }
 
+  // Scenes
+
+  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.");
+
+  // Projection managers
+
+  gRPhiMgr = new TEveProjectionManager();
+  gRPhiMgr->SetProjection(TEveProjection::kPT_RPhi);
+  {
+    TEveProjectionAxes* a = new TEveProjectionAxes(gRPhiMgr);
+    a->SetMainColor(kWhite);
+    a->SetTitle("R-Phi");
+    a->SetTitleSize(0.05);
+    a->SetTitleFontName("comicbd");
+    a->SetLabelSize(0.025);
+    a->SetLabelFontName("comicbd");
+    gRPhiGeomScene->AddElement(a);
+  }
+  gRPhiMgr->ImportElements(gGeomGentleRPhi, gRPhiGeomScene);
+  if (gShowTRD)
+    gRPhiMgr->ImportElements(gGeomGentleTRD, gRPhiGeomScene);
 
-  AliEveMacroExecutor *exec = AliEveEventManager::GetMaster()->GetExecutor();
+  gRhoZMgr = new TEveProjectionManager();
+  gRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ);
+  {
+    TEveProjectionAxes* a = new TEveProjectionAxes(gRhoZMgr);
+    a->SetMainColor(kWhite);
+    a->SetTitle("Rho-Z");
+    a->SetTitleSize(0.05);
+    a->SetTitleFontName("comicbd");
+    a->SetLabelSize(0.025);
+    a->SetLabelFontName("comicbd");
+    gRhoZGeomScene->AddElement(a);
+  }
+  gRhoZMgr->ImportElements(gGeomGentleRhoZ, gRhoZGeomScene);
+  if (gShowTRD)
+    gRhoZMgr->ImportElements(gGeomGentleTRD, 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));
 
@@ -98,7 +165,8 @@ void anyscan_init()
   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"));
+  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"));
@@ -114,16 +182,21 @@ void anyscan_init()
   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"));
 
-  TEveBrowser* browser = gEve->GetBrowser();
 
-  browser->StartEmbedding(TRootBrowser::kRight);
+  //==============================================================================
+  // Additional GUI components
+  //==============================================================================
+
+  slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
+  slot->StartEmbedding();
   AliEveMacroExecutorWindow* exewin = new AliEveMacroExecutorWindow(exec);
-  browser->StopEmbedding("DataSelection");
+  slot->StopEmbedding("DataSelection");
   exewin->PopulateMacros();
 
-  browser->StartEmbedding();
+  slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
+  slot->StartEmbedding();
   new AliQAHistViewer(gClient->GetRoot(), 600, 400, kTRUE);
-  browser->StopEmbedding("QA histograms");
+  slot->StopEmbedding("QA histograms");
 
   browser->GetTabRight()->SetTab(1);
 
@@ -131,7 +204,34 @@ void anyscan_init()
   new AliEveEventManagerWindow(AliEveEventManager::GetMaster());
   browser->StopEmbedding("EventCtrl");
 
-  // event
+  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);
+
+  //==============================================================================
+  // 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);
 
@@ -176,7 +276,7 @@ void on_new_event()
     Warning("on_new_event", "g_esd_tracks_by_category_container not initialized.");
   }
 
-  Double_t x[3] = { 0, 0, 0};
+  Double_t x[3] = { 0, 0, 0 };
 
   if (AliEveEventManager::HasESD())
   {
@@ -195,20 +295,16 @@ void on_new_event()
 
   if (gRPhiMgr && top)
   {
-    gRPhiMgr->DestroyElements();
-    gRPhiMgr->SetCenter(x[0], x[1], x[2]);
-    gRPhiMgr->ImportElements(gGeomGentleRPhi);
-    if (gShowTRD) gRPhiMgr->ImportElements(gGeomGentleTRD);
-    gRPhiMgr->ImportElements(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);
+    gRhoZEventScene->DestroyElements();
+    if (gCenterProjectionsAtPrimaryVertex)
+      gRhoZMgr->SetCenter(x[0], x[1], x[2]);
+    gRhoZMgr->ImportElements(top, gRhoZEventScene);
   }
-
-  SplitGLView::UpdateSummary();
 }
index c6c396a..a7d285a 100644 (file)
@@ -54,7 +54,7 @@ void auto_rotate_camera()
      hRotateStep = -hRotateStep;
    }
 
-   TGLViewer *v   = gEve->GetGLViewer();
+   TGLViewer *v   = gEve->GetDefaultGLViewer();
    TGLCamera &cam = v->CurrentCamera();
    cam.RotateRad(hRotateStep * g_rotate_speed, vRotateStep * g_rotate_speed);
    v->RequestDraw(TGLRnrCtx::kLODHigh);
index 12d8b35..726cc92 100644 (file)
@@ -1,3 +1,6 @@
+TEveViewer *gSignalView     = 0;
+TEveViewer *gBackgroundView = 0;
+
 void embed_init()
 {
   TEveUtil::LoadMacro("alieve_init.C");
@@ -8,10 +11,8 @@ void embed_init()
   // ------------------------------------------------------------------------
 
   Info("embed_init", "Opening background event ...");
-  // Need strings as CINT can't properly convert "raw-string" to const TString&.
-  TString name("Background Event");
-  TString path("Background");
-  AliEveEventManager* bkg = AliEveEventManager::AddDependentManager(name, path);
+  AliEveEventManager* bkg =
+    AliEveEventManager::AddDependentManager("Background Event", "Background");
   bkg->IncDenyDestroy();
   bkg->AddNewEventCommand("background_event()");
   gEve->AddToListTree(bkg, kTRUE);
@@ -19,18 +20,36 @@ void embed_init()
   TEveScene* bs = gEve->SpawnNewScene("Background");
   bs->AddElement(bkg);
 
-  gEve->GetDefViewer()->AddScene(bs);
+  gEve->GetDefaultViewer()->AddScene(bs);
+
+  // ------------------------------------------------------------------------
+
+  TEveBrowser* browser = gEve->GetBrowser();
+
+  TEveWindowSlot *slot = 0;
+  TEveWindowPack *pack = 0;
+
+  slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
+  pack = slot->MakePack();
+  pack->SetElementName("Parallel View");
+  pack->SetHorizontal();
+  pack->SetShowTitleBar(kFALSE);
+
+  pack->NewSlot()->MakeCurrent();
+  gSignalView = gEve->SpawnNewViewer("Signal View", "");
+  gSignalView->AddScene(gEve->GetEventScene());
+
+  pack->NewSlot()->MakeCurrent();
+  gBackgroundView = gEve->SpawnNewViewer("Background View", "");
+  gBackgroundView->AddScene(bs);
 
   // ------------------------------------------------------------------------
 
-  TEveUtil::LoadMacro("SplitGLView.C+"); // Needed for dependencies.
   TEveUtil::LoadMacro("its_clusters.C+");
   TEveUtil::LoadMacro("tpc_clusters.C+");
 
   // ------------------------------------------------------------------------
 
-  TEveBrowser* browser = gEve->GetBrowser();
-
   browser->StartEmbedding(TRootBrowser::kBottom);
   new AliEveEventManagerWindow(AliEveEventManager::GetMaster());
   browser->StopEmbedding("EventCtrl");
index 3d0c0f6..a0a54ec 100644 (file)
@@ -33,29 +33,7 @@ void visscan_init()
   AliEveTrackCounter* g_trkcnt = new AliEveTrackCounter("Primary Counter");
   gEve->AddToListTree(g_trkcnt, kFALSE);
 
-
-  gROOT->ProcessLine(".L SplitGLView.C+");
-  TEveBrowser* browser = gEve->GetBrowser();
-  browser->ExecPlugin("SplitGLView", 0, "new SplitGLView(gClient->GetRoot(), 600, 450, kTRUE)");
-
-   if (gRPhiMgr) {
-      TEveProjectionAxes* a = new TEveProjectionAxes(gRPhiMgr);
-      a->SetNumTickMarks(3);
-      a->SetText("R-Phi");
-      a->SetFontFile("comicbd");
-      a->SetFontSize(10);
-      gEve->GetScenes()->FindChild("R-Phi Projection")->AddElement(a);
-   }
-   if (gRhoZMgr) {
-      TEveProjectionAxes* a = new TEveProjectionAxes(gRhoZMgr);
-      a->SetNumTickMarks(3);
-      a->SetText("Rho-Z");
-      a->SetFontFile("comicbd");
-      a->SetFontSize(10);
-      gEve->GetScenes()->FindChild("Rho-Z Projection")->AddElement(a);
-   }
-
-  // geometry
+  // Geometry
   TEveUtil::LoadMacro("geom_gentle.C");
   gGeomGentle     = geom_gentle();
   gGeomGentleRPhi = geom_gentle_rphi(); gGeomGentleRPhi->IncDenyDestroy();
@@ -65,7 +43,7 @@ void visscan_init()
     gGeomGentleTRD = geom_gentle_trd();
   }
 
-  // event data
+  // Per event data
   TEveUtil::LoadMacro("primary_vertex.C");
   TEveUtil::LoadMacro("esd_V0_points.C");
   TEveUtil::LoadMacro("esd_V0.C");
@@ -80,12 +58,40 @@ void visscan_init()
   // 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)");
+
+  browser->ShowCloseTab(kTRUE);
 
   browser->StartEmbedding(TRootBrowser::kBottom);
   new AliEveEventManagerWindow(AliEveEventManager::GetMaster());
   browser->StopEmbedding("EventCtrl");
 
-  // event
+  // Projections
+  if (gRPhiMgr) {
+    TEveProjectionAxes* a = new TEveProjectionAxes(gRPhiMgr);
+    a->SetMainColor(kWhite);
+    a->SetTitle("R-Phi");
+    a->SetTitleSize(0.05);
+    a->SetTitleFontName("comicbd");
+    a->SetLabelSize(0.025);
+    a->SetLabelFontName("comicbd");
+    gEve->GetScenes()->FindChild("R-Phi Projection")->AddElement(a);
+  }
+  if (gRhoZMgr) {
+    TEveProjectionAxes* a = new TEveProjectionAxes(gRhoZMgr);
+    a->SetMainColor(kWhite);
+    a->SetTitle("Rho-Z");
+    a->SetTitleSize(0.05);
+    a->SetTitleFontName("comicbd");
+    a->SetLabelSize(0.025);
+    a->SetLabelFontName("comicbd");
+    gEve->GetScenes()->FindChild("Rho-Z Projection")->AddElement(a);
+  }
+
+  // Event
   AliEveEventManager::GetMaster()->AddNewEventCommand("on_new_event();");
   AliEveEventManager::GetMaster()->GotoEvent(0);