ROOT logo
// @(#)root/eve:$Id: TEveElement.cxx 31234 2009-11-17 14:57:10Z matevz $
// Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "TEveElement.h"
#include "TEveCompound.h"
#include "TEveTrans.h"
#include "TEveManager.h"
#include "TEveSelection.h"
#include "TEveProjectionBases.h"

#include "TGeoMatrix.h"

#include "TClass.h"
#include "TPRegexp.h"
#include "TROOT.h"
#include "TColor.h"
#include "TEveBrowser.h"
#include "TGListTree.h"
#include "TGPicture.h"

#include <algorithm>

//==============================================================================
//==============================================================================
// TEveElement::TEveListTreeInfo
//==============================================================================

//______________________________________________________________________________
//
// Structure holding information about TGListTree and TGListTreeItem
// that represents given TEveElement. This needed because each element
// can appear in several list-trees as well as several times in the
// same list-tree.

ClassImp(TEveElement::TEveListTreeInfo);


//==============================================================================
//==============================================================================
// TEveElement
//==============================================================================

//______________________________________________________________________________
//
// Base class for TEveUtil visualization elements, providing hierarchy
// management, rendering control and list-tree item management.

ClassImp(TEveElement);

//______________________________________________________________________________
const TGPicture* TEveElement::fgRnrIcons[4]      = { 0 };
const TGPicture* TEveElement::fgListTreeIcons[8] = { 0 };

//______________________________________________________________________________
TEveElement::TEveElement() :
   fParents             (),
   fChildren            (),
   fCompound            (0),
   fVizModel            (0),
   fVizTag              (),
   fParentIgnoreCnt     (0),
   fTopItemCnt          (0),
   fDenyDestroy         (0),
   fDestroyOnZeroRefCnt (kTRUE),
   fRnrSelf             (kTRUE),
   fRnrChildren         (kTRUE),
   fCanEditMainTrans    (kFALSE),
   fMainTransparency    (0),
   fMainColorPtr        (0),
   fMainTrans           (0),
   fItems               (),
   fSource              (),
   fUserData            (0),
   fPickable            (kFALSE),
   fSelected            (kFALSE),
   fHighlighted         (kFALSE),
   fImpliedSelected     (0),
   fImpliedHighlighted  (0),
   fChangeBits          (0),
   fDestructing         (kFALSE)
{
   // Default contructor.
}

//______________________________________________________________________________
TEveElement::TEveElement(Color_t& main_color) :
   fParents             (),
   fChildren            (),
   fCompound            (0),
   fVizModel            (0),
   fVizTag              (),
   fParentIgnoreCnt     (0),
   fTopItemCnt          (0),
   fDenyDestroy         (0),
   fDestroyOnZeroRefCnt (kTRUE),
   fRnrSelf             (kTRUE),
   fRnrChildren         (kTRUE),
   fCanEditMainTrans    (kFALSE),
   fMainTransparency    (0),
   fMainColorPtr        (&main_color),
   fMainTrans           (0),
   fItems               (),
   fSource              (),
   fUserData            (0),
   fPickable            (kFALSE),
   fSelected            (kFALSE),
   fHighlighted         (kFALSE),
   fImpliedSelected     (0),
   fImpliedHighlighted  (0),
   fChangeBits          (0),
   fDestructing         (kFALSE)
{
   // Constructor.
}

//______________________________________________________________________________
TEveElement::TEveElement(const TEveElement& e) :
   fParents             (),
   fChildren            (),
   fCompound            (0),
   fVizModel            (0),
   fVizTag              (e.fVizTag),
   fParentIgnoreCnt     (0),
   fTopItemCnt          (0),
   fDenyDestroy         (0),
   fDestroyOnZeroRefCnt (e.fDestroyOnZeroRefCnt),
   fRnrSelf             (e.fRnrSelf),
   fRnrChildren         (e.fRnrChildren),
   fCanEditMainTrans    (e.fCanEditMainTrans),
   fMainTransparency    (e.fMainTransparency),
   fMainColorPtr        (0),
   fMainTrans           (0),
   fItems               (),
   fSource              (e.fSource),
   fUserData            (0),
   fPickable            (e.fPickable),
   fSelected            (kFALSE),
   fHighlighted         (kFALSE),
   fImpliedSelected     (0),
   fImpliedHighlighted  (0),
   fChangeBits          (0),
   fDestructing         (kFALSE)
{
   // Copy constructor. Does shallow copy.
   // For deep-cloning and children-cloning, see:
   //   TEveElement* CloneElementRecurse(Int_t level)
   //   void         CloneChildrenRecurse(TEveElement* dest, Int_t level)
   //
   // 'TRef fSource' is copied but 'void* UserData' is NOT.
   // If the element is projectable, its projections are NOT copied.
   //
   // Not implemented for most sub-classes, let us know.
   // Note that sub-classes of TEveProjected are NOT and will NOT be copyable.

   SetVizModel(e.fVizModel);
   if (e.fMainColorPtr)
      fMainColorPtr = (Color_t*)((const char*) this + ((const char*) e.fMainColorPtr - (const char*) &e));
   if (e.fMainTrans)
      fMainTrans = new TEveTrans(*e.fMainTrans);
}

//______________________________________________________________________________
TEveElement::~TEveElement()
{
   // Destructor.

   fDestructing = kTRUE;

   RemoveElementsInternal();

   for (List_i p=fParents.begin(); p!=fParents.end(); ++p)
   {
      (*p)->RemoveElementLocal(this);
      (*p)->fChildren.remove(this);
   }
   fParents.clear();

   for (sLTI_i i=fItems.begin(); i!=fItems.end(); ++i)
      i->fTree->DeleteItem(i->fItem);

   delete fMainTrans;
}

//______________________________________________________________________________
void TEveElement::PreDeleteElement()
{
   // Called before the element is deleted, thus offering the last chance
   // to detach from acquired resources and from the framework itself.
   // Here the request is just passed to TEveManager.
   // If you override it, make sure to call base-class version.

   gEve->PreDeleteElement(this);
}

//______________________________________________________________________________
TEveElement* TEveElement::CloneElement() const
{
   // Clone the element via copy constructor.
   // Should be implemented for all classes that require cloning support.

   return new TEveElement(*this);
}

//______________________________________________________________________________
TEveElement* TEveElement::CloneElementRecurse(Int_t level) const
{
   // Clone elements and recurse 'level' deep over children.
   // If level ==  0, only the element itself is cloned (default).
   // If level == -1, all the hierarchy is cloned.

   TEveElement* el = CloneElement();
   if (level--)
   {
      CloneChildrenRecurse(el, level);
   }
   return el;
}

//______________________________________________________________________________
void TEveElement::CloneChildrenRecurse(TEveElement* dest, Int_t level) const
{
   // Clone children and attach them to the dest element.
   // If level ==  0, only the direct descendants are cloned (default).
   // If level == -1, all the hierarchy is cloned.

   for (List_ci i=fChildren.begin(); i!=fChildren.end(); ++i)
   {
      dest->AddElement((*i)->CloneElementRecurse(level));
   }
}

//==============================================================================



//==============================================================================

//______________________________________________________________________________
const char* TEveElement::GetElementName() const
{
   // Virtual function for retrieveing name of the element.
   // Here we attempt to cast the assigned object into TNamed and call
   // GetName() there.

   static const TEveException eh("TEveElement::GetElementName ");

   TNamed* named = dynamic_cast<TNamed*>(GetObject(eh));
   return named ? named->GetName() : "<no-name>";
}

//______________________________________________________________________________
const char*  TEveElement::GetElementTitle() const
{
   // Virtual function for retrieveing title of the render-element.
   // Here we attempt to cast the assigned object into TNamed and call
   // GetTitle() there.

   static const TEveException eh("TEveElement::GetElementTitle ");

   TNamed* named = dynamic_cast<TNamed*>(GetObject(eh));
   return named ? named->GetTitle() : "<no-title>";
}

//______________________________________________________________________________
void TEveElement::SetElementName(const char* name)
{
   // Virtual function for setting of name of an element.
   // Here we attempt to cast the assigned object into TNamed and call
   // SetName() there.
   // If you override this call NameTitleChanged() from there.

   static const TEveException eh("TEveElement::SetElementName ");

   TNamed* named = dynamic_cast<TNamed*>(GetObject(eh));
   if (named) {
      named->SetName(name);
      NameTitleChanged();
   }
}

//______________________________________________________________________________
void TEveElement::SetElementTitle(const char* title)
{
   // Virtual function for setting of title of an element.
   // Here we attempt to cast the assigned object into TNamed and call
   // SetTitle() there.
   // If you override this call NameTitleChanged() from there.

   static const TEveException eh("TEveElement::SetElementTitle ");

   TNamed* named = dynamic_cast<TNamed*>(GetObject(eh));
   if (named) {
      named->SetTitle(title);
      NameTitleChanged();
   }
}

//______________________________________________________________________________
void TEveElement::SetElementNameTitle(const char* name, const char* title)
{
   // Virtual function for setting of name and title of render element.
   // Here we attempt to cast the assigned object into TNamed and call
   // SetNameTitle() there.
   // If you override this call NameTitleChanged() from there.

   static const TEveException eh("TEveElement::SetElementNameTitle ");

   TNamed* named = dynamic_cast<TNamed*>(GetObject(eh));
   if (named) {
      named->SetNameTitle(name, title);
      NameTitleChanged();
   }
}

//______________________________________________________________________________
void TEveElement::NameTitleChanged()
{
   // Virtual function called when a name or title of the element has
   // been changed.
   // If you override this, call also the version of your direct base-class.

   // Nothing to do - list-tree-items take this info directly.
}

//******************************************************************************

//______________________________________________________________________________
void TEveElement::SetVizModel(TEveElement* model)
{
   // Set visualization-parameter model element.
   // Calling of this function from outside of EVE should in principle
   // be avoided as it can lead to dis-synchronization of viz-tag and
   // viz-model.

   if (fVizModel) {
      --fParentIgnoreCnt;
      fVizModel->RemoveElement(this);
   }
   fVizModel = model;
   if (fVizModel) {
      fVizModel->AddElement(this);
      ++fParentIgnoreCnt;
   }
}

//______________________________________________________________________________
Bool_t TEveElement::FindVizModel()
{
   // Find model element in VizDB that corresponds to previously
   // assigned fVizTag and set fVizModel accordingly.
   // If the tag is not found in VizDB, the old model-element is kept
   // and false is returned.

   TEveElement* model = gEve->FindVizDBEntry(fVizTag);
   if (model)
   {
      SetVizModel(model);
      return kTRUE;
   }
   else
   {
      return kFALSE;
   }
}

//______________________________________________________________________________
Bool_t TEveElement::ApplyVizTag(const TString& tag, const TString& fallback_tag)
{
   // Set the VizTag, find model-element from the VizDB and copy
   // visualization-parameters from it. If the model is not found and
   // fallback_tag is non-null, its search is attempted as well.
   // For example: ApplyVizTag("TPC Clusters", "Clusters");
   //
   // If the model-element can not be found a warning is printed and
   // false is returned.

   SetVizTag(tag);
   if (FindVizModel())
   {
      CopyVizParamsFromDB();
      return kTRUE;
   }
   if ( ! fallback_tag.IsNull())
   {
      SetVizTag(fallback_tag);
      if (FindVizModel())
      {
         CopyVizParamsFromDB();
         return kTRUE;
      }
   }
   Warning("TEveElement::ApplyVizTag", "entry for tag '%s' not found in VizDB.", tag.Data());
   return kFALSE;
}

//______________________________________________________________________________
void TEveElement::PropagateVizParamsToProjecteds()
{
   // Propagate visualization parameters to dependent elements.
   //
   // MainColor is propagated independently in SetMainColor().
   // In this case, as fMainColor is a pointer to Color_t, it should
   // be set in TProperClass::CopyVizParams().
   //
   // Render state is not propagated. Maybe it should be, at least optionally.

   TEveProjectable* pable = dynamic_cast<TEveProjectable*>(this);
   if (pable && pable->HasProjecteds())
   {
      pable->PropagateVizParams();
   }
}

//______________________________________________________________________________
void TEveElement::PropagateVizParamsToElements(TEveElement* el)
{
   // Propagate visualization parameters from element el (defaulting
   // to this) to all elements (children).
   //
   // The primary use of this is for model-elements from
   // visualization-parameter database.

   if (el == 0)
      el = this;

   for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
   {
      (*i)->CopyVizParams(el);
   }
}

//______________________________________________________________________________
void TEveElement::CopyVizParams(const TEveElement* /* el */)
{
   // Copy visualization parameters from element el.
   // This method needs to be overriden by any class that introduces
   // new parameters.
   // See, for example, TEvePointSet::CopyVizParams(),
   // TEveLine::CopyVizParams() and TEveTrack::CopyVizParams().

   AddStamp(kCBColorSelection | kCBObjProps);
}

//______________________________________________________________________________
void TEveElement::CopyVizParamsFromDB()
{
   // Copy visualization parameters from the model-element fVizModel.
   // A warning is printed if the model-element fVizModel is not set.

   if (fVizModel)
   {
      CopyVizParams(fVizModel);
   }
   else
   {
      Warning("TEveElement::CopyVizParamsFromDB", "VizModel has not been set.");
   }
}

//______________________________________________________________________________
void TEveElement::SaveVizParams(ostream& out, const TString& tag, const TString& var)
{
   // Save visualization parameters for this element with given tag.
   //
   // This function creates the instantiation code, calls virtual
   // WriteVizParams() and, at the end, writes out the code for
   // registration of the model into the VizDB.

   TString t = "   ";
   TString cls(GetObject()->ClassName());

   out << "\n";

   TString intro = " TAG='" + tag + "', CLASS='" + cls + "'";
   out << "   //" << intro << "\n";
   out << "   //" << TString('-', intro.Length()) << "\n";
   out << t << cls << "* " << var <<" = new " << cls << ";\n";

   WriteVizParams(out, var);

   out << t << "gEve->InsertVizDBEntry(\"" << tag << "\", "<< var <<");\n";
}

//______________________________________________________________________________
void TEveElement::WriteVizParams(ostream& out, const TString& var)
{
   // Write-out visual parameters for this object.
   // This is a virtual function and all sub-classes are required to
   // first call the base-element version.
   // The name of the element pointer is 'x%03d', due to cint limitations.
   // Three spaces should be used for indentation, same as in
   // SavePrimitive() methods.

   TString t = "   " + var + "->";

   out << t << "SetElementName(\""  << GetElementName()  << "\");\n";
   out << t << "SetElementTitle(\"" << GetElementTitle() << "\");\n";
}

//______________________________________________________________________________
void TEveElement::VizDB_Apply(const char* tag)
{
   // Set visual parameters for this object for given tag.

   if (ApplyVizTag(tag))
   {
      PropagateVizParamsToProjecteds();
      gEve->Redraw3D();
   }
}

//______________________________________________________________________________
void TEveElement::VizDB_Reapply()
{
   // Reset visual parameters for this object from VizDB.
   // The model object must be already set.

   if (fVizModel)
   {
      CopyVizParamsFromDB();
      PropagateVizParamsToProjecteds();
      gEve->Redraw3D();
   }
}

//______________________________________________________________________________
void TEveElement::VizDB_UpdateModel(Bool_t update)
{
   // Copy visual parameters from this element to viz-db model.
   // If update is set, all clients of the model will be updated to
   // the new value.
   // A warning is printed if the model-element fVizModel is not set.

   if (fVizModel)
   {
      fVizModel->CopyVizParams(this);
      if (update)
      {
         fVizModel->PropagateVizParamsToElements(fVizModel);
         gEve->Redraw3D();
      }
   }
   else
   {
      Warning("VizDB_UpdateModel", "VizModel has not been set.");
   }
}

//______________________________________________________________________________
void TEveElement::VizDB_Insert(const char* tag, Bool_t replace, Bool_t update)
{
   // Create a replica of element and insert it into VizDB with given tag.
   // If replace is true an existing element with the same tag will be replaced.
   // If update is true, existing client of tag will be updated.

   TClass* cls = GetObject()->IsA();
   TEveElement* el = reinterpret_cast<TEveElement*>(cls->New());
   if (el == 0) {
      Error("VizDB_Insert", "Creation of replica failed.");
      return;
   }
   el->CopyVizParams(this);
   Bool_t succ = gEve->InsertVizDBEntry(tag, el, replace, update);
   if (succ && update)
      gEve->Redraw3D();
}

//******************************************************************************

//______________________________________________________________________________
TEveElement* TEveElement::GetMaster()
{
   // Return the master element - that is the upwards compound not
   // inside another compound.
   // If this element is not in a compound, this is returned.
   // For a projected object the projectable->GetMaster() is returned.

   TEveProjected* proj = dynamic_cast<TEveProjected*>(this);
   if (proj)
      return dynamic_cast<TEveElement*>(proj->GetProjectable())->GetMaster();
   if (fCompound)
      return fCompound->GetMaster();
   return this;
}

//******************************************************************************

//______________________________________________________________________________
void TEveElement::AddParent(TEveElement* re)
{
   // Add re into the list parents.
   // Adding parent is subordinate to adding an element.
   // This is an internal function.

   fParents.push_back(re);
}

//______________________________________________________________________________
void TEveElement::RemoveParent(TEveElement* re)
{
   // Remove re from the list of parents.
   // Removing parent is subordinate to removing an element.
   // This is an internal function.

   static const TEveException eh("TEveElement::RemoveParent ");

   fParents.remove(re);
   CheckReferenceCount(eh);
}

/******************************************************************************/

//______________________________________________________________________________
void TEveElement::CheckReferenceCount(const TEveException& eh)
{
   // Check external references to this and eventually auto-destruct
   // the render-element.

   if (fDestructing)
      return;

   if (NumParents() <= fParentIgnoreCnt && fTopItemCnt  <= 0 &&
       fDestroyOnZeroRefCnt             && fDenyDestroy <= 0)
   {
      if (gEve->GetUseOrphanage())
      {
         if (gDebug > 0)
            Info(eh, Form("moving to orphanage '%s' on zero reference count.", GetElementName()));

         PreDeleteElement();
         gEve->GetOrphanage()->AddElement(this);
      }
      else
      {
         if (gDebug > 0)
            Info(eh, Form("auto-destructing '%s' on zero reference count.", GetElementName()));

         PreDeleteElement();
         delete this;
      }
   }
}

//______________________________________________________________________________
void TEveElement::CollectSceneParents(List_t& scenes)
{
   // Collect all parents of class TEveScene. This is needed to
   // automatically detect which scenes need to be updated.
   //
   // Overriden in TEveScene to include itself and return.

   for (List_i p=fParents.begin(); p!=fParents.end(); ++p)
      (*p)->CollectSceneParents(scenes);
}

//______________________________________________________________________________
void TEveElement::CollectSceneParentsFromChildren(List_t&      scenes,
                                                  TEveElement* parent)
{
   // Collect scene-parents from all children. This is needed to
   // automatically detect which scenes need to be updated during/after
   // a full sub-tree update.
   // Argument parent specifies parent in traversed hierarchy for which we can
   // skip the upwards search.

   for (List_i p=fParents.begin(); p!=fParents.end(); ++p)
   {
      if (*p != parent) (*p)->CollectSceneParents(scenes);
   }

   for (List_i c=fChildren.begin(); c!=fChildren.end(); ++c)
   {
      (*c)->CollectSceneParentsFromChildren(scenes, this);
   }
}

/******************************************************************************/
// List-tree stuff
/******************************************************************************/

//______________________________________________________________________________
void TEveElement::ExpandIntoListTree(TGListTree* ltree,
                                     TGListTreeItem* parent)
{
   // Populates parent with elements.
   // parent must be an already existing representation of *this*.
   // Returns number of inserted elements.
   // If parent already has children, it does nothing.
   //
   // Element can be inserted in a list-tree several times, thus we can not
   // search through fItems to get parent here.
   // Anyhow, it is probably known as it must have been selected by the user.

   if (parent->GetFirstChild() != 0)
      return;
   for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
      (*i)->AddIntoListTree(ltree, parent);
   }
}

//______________________________________________________________________________
void TEveElement::DestroyListSubTree(TGListTree* ltree,
                                     TGListTreeItem* parent)
{
   // Destroy sub-tree under item 'parent' in list-tree 'ltree'.

   TGListTreeItem* i = parent->GetFirstChild();
   while (i != 0)
   {
      TEveElement* re = (TEveElement*) i->GetUserData();
      i = i->GetNextSibling();
      re->RemoveFromListTree(ltree, parent);
   }
}

//______________________________________________________________________________
TGListTreeItem* TEveElement::AddIntoListTree(TGListTree* ltree,
                                             TGListTreeItem* parent_lti)
{
   // Add this element into ltree to an already existing item
   // parent_lti.

   static const TEveException eh("TEveElement::AddIntoListTree ");

   TGListTreeItem* item = new TEveListTreeItem(this);
   ltree->AddItem(parent_lti, item);
   fItems.insert(TEveListTreeInfo(ltree, item));

   if (parent_lti == 0)
      ++fTopItemCnt;

   ltree->ClearViewPort();

   return item;
}

//______________________________________________________________________________
TGListTreeItem* TEveElement::AddIntoListTree(TGListTree* ltree,
                                             TEveElement* parent)
{
   // Add this render element into ltree to all items belonging to
   // parent. Returns list-tree-item from the first register entry (but
   // we use a set for that so it can be anything).

   TGListTreeItem* lti = 0;
   if (parent == 0) {
      lti = AddIntoListTree(ltree, (TGListTreeItem*) 0);
   } else {
      for (sLTI_ri i = parent->fItems.rbegin(); i != parent->fItems.rend(); ++i)
      {
         if (i->fTree == ltree)
            lti = AddIntoListTree(ltree, i->fItem);
      }
   }
   return lti;
}

//______________________________________________________________________________
TGListTreeItem* TEveElement::AddIntoListTrees(TEveElement* parent)
{
   // Add this render element into all list-trees and all items
   // belonging to parent. Returns list-tree-item from the first
   // register entry (but we use a set for that so it can be anything).

   TGListTreeItem* lti = 0;
   for (sLTI_ri i = parent->fItems.rbegin(); i != parent->fItems.rend(); ++i)
   {
      lti = AddIntoListTree(i->fTree, i->fItem);
   }
   return lti;
}

//______________________________________________________________________________
Bool_t TEveElement::RemoveFromListTree(TGListTree* ltree,
                                       TGListTreeItem* parent_lti)
{
   // Remove element from list-tree 'ltree' where its parent item is
   // 'parent_lti'.
   // Returns kTRUE if the item was found and removed, kFALSE
   // otherwise.

   static const TEveException eh("TEveElement::RemoveFromListTree ");

   sLTI_i i = FindItem(ltree, parent_lti);
   if (i != fItems.end()) {
      DestroyListSubTree(ltree, i->fItem);
      ltree->DeleteItem(i->fItem);
      ltree->ClearViewPort();
      fItems.erase(i);
      if (parent_lti == 0) {
         --fTopItemCnt;
         CheckReferenceCount(eh);
      }
      return kTRUE;
   } else {
      return kFALSE;
   }
}

//______________________________________________________________________________
Int_t TEveElement::RemoveFromListTrees(TEveElement* parent)
{
   // Remove element from all list-trees where 'parent' is the
   // user-data of the parent list-tree-item.

   static const TEveException eh("TEveElement::RemoveFromListTrees ");

   Int_t count = 0;

   sLTI_i i  = fItems.begin();
   while (i != fItems.end())
   {
      sLTI_i j = i++;
      TGListTreeItem *plti = j->fItem->GetParent();
      if ((plti != 0 && (TEveElement*) plti->GetUserData() == parent) ||
          (plti == 0 && parent == 0))
      {
         DestroyListSubTree(j->fTree, j->fItem);
         j->fTree->DeleteItem(j->fItem);
         j->fTree->ClearViewPort();
         fItems.erase(j);
         if (parent == 0)
            --fTopItemCnt;
         ++count;
      }
   }

   if (parent == 0 && count > 0)
      CheckReferenceCount(eh);

   return count;
}

//______________________________________________________________________________
TEveElement::sLTI_i TEveElement::FindItem(TGListTree* ltree)
{
   // Find any list-tree-item of this element in list-tree 'ltree'.
   // Note that each element can be placed into the same list-tree on
   // several postions.

   for (sLTI_i i = fItems.begin(); i != fItems.end(); ++i)
      if (i->fTree == ltree)
         return i;
   return fItems.end();
}

//______________________________________________________________________________
TEveElement::sLTI_i TEveElement::FindItem(TGListTree* ltree,
                                          TGListTreeItem* parent_lti)
{
   // Find list-tree-item of this element with given parent
   // list-tree-item.

   for (sLTI_i i = fItems.begin(); i != fItems.end(); ++i)
      if (i->fTree == ltree && i->fItem->GetParent() == parent_lti)
         return i;
   return fItems.end();
}

//______________________________________________________________________________
TGListTreeItem* TEveElement::FindListTreeItem(TGListTree* ltree)
{
   // Find any list-tree-item of this element in list-tree 'ltree'.
   // Note that each element can be placed into the same list-tree on
   // several postions.

   for (sLTI_i i = fItems.begin(); i != fItems.end(); ++i)
      if (i->fTree == ltree)
         return i->fItem;
   return 0;
}

//______________________________________________________________________________
TGListTreeItem* TEveElement::FindListTreeItem(TGListTree* ltree,
                                              TGListTreeItem* parent_lti)
{
   // Find list-tree-item of this element with given parent
   // list-tree-item.

   for (sLTI_i i = fItems.begin(); i != fItems.end(); ++i)
      if (i->fTree == ltree && i->fItem->GetParent() == parent_lti)
         return i->fItem;
   return 0;
}

/******************************************************************************/

//______________________________________________________________________________
TObject* TEveElement::GetObject(const TEveException& eh) const
{
   // Get a TObject associated with this render-element.
   // Most cases uses double-inheritance from TEveElement and TObject
   // so we just do a dynamic cast here.
   // If some TEveElement descendant implements a different scheme,
   // this virtual method should be overriden accordingly.

   const TObject* obj = dynamic_cast<const TObject*>(this);
   if (obj == 0)
      throw(eh + "not a TObject.");
   return const_cast<TObject*>(obj);
}

//______________________________________________________________________________
void TEveElement::SpawnEditor()
{
   // Show GUI editor for this object.
   // This is forwarded to TEveManager::EditElement().

   gEve->EditElement(this);
}

//______________________________________________________________________________
void TEveElement::ExportToCINT(char* var_name)
{
   // Export render-element to CINT with variable name var_name.

   const char* cname = IsA()->GetName();
   gROOT->ProcessLine(TString::Format("%s* %s = (%s*)0x%lx;", cname, var_name, cname, this));
}

/******************************************************************************/

//______________________________________________________________________________
void TEveElement::DumpSourceObject() const
{
   // Call Dump() on source object.
   // Throws an exception if it is not set.

   static const TEveException eh("TEveElement::DumpSourceObject ");

   TObject *so = GetSourceObject();
   if (!so)
      throw eh + "source-object not set.";

   so->Dump();
}

//______________________________________________________________________________
void TEveElement::PrintSourceObject() const
{
   // Call Print() on source object.
   // Throws an exception if it is not set.

   static const TEveException eh("TEveElement::PrintSourceObject ");

   TObject *so = GetSourceObject();
   if (!so)
      throw eh + "source-object not set.";

   so->Print();
}

//______________________________________________________________________________
void TEveElement::ExportSourceObjectToCINT(char* var_name) const
{
   // Export source object to CINT with given name for the variable.
   // Throws an exception if it is not set.

   static const TEveException eh("TEveElement::ExportSourceObjectToCINT ");

   TObject *so = GetSourceObject();
   if (!so)
      throw eh + "source-object not set.";

   const char* cname = so->IsA()->GetName();
   gROOT->ProcessLine(TString::Format("%s* %s = (%s*)0x%lx;", cname, var_name, cname, so));
}

/******************************************************************************/

//______________________________________________________________________________
void TEveElement::PadPaint(Option_t* option)
{
   // Paint self and/or children into currently active pad.

   static const TEveException eh("TEveElement::PadPaint ");

   TObject* obj = 0;
   if (GetRnrSelf() && (obj = GetRenderObject(eh)))
      obj->Paint(option);


   if (GetRnrChildren()) {
      for (List_i i=BeginChildren(); i!=EndChildren(); ++i) {
         (*i)->PadPaint(option);
      }
   }
}

/******************************************************************************/

//______________________________________________________________________________
Bool_t TEveElement::SetRnrSelf(Bool_t rnr)
{
   // Set render state of this element, i.e. if it will be published
   // on next scene update pass.
   // Returns true if the state has changed.

   if (SingleRnrState())
   {
      return SetRnrState(rnr);
   }

   if (rnr != fRnrSelf)
   {
      fRnrSelf = rnr;
      StampVisibility();
      PropagateRnrStateToProjecteds();
      return kTRUE;
   }
   return kFALSE;
}

//______________________________________________________________________________
Bool_t TEveElement::SetRnrChildren(Bool_t rnr)
{
   // Set render state of this element's children, i.e. if they will
   // be published on next scene update pass.
   // Returns true if the state has changed.

   if (SingleRnrState())
   {
      return SetRnrState(rnr);
   }

   if (rnr != fRnrChildren)
   {
      fRnrChildren = rnr;
      StampVisibility();
      PropagateRnrStateToProjecteds();
      return kTRUE;
   }
   return kFALSE;
}

//______________________________________________________________________________
Bool_t TEveElement::SetRnrSelfChildren(Bool_t rnr_self, Bool_t rnr_children)
{
   // Set state for rendering of this element and its children.
   // Returns true if the state has changed.

   if (SingleRnrState())
   {
      return SetRnrState(rnr_self);
   }

   if (fRnrSelf != rnr_self || fRnrChildren != rnr_children)
   {
      fRnrSelf     = rnr_self;
      fRnrChildren = rnr_children;
      StampVisibility();
      PropagateRnrStateToProjecteds();
      return kTRUE;
   }
   return kFALSE;
}

//______________________________________________________________________________
Bool_t TEveElement::SetRnrState(Bool_t rnr)
{
   // Set render state of this element and of its children to the same
   // value.
   // Returns true if the state has changed.

   if (fRnrSelf != rnr || fRnrChildren != rnr)
   {
      fRnrSelf = fRnrChildren = rnr;
      StampVisibility();
      PropagateRnrStateToProjecteds();
      return kTRUE;
   }
   return kFALSE;
}

//______________________________________________________________________________
void TEveElement::PropagateRnrStateToProjecteds()
{
   // Propagate render state to the projected replicas of this element.
   // Maybe this should be optional on gEve/element level.

   TEveProjectable *pable = dynamic_cast<TEveProjectable*>(this);
   if (pable && pable->HasProjecteds())
   {
      pable->PropagateRenderState(fRnrSelf, fRnrChildren);
   }
}

/******************************************************************************/

//______________________________________________________________________________
void TEveElement::SetMainColor(Color_t color)
{
   // Set main color of the element.
   // List-tree-items are updated.

   Color_t old_color = GetMainColor();

   if (fMainColorPtr) {
      *fMainColorPtr = color;
      StampColorSelection();
   }

   PropagateMainColorToProjecteds(color, old_color);
}

//______________________________________________________________________________
void TEveElement::SetMainColorPixel(Pixel_t pixel)
{
   // Convert pixel to Color_t and call SetMainColor().

   SetMainColor(TColor::GetColor(pixel));
}

//______________________________________________________________________________
void TEveElement::SetMainColorRGB(UChar_t r, UChar_t g, UChar_t b)
{
   // Convert RGB values to Color_t and call SetMainColor.

   SetMainColor(TColor::GetColor(r, g, b));
}

//______________________________________________________________________________
void TEveElement::SetMainColorRGB(Float_t r, Float_t g, Float_t b)
{
   // Convert RGB values to Color_t and call SetMainColor.

   SetMainColor(TColor::GetColor(r, g, b));
}

//______________________________________________________________________________
void TEveElement::PropagateMainColorToProjecteds(Color_t color, Color_t old_color)
{
   // Convert RGB values to Color_t and call SetMainColor.
   // Maybe this should be optional on gEve/element level.

   TEveProjectable* pable = dynamic_cast<TEveProjectable*>(this);
   if (pable && pable->HasProjecteds())
   {
      pable->PropagateMainColor(color, old_color);
   }
}

//______________________________________________________________________________
void TEveElement::SetMainTransparency(UChar_t t)
{
   // Set main-transparency.
   // Transparency is clamped to [0, 100].

   if (t > 100) t = 100;
   fMainTransparency = t;
   StampColorSelection();
}

//______________________________________________________________________________
void TEveElement::SetMainAlpha(Float_t alpha)
{
   // Set main-transparency via float alpha varable.
   // Value of alpha is clamped t0 [0, 1].

   if (alpha < 0) alpha = 0;
   if (alpha > 1) alpha = 1;
   SetMainTransparency((UChar_t) (100.0f*(1.0f - alpha)));
}

/******************************************************************************/

//______________________________________________________________________________
TEveTrans* TEveElement::PtrMainTrans()
{
   // Return pointer to main transformation. It is created if not yet
   // existing.

   if (!fMainTrans)
      InitMainTrans();

   return fMainTrans;
}

//______________________________________________________________________________
TEveTrans& TEveElement::RefMainTrans()
{
   // Return reference to main transformation. It is created if not yet
   // existing.

   if (!fMainTrans)
      InitMainTrans();

   return *fMainTrans;
}

//______________________________________________________________________________
void TEveElement::InitMainTrans(Bool_t can_edit)
{
   // Initialize the main transformation to identity matrix.
   // If can_edit is true (default), the user will be able to edit the
   // transformation parameters via TEveElementEditor.

   if (fMainTrans)
      fMainTrans->UnitTrans();
   else
      fMainTrans = new TEveTrans;
   fCanEditMainTrans = can_edit;
}

//______________________________________________________________________________
void TEveElement::DestroyMainTrans()
{
   // Destroy the main transformation matrix, it will always be taken
   // as identity. Editing of transformation parameters is disabled.

   delete fMainTrans;
   fMainTrans = 0;
   fCanEditMainTrans = kFALSE;
}

//______________________________________________________________________________
void TEveElement::SetTransMatrix(Double_t* carr)
{
   // Set transformation matrix from colum-major array.

   RefMainTrans().SetFrom(carr);
}

//______________________________________________________________________________
void TEveElement::SetTransMatrix(const TGeoMatrix& mat)
{
   // Set transformation matrix from TGeo's matrix.

   RefMainTrans().SetFrom(mat);
}


/******************************************************************************/

//______________________________________________________________________________
Bool_t TEveElement::AcceptElement(TEveElement* el)
{
   // Check if el can be added to this element.
   //
   // In the base-class version we only make sure the new child is not
   // equal to this.

   return el != this;
}

//______________________________________________________________________________
void TEveElement::AddElement(TEveElement* el)
{
   // Add el to the list of children.

   static const TEveException eh("TEveElement::AddElement ");

   if ( ! AcceptElement(el))
      throw(eh + Form("parent '%s' rejects '%s'.",
                      GetElementName(), el->GetElementName()));

   el->AddParent(this);
   fChildren.push_back(el);
   el->AddIntoListTrees(this);
   ElementChanged();
}

//______________________________________________________________________________
void TEveElement::RemoveElement(TEveElement* el)
{
   // Remove el from the list of children.

   el->RemoveFromListTrees(this);
   RemoveElementLocal(el);
   el->RemoveParent(this);
   fChildren.remove(el);
   ElementChanged();
}

//______________________________________________________________________________
void TEveElement::RemoveElementLocal(TEveElement* /*el*/)
{
   // Perform additional local removal of el.
   // Called from RemoveElement() which does whole untangling.
   // Put into special function as framework-related handling of
   // element removal should really be common to all classes and
   // clearing of local structures happens in between removal
   // of list-tree-items and final removal.
   // If you override this, you should also override
   // RemoveElementsLocal().
}

//______________________________________________________________________________
void TEveElement::RemoveElementsInternal()
{
   // Remove all elements. This assumes removing of all elements can
   // be done more efficiently then looping over them and removing one
   // by one. This protected function performs the removal on the
   // level of TEveElement.

   for (sLTI_i i=fItems.begin(); i!=fItems.end(); ++i)
   {
      DestroyListSubTree(i->fTree, i->fItem);
   }
   RemoveElementsLocal();
   for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
   {
      (*i)->RemoveParent(this);
   }
   fChildren.clear();
}

//______________________________________________________________________________
void TEveElement::RemoveElements()
{
   // Remove all elements. This assumes removing of all elements can
   // be done more efficiently then looping over them and removing
   // them one by one.

   if ( ! fChildren.empty())
   {
      RemoveElementsInternal();
      ElementChanged();
   }
}

//______________________________________________________________________________
void TEveElement::RemoveElementsLocal()
{
   // Perform additional local removal of all elements.
   // See comment to RemoveElementlocal(TEveElement*).
}

/******************************************************************************/

//______________________________________________________________________________
Bool_t TEveElement::HasChild(TEveElement* el)
{
   // Check if element el is a child of this element.

   return (std::find(fChildren.begin(), fChildren.end(), el) != fChildren.end());
}

//______________________________________________________________________________
TEveElement* TEveElement::FindChild(const TString&  name, const TClass* cls)
{
   // Find the first child with given name.  If cls is specified (non
   // 0), it is also checked.
   //
   // Returns 0 if not found.

   for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
   {
      if (name.CompareTo((*i)->GetElementName()) == 0)
      {
         if (!cls || (cls && (*i)->IsA()->InheritsFrom(cls)))
            return *i;
      }
   }
   return 0;
}

//______________________________________________________________________________
TEveElement* TEveElement::FindChild(TPRegexp& regexp, const TClass* cls)
{
   // Find the first child whose name matches regexp. If cls is
   // specified (non 0), it is also checked.
   //
   // Returns 0 if not found.

   for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
   {
      if (regexp.MatchB((*i)->GetElementName()))
      {
         if (!cls || (cls && (*i)->IsA()->InheritsFrom(cls)))
            return *i;
      }
   }
   return 0;
}

//______________________________________________________________________________
Int_t TEveElement::FindChildren(List_t& matches,
                                const TString& name, const TClass* cls)
{
   // Find all children with given name and append them to matches
   // list. If class is specified (non 0), it is also checked.
   //
   // Returns number of elements added to the list.

   Int_t count = 0;
   for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
   {
      if (name.CompareTo((*i)->GetElementName()) == 0)
      {
         if (!cls || (cls && (*i)->IsA()->InheritsFrom(cls)))
         {
            matches.push_back(*i);
            ++count;
         }
      }
   }
   return count;
}

//______________________________________________________________________________
Int_t TEveElement::FindChildren(List_t& matches,
                                TPRegexp& regexp, const TClass* cls)
{
   // Find all children whose name matches regexp and append them to
   // matches list.
   //
   // Returns number of elements added to the list.

   Int_t count = 0;
   for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
   {
      if (regexp.MatchB((*i)->GetElementName()))
      {
         if (!cls || (cls && (*i)->IsA()->InheritsFrom(cls)))
         {
            matches.push_back(*i);
            ++count;
         }
      }
   }
   return count;
}

//______________________________________________________________________________
TEveElement* TEveElement::FirstChild() const
{
   // Returns the first child element or 0 if the list is empty.

   return fChildren.empty() ? 0 : fChildren.front();
}

//______________________________________________________________________________
TEveElement* TEveElement::LastChild () const
{
   // Returns the last child element or 0 if the list is empty.

   return fChildren.empty() ? 0 : fChildren.back();
}


//==============================================================================

//______________________________________________________________________________
void TEveElement::EnableListElements(Bool_t rnr_self,  Bool_t rnr_children)
{
   // Enable rendering of children and their list contents.
   // Arguments control how to set self/child rendering.

   for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
   {
      (*i)->SetRnrSelf(rnr_self);
      (*i)->SetRnrChildren(rnr_children);
   }

   ElementChanged(kTRUE, kTRUE);
}

//______________________________________________________________________________
void TEveElement::DisableListElements(Bool_t rnr_self,  Bool_t rnr_children)
{
   // Disable rendering of children and their list contents.
   // Arguments control how to set self/child rendering.
   //
   // Same as above function, but default arguments are different. This
   // is convenient for calls via context menu.

   for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
   {
      (*i)->SetRnrSelf(rnr_self);
      (*i)->SetRnrChildren(rnr_children);
   }

   ElementChanged(kTRUE, kTRUE);
}

/******************************************************************************/

//______________________________________________________________________________
void TEveElement::Destroy()
{
   // Destroy this element. Throws an exception if deny-destroy is in force.

   static const TEveException eh("TEveElement::Destroy ");

   if (fDenyDestroy > 0)
      throw eh + TString::Format("element '%s' (%s*) 0x%lx is protected against destruction.",
                                 GetElementName(), IsA()->GetName(), this);

   PreDeleteElement();
   delete this;
   gEve->Redraw3D();
}

//______________________________________________________________________________
void TEveElement::DestroyOrWarn()
{
   // Destroy this element. Prints a warning if deny-destroy is in force.

   static const TEveException eh("TEveElement::DestroyOrWarn ");

   try
   {
      Destroy();
   }
   catch (TEveException& exc)
   {
      Warning(eh, exc);
   }
}

//______________________________________________________________________________
void TEveElement::DestroyElements()
{
   // Destroy all children of this element.

   static const TEveException eh("TEveElement::DestroyElements ");

   while ( ! fChildren.empty()) {
      TEveElement* c = fChildren.front();
      if (c->fDenyDestroy <= 0)
      {
         try {
            c->Destroy();
         }
         catch (TEveException exc) {
            Warning(eh, Form("element destruction failed: '%s'.", exc.Data()));
            RemoveElement(c);
         }
      }
      else
      {
         if (gDebug > 0)
            Info(eh, Form("element '%s' is protected agains destruction, removing locally.",
			  c->GetElementName()));
         RemoveElement(c);
      }
   }

   gEve->Redraw3D();
}

//______________________________________________________________________________
Bool_t TEveElement::GetDestroyOnZeroRefCnt() const
{
   // Returns state of flag determining if the element will be
   // destroyed when reference count reaches zero.
   // This is true by default.

   return fDestroyOnZeroRefCnt;
}

//______________________________________________________________________________
void TEveElement::SetDestroyOnZeroRefCnt(Bool_t d)
{
   // Sets the state of flag determining if the element will be
   // destroyed when reference count reaches zero.
   // This is true by default.

   fDestroyOnZeroRefCnt = d;
}

//______________________________________________________________________________
Int_t TEveElement::GetDenyDestroy() const
{
   // Returns the number of times deny-destroy has been requested on
   // the element.

   return fDenyDestroy;
}

//______________________________________________________________________________
void TEveElement::IncDenyDestroy()
{
   // Increases the deny-destroy count of the element.
   // Call this if you store an external pointer to the element.

   ++fDenyDestroy;
}

//______________________________________________________________________________
void TEveElement::DecDenyDestroy()
{
   // Decreases the deny-destroy count of the element.
   // Call this after releasing an external pointer to the element.

   if (--fDenyDestroy <= 0)
      CheckReferenceCount("TEveElement::DecDenyDestroy ");
}

//______________________________________________________________________________
Int_t TEveElement::GetParentIgnoreCnt() const
{
   // Get number of parents that should be ignored in doing
   // reference-counting.
   //
   // For example, this is used when subscribing an element to a
   // visualization-database model object.

   return fParentIgnoreCnt;
}

//______________________________________________________________________________
void TEveElement::IncParentIgnoreCnt()
{
   // Increase number of parents ignored in reference-counting.

   ++fParentIgnoreCnt;
}

//______________________________________________________________________________
void TEveElement::DecParentIgnoreCnt()
{
   // Decrease number of parents ignored in reference-counting.

   if (--fParentIgnoreCnt <= 0)
      CheckReferenceCount("TEveElement::DecParentIgnoreCnt ");
}


//==============================================================================

//______________________________________________________________________________
Bool_t TEveElement::HandleElementPaste(TEveElement* el)
{
   // React to element being pasted or dnd-ed.
   // Return true if redraw is needed.

   gEve->AddElement(el, this);
   return kTRUE;
}

//______________________________________________________________________________
void TEveElement::ElementChanged(Bool_t update_scenes, Bool_t redraw)
{
   // Call this after an element has been changed so that the state
   // can be propagated around the framework.

   gEve->ElementChanged(this, update_scenes, redraw);
}

/******************************************************************************/
// Select/hilite
/******************************************************************************/

//______________________________________________________________________________
TEveElement* TEveElement::ForwardSelection()
{
   // Returns element to be selected on click.
   // If value is zero the selected object will follow rules in
   // TEveSelection.

   return 0;
}

//______________________________________________________________________________
TEveElement* TEveElement::ForwardEdit()
{
   // Returns element to be displayed in GUI editor on click.
   // If value is zero the displayed object will follow rules in
   // TEveSelection.

   return 0;
}

//______________________________________________________________________________
void TEveElement::SelectElement(Bool_t state)
{
   // Set element's selection state. Stamp appropriately.

   if (fSelected != state) {
      fSelected = state;
      fParentIgnoreCnt += (fSelected) ? 1 : -1;
      StampColorSelection();
   }
}

//______________________________________________________________________________
void TEveElement::IncImpliedSelected()
{
   // Increase element's implied-selection count. Stamp appropriately.

   if (fImpliedSelected++ == 0)
      StampColorSelection();
}

//______________________________________________________________________________
void TEveElement::DecImpliedSelected()
{
   // Decrease element's implied-selection count. Stamp appropriately.

   if (--fImpliedSelected == 0)
      StampColorSelection();
}

//______________________________________________________________________________
void TEveElement::HighlightElement(Bool_t state)
{
   // Set element's highlight state. Stamp appropriately.

   if (fHighlighted != state) {
      fHighlighted = state;
      fParentIgnoreCnt += (fHighlighted) ? 1 : -1;
      StampColorSelection();
   }
}

//______________________________________________________________________________
void TEveElement::IncImpliedHighlighted()
{
   // Increase element's implied-highlight count. Stamp appropriately.

   if (fImpliedHighlighted++ == 0)
      StampColorSelection();
}

//______________________________________________________________________________
void TEveElement::DecImpliedHighlighted()
{
   // Decrease element's implied-highlight count. Stamp appropriately.

   if (--fImpliedHighlighted == 0)
      StampColorSelection();
}

//______________________________________________________________________________
void TEveElement::FillImpliedSelectedSet(Set_t& impSelSet)
{
   // Populate set impSelSet with derived / dependant elements.
   //
   // Here we check if class of this is TEveProjectable and add the projected
   // replicas to the set. Thus it does not have to be reimplemented for
   // each sub-class of TEveProjected.
   //
   // Note that this also takes care of projections of TEveCompound
   // class, which is also a projectable.

   TEveProjectable* p = dynamic_cast<TEveProjectable*>(this);
   if (p)
   {
      p->AddProjectedsToSet(impSelSet);
   }
}

//______________________________________________________________________________
UChar_t TEveElement::GetSelectedLevel() const
{
   // Get selection level, needed for rendering selection and
   // highlight feedback.
   // This should go to TAtt3D.

   if (fSelected)               return 1;
   if (fImpliedSelected > 0)    return 2;
   if (fHighlighted)            return 3;
   if (fImpliedHighlighted > 0) return 4;
   return 0;
}

/******************************************************************************/
// Stamping
/******************************************************************************/

//______________________________________________________________________________
void TEveElement::AddStamp(UChar_t bits)
{
   // Add (bitwise or) given stamps to fChangeBits.
   // Register this element to gEve as stamped.
   // This method is virtual so that sub-classes can add additional
   // actions. The base-class method should still be called (or replicated).

   fChangeBits |= bits;
   if (!fDestructing) gEve->ElementStamped(this);
}

/******************************************************************************/
// List-tree icons
/******************************************************************************/

//______________________________________________________________________________
const TGPicture* TEveElement::GetListTreeIcon(Bool_t open)
{
   // Returns pointer to first listtreeicon

   // Need better solution for icon-loading/ids !!!!
   return fgListTreeIcons[open ? 7 : 0];
}

//______________________________________________________________________________
const TGPicture* TEveElement::GetListTreeCheckBoxIcon()
{
   // Returns list-tree-item check-box picture appropriate for given
   // rendering state.

   Int_t idx = 0;
   if (fRnrSelf)      idx = 2;
   if (fRnrChildren ) idx++;

   return fgRnrIcons[idx];
}

//______________________________________________________________________________
const char* TEveElement::ToString(Bool_t b)
{
   // Convert Bool_t to string - kTRUE or kFALSE.
   // Needed in WriteVizParams().

   return b ? "kTRUE" : "kFALSE";
}


/******************************************************************************/
/******************************************************************************/
// TEveElementObjectPtr
/******************************************************************************/

//______________________________________________________________________________
//
// TEveElement with external TObject as a holder of visualization data.

ClassImp(TEveElementObjectPtr);

//______________________________________________________________________________
TEveElementObjectPtr::TEveElementObjectPtr(TObject* obj, Bool_t own) :
   TEveElement (),
   TObject     (),
   fObject     (obj),
   fOwnObject  (own)
{
   // Constructor.
}

//______________________________________________________________________________
TEveElementObjectPtr::TEveElementObjectPtr(TObject* obj, Color_t& mainColor, Bool_t own) :
   TEveElement (mainColor),
   TObject     (),
   fObject     (obj),
   fOwnObject  (own)
{
   // Constructor.
}

//______________________________________________________________________________
TEveElementObjectPtr::TEveElementObjectPtr(const TEveElementObjectPtr& e) :
   TEveElement (e),
   TObject     (e),
   fObject     (0),
   fOwnObject  (e.fOwnObject)
{
   // Copy constructor.
   // If object pointed to is owned it is cloned.
   // It is assumed that the main-color has its origin in the TObject pointed to so
   // it is fixed here accordingly.

   if (fOwnObject && e.fObject)
   {
      fObject = e.fObject->Clone();
      SetMainColorPtr((Color_t*)((const char*) fObject + ((const char*) e.GetMainColorPtr() - (const char*) e.fObject)));
   }
   else
   {
      SetMainColorPtr(e.GetMainColorPtr());
   }
}

//______________________________________________________________________________
TEveElementObjectPtr* TEveElementObjectPtr::CloneElement() const
{
   // Clone the element via copy constructor.
   // Virtual from TEveElement.

   return new TEveElementObjectPtr(*this);
}

//______________________________________________________________________________
TObject* TEveElementObjectPtr::GetObject(const TEveException& eh) const
{
   // Return external object.
   // Virtual from TEveElement.

   if (fObject == 0)
      throw(eh + "fObject not set.");
   return fObject;
}

//______________________________________________________________________________
void TEveElementObjectPtr::ExportToCINT(char* var_name)
{
   // Export external object to CINT with variable name var_name.
   // Virtual from TEveElement.

   static const TEveException eh("TEveElementObjectPtr::ExportToCINT ");

   TObject* obj = GetObject(eh);
   const char* cname = obj->IsA()->GetName();
   gROOT->ProcessLine(Form("%s* %s = (%s*)0x%lx;", cname, var_name, cname, obj));
}

//______________________________________________________________________________
TEveElementObjectPtr::~TEveElementObjectPtr()
{
   // Destructor.

   if (fOwnObject)
      delete fObject;
}


/******************************************************************************/
/******************************************************************************/
// TEveElementList
/******************************************************************************/

//______________________________________________________________________________
//
// A list of TEveElements.
//
// Class of acceptable children can be limited by setting the
// fChildClass member.
//

// !!! should have two ctors (like in TEveElement), one with Color_t&
// and set fDoColor automatically, based on which ctor is called.

ClassImp(TEveElementList);

//______________________________________________________________________________
TEveElementList::TEveElementList(const char* n, const char* t, Bool_t doColor) :
   TEveElement(),
   TNamed(n, t),
   TEveProjectable(),
   fColor(0),
   fDoColor(doColor),
   fChildClass(0)
{
   // Constructor.

   if (fDoColor) {
      SetMainColorPtr(&fColor);
   }
}

//______________________________________________________________________________
TEveElementList::TEveElementList(const TEveElementList& e) :
   TEveElement (e),
   TNamed      (e),
   TEveProjectable(),
   fColor      (e.fColor),
   fDoColor    (e.fDoColor),
   fChildClass (e.fChildClass)
{
   // Copy constructor.
}

//______________________________________________________________________________
TEveElementList* TEveElementList::CloneElement() const
{
   // Clone the element via copy constructor.
   // Virtual from TEveElement.

   return new TEveElementList(*this);
}

//______________________________________________________________________________
Bool_t TEveElementList::AcceptElement(TEveElement* el)
{
   // Check if TEveElement el is inherited from fChildClass.
   // Virtual from TEveElement.

   if (fChildClass && ! el->IsA()->InheritsFrom(fChildClass))
      return kFALSE;
   return kTRUE;
}

//______________________________________________________________________________
TClass* TEveElementList::ProjectedClass(const TEveProjection*) const
{
   // Virtual from TEveProjectable, returns TEveCompoundProjected class.

   return TEveElementListProjected::Class();
}


/******************************************************************************/
/******************************************************************************/
// TEveElementListProjected
/******************************************************************************/

//______________________________________________________________________________
//
// A projected element list -- required for proper propagation
// of render state to projected views.

ClassImp(TEveElementListProjected);

//______________________________________________________________________________
TEveElementListProjected::TEveElementListProjected() :
   TEveElementList("TEveElementListProjected")
{
   // Constructor.
}

//______________________________________________________________________________
void TEveElementListProjected::SetDepthLocal(Float_t /*d*/)
{
   // This is abstract method from base-class TEveProjected.
   // No implementation.
}

//______________________________________________________________________________
void TEveElementListProjected::UpdateProjection()
{
   // This is abstract method from base-class TEveProjected.
   // No implementation.
}
 TEveElement.cxx:1
 TEveElement.cxx:2
 TEveElement.cxx:3
 TEveElement.cxx:4
 TEveElement.cxx:5
 TEveElement.cxx:6
 TEveElement.cxx:7
 TEveElement.cxx:8
 TEveElement.cxx:9
 TEveElement.cxx:10
 TEveElement.cxx:11
 TEveElement.cxx:12
 TEveElement.cxx:13
 TEveElement.cxx:14
 TEveElement.cxx:15
 TEveElement.cxx:16
 TEveElement.cxx:17
 TEveElement.cxx:18
 TEveElement.cxx:19
 TEveElement.cxx:20
 TEveElement.cxx:21
 TEveElement.cxx:22
 TEveElement.cxx:23
 TEveElement.cxx:24
 TEveElement.cxx:25
 TEveElement.cxx:26
 TEveElement.cxx:27
 TEveElement.cxx:28
 TEveElement.cxx:29
 TEveElement.cxx:30
 TEveElement.cxx:31
 TEveElement.cxx:32
 TEveElement.cxx:33
 TEveElement.cxx:34
 TEveElement.cxx:35
 TEveElement.cxx:36
 TEveElement.cxx:37
 TEveElement.cxx:38
 TEveElement.cxx:39
 TEveElement.cxx:40
 TEveElement.cxx:41
 TEveElement.cxx:42
 TEveElement.cxx:43
 TEveElement.cxx:44
 TEveElement.cxx:45
 TEveElement.cxx:46
 TEveElement.cxx:47
 TEveElement.cxx:48
 TEveElement.cxx:49
 TEveElement.cxx:50
 TEveElement.cxx:51
 TEveElement.cxx:52
 TEveElement.cxx:53
 TEveElement.cxx:54
 TEveElement.cxx:55
 TEveElement.cxx:56
 TEveElement.cxx:57
 TEveElement.cxx:58
 TEveElement.cxx:59
 TEveElement.cxx:60
 TEveElement.cxx:61
 TEveElement.cxx:62
 TEveElement.cxx:63
 TEveElement.cxx:64
 TEveElement.cxx:65
 TEveElement.cxx:66
 TEveElement.cxx:67
 TEveElement.cxx:68
 TEveElement.cxx:69
 TEveElement.cxx:70
 TEveElement.cxx:71
 TEveElement.cxx:72
 TEveElement.cxx:73
 TEveElement.cxx:74
 TEveElement.cxx:75
 TEveElement.cxx:76
 TEveElement.cxx:77
 TEveElement.cxx:78
 TEveElement.cxx:79
 TEveElement.cxx:80
 TEveElement.cxx:81
 TEveElement.cxx:82
 TEveElement.cxx:83
 TEveElement.cxx:84
 TEveElement.cxx:85
 TEveElement.cxx:86
 TEveElement.cxx:87
 TEveElement.cxx:88
 TEveElement.cxx:89
 TEveElement.cxx:90
 TEveElement.cxx:91
 TEveElement.cxx:92
 TEveElement.cxx:93
 TEveElement.cxx:94
 TEveElement.cxx:95
 TEveElement.cxx:96
 TEveElement.cxx:97
 TEveElement.cxx:98
 TEveElement.cxx:99
 TEveElement.cxx:100
 TEveElement.cxx:101
 TEveElement.cxx:102
 TEveElement.cxx:103
 TEveElement.cxx:104
 TEveElement.cxx:105
 TEveElement.cxx:106
 TEveElement.cxx:107
 TEveElement.cxx:108
 TEveElement.cxx:109
 TEveElement.cxx:110
 TEveElement.cxx:111
 TEveElement.cxx:112
 TEveElement.cxx:113
 TEveElement.cxx:114
 TEveElement.cxx:115
 TEveElement.cxx:116
 TEveElement.cxx:117
 TEveElement.cxx:118
 TEveElement.cxx:119
 TEveElement.cxx:120
 TEveElement.cxx:121
 TEveElement.cxx:122
 TEveElement.cxx:123
 TEveElement.cxx:124
 TEveElement.cxx:125
 TEveElement.cxx:126
 TEveElement.cxx:127
 TEveElement.cxx:128
 TEveElement.cxx:129
 TEveElement.cxx:130
 TEveElement.cxx:131
 TEveElement.cxx:132
 TEveElement.cxx:133
 TEveElement.cxx:134
 TEveElement.cxx:135
 TEveElement.cxx:136
 TEveElement.cxx:137
 TEveElement.cxx:138
 TEveElement.cxx:139
 TEveElement.cxx:140
 TEveElement.cxx:141
 TEveElement.cxx:142
 TEveElement.cxx:143
 TEveElement.cxx:144
 TEveElement.cxx:145
 TEveElement.cxx:146
 TEveElement.cxx:147
 TEveElement.cxx:148
 TEveElement.cxx:149
 TEveElement.cxx:150
 TEveElement.cxx:151
 TEveElement.cxx:152
 TEveElement.cxx:153
 TEveElement.cxx:154
 TEveElement.cxx:155
 TEveElement.cxx:156
 TEveElement.cxx:157
 TEveElement.cxx:158
 TEveElement.cxx:159
 TEveElement.cxx:160
 TEveElement.cxx:161
 TEveElement.cxx:162
 TEveElement.cxx:163
 TEveElement.cxx:164
 TEveElement.cxx:165
 TEveElement.cxx:166
 TEveElement.cxx:167
 TEveElement.cxx:168
 TEveElement.cxx:169
 TEveElement.cxx:170
 TEveElement.cxx:171
 TEveElement.cxx:172
 TEveElement.cxx:173
 TEveElement.cxx:174
 TEveElement.cxx:175
 TEveElement.cxx:176
 TEveElement.cxx:177
 TEveElement.cxx:178
 TEveElement.cxx:179
 TEveElement.cxx:180
 TEveElement.cxx:181
 TEveElement.cxx:182
 TEveElement.cxx:183
 TEveElement.cxx:184
 TEveElement.cxx:185
 TEveElement.cxx:186
 TEveElement.cxx:187
 TEveElement.cxx:188
 TEveElement.cxx:189
 TEveElement.cxx:190
 TEveElement.cxx:191
 TEveElement.cxx:192
 TEveElement.cxx:193
 TEveElement.cxx:194
 TEveElement.cxx:195
 TEveElement.cxx:196
 TEveElement.cxx:197
 TEveElement.cxx:198
 TEveElement.cxx:199
 TEveElement.cxx:200
 TEveElement.cxx:201
 TEveElement.cxx:202
 TEveElement.cxx:203
 TEveElement.cxx:204
 TEveElement.cxx:205
 TEveElement.cxx:206
 TEveElement.cxx:207
 TEveElement.cxx:208
 TEveElement.cxx:209
 TEveElement.cxx:210
 TEveElement.cxx:211
 TEveElement.cxx:212
 TEveElement.cxx:213
 TEveElement.cxx:214
 TEveElement.cxx:215
 TEveElement.cxx:216
 TEveElement.cxx:217
 TEveElement.cxx:218
 TEveElement.cxx:219
 TEveElement.cxx:220
 TEveElement.cxx:221
 TEveElement.cxx:222
 TEveElement.cxx:223
 TEveElement.cxx:224
 TEveElement.cxx:225
 TEveElement.cxx:226
 TEveElement.cxx:227
 TEveElement.cxx:228
 TEveElement.cxx:229
 TEveElement.cxx:230
 TEveElement.cxx:231
 TEveElement.cxx:232
 TEveElement.cxx:233
 TEveElement.cxx:234
 TEveElement.cxx:235
 TEveElement.cxx:236
 TEveElement.cxx:237
 TEveElement.cxx:238
 TEveElement.cxx:239
 TEveElement.cxx:240
 TEveElement.cxx:241
 TEveElement.cxx:242
 TEveElement.cxx:243
 TEveElement.cxx:244
 TEveElement.cxx:245
 TEveElement.cxx:246
 TEveElement.cxx:247
 TEveElement.cxx:248
 TEveElement.cxx:249
 TEveElement.cxx:250
 TEveElement.cxx:251
 TEveElement.cxx:252
 TEveElement.cxx:253
 TEveElement.cxx:254
 TEveElement.cxx:255
 TEveElement.cxx:256
 TEveElement.cxx:257
 TEveElement.cxx:258
 TEveElement.cxx:259
 TEveElement.cxx:260
 TEveElement.cxx:261
 TEveElement.cxx:262
 TEveElement.cxx:263
 TEveElement.cxx:264
 TEveElement.cxx:265
 TEveElement.cxx:266
 TEveElement.cxx:267
 TEveElement.cxx:268
 TEveElement.cxx:269
 TEveElement.cxx:270
 TEveElement.cxx:271
 TEveElement.cxx:272
 TEveElement.cxx:273
 TEveElement.cxx:274
 TEveElement.cxx:275
 TEveElement.cxx:276
 TEveElement.cxx:277
 TEveElement.cxx:278
 TEveElement.cxx:279
 TEveElement.cxx:280
 TEveElement.cxx:281
 TEveElement.cxx:282
 TEveElement.cxx:283
 TEveElement.cxx:284
 TEveElement.cxx:285
 TEveElement.cxx:286
 TEveElement.cxx:287
 TEveElement.cxx:288
 TEveElement.cxx:289
 TEveElement.cxx:290
 TEveElement.cxx:291
 TEveElement.cxx:292
 TEveElement.cxx:293
 TEveElement.cxx:294
 TEveElement.cxx:295
 TEveElement.cxx:296
 TEveElement.cxx:297
 TEveElement.cxx:298
 TEveElement.cxx:299
 TEveElement.cxx:300
 TEveElement.cxx:301
 TEveElement.cxx:302
 TEveElement.cxx:303
 TEveElement.cxx:304
 TEveElement.cxx:305
 TEveElement.cxx:306
 TEveElement.cxx:307
 TEveElement.cxx:308
 TEveElement.cxx:309
 TEveElement.cxx:310
 TEveElement.cxx:311
 TEveElement.cxx:312
 TEveElement.cxx:313
 TEveElement.cxx:314
 TEveElement.cxx:315
 TEveElement.cxx:316
 TEveElement.cxx:317
 TEveElement.cxx:318
 TEveElement.cxx:319
 TEveElement.cxx:320
 TEveElement.cxx:321
 TEveElement.cxx:322
 TEveElement.cxx:323
 TEveElement.cxx:324
 TEveElement.cxx:325
 TEveElement.cxx:326
 TEveElement.cxx:327
 TEveElement.cxx:328
 TEveElement.cxx:329
 TEveElement.cxx:330
 TEveElement.cxx:331
 TEveElement.cxx:332
 TEveElement.cxx:333
 TEveElement.cxx:334
 TEveElement.cxx:335
 TEveElement.cxx:336
 TEveElement.cxx:337
 TEveElement.cxx:338
 TEveElement.cxx:339
 TEveElement.cxx:340
 TEveElement.cxx:341
 TEveElement.cxx:342
 TEveElement.cxx:343
 TEveElement.cxx:344
 TEveElement.cxx:345
 TEveElement.cxx:346
 TEveElement.cxx:347
 TEveElement.cxx:348
 TEveElement.cxx:349
 TEveElement.cxx:350
 TEveElement.cxx:351
 TEveElement.cxx:352
 TEveElement.cxx:353
 TEveElement.cxx:354
 TEveElement.cxx:355
 TEveElement.cxx:356
 TEveElement.cxx:357
 TEveElement.cxx:358
 TEveElement.cxx:359
 TEveElement.cxx:360
 TEveElement.cxx:361
 TEveElement.cxx:362
 TEveElement.cxx:363
 TEveElement.cxx:364
 TEveElement.cxx:365
 TEveElement.cxx:366
 TEveElement.cxx:367
 TEveElement.cxx:368
 TEveElement.cxx:369
 TEveElement.cxx:370
 TEveElement.cxx:371
 TEveElement.cxx:372
 TEveElement.cxx:373
 TEveElement.cxx:374
 TEveElement.cxx:375
 TEveElement.cxx:376
 TEveElement.cxx:377
 TEveElement.cxx:378
 TEveElement.cxx:379
 TEveElement.cxx:380
 TEveElement.cxx:381
 TEveElement.cxx:382
 TEveElement.cxx:383
 TEveElement.cxx:384
 TEveElement.cxx:385
 TEveElement.cxx:386
 TEveElement.cxx:387
 TEveElement.cxx:388
 TEveElement.cxx:389
 TEveElement.cxx:390
 TEveElement.cxx:391
 TEveElement.cxx:392
 TEveElement.cxx:393
 TEveElement.cxx:394
 TEveElement.cxx:395
 TEveElement.cxx:396
 TEveElement.cxx:397
 TEveElement.cxx:398
 TEveElement.cxx:399
 TEveElement.cxx:400
 TEveElement.cxx:401
 TEveElement.cxx:402
 TEveElement.cxx:403
 TEveElement.cxx:404
 TEveElement.cxx:405
 TEveElement.cxx:406
 TEveElement.cxx:407
 TEveElement.cxx:408
 TEveElement.cxx:409
 TEveElement.cxx:410
 TEveElement.cxx:411
 TEveElement.cxx:412
 TEveElement.cxx:413
 TEveElement.cxx:414
 TEveElement.cxx:415
 TEveElement.cxx:416
 TEveElement.cxx:417
 TEveElement.cxx:418
 TEveElement.cxx:419
 TEveElement.cxx:420
 TEveElement.cxx:421
 TEveElement.cxx:422
 TEveElement.cxx:423
 TEveElement.cxx:424
 TEveElement.cxx:425
 TEveElement.cxx:426
 TEveElement.cxx:427
 TEveElement.cxx:428
 TEveElement.cxx:429
 TEveElement.cxx:430
 TEveElement.cxx:431
 TEveElement.cxx:432
 TEveElement.cxx:433
 TEveElement.cxx:434
 TEveElement.cxx:435
 TEveElement.cxx:436
 TEveElement.cxx:437
 TEveElement.cxx:438
 TEveElement.cxx:439
 TEveElement.cxx:440
 TEveElement.cxx:441
 TEveElement.cxx:442
 TEveElement.cxx:443
 TEveElement.cxx:444
 TEveElement.cxx:445
 TEveElement.cxx:446
 TEveElement.cxx:447
 TEveElement.cxx:448
 TEveElement.cxx:449
 TEveElement.cxx:450
 TEveElement.cxx:451
 TEveElement.cxx:452
 TEveElement.cxx:453
 TEveElement.cxx:454
 TEveElement.cxx:455
 TEveElement.cxx:456
 TEveElement.cxx:457
 TEveElement.cxx:458
 TEveElement.cxx:459
 TEveElement.cxx:460
 TEveElement.cxx:461
 TEveElement.cxx:462
 TEveElement.cxx:463
 TEveElement.cxx:464
 TEveElement.cxx:465
 TEveElement.cxx:466
 TEveElement.cxx:467
 TEveElement.cxx:468
 TEveElement.cxx:469
 TEveElement.cxx:470
 TEveElement.cxx:471
 TEveElement.cxx:472
 TEveElement.cxx:473
 TEveElement.cxx:474
 TEveElement.cxx:475
 TEveElement.cxx:476
 TEveElement.cxx:477
 TEveElement.cxx:478
 TEveElement.cxx:479
 TEveElement.cxx:480
 TEveElement.cxx:481
 TEveElement.cxx:482
 TEveElement.cxx:483
 TEveElement.cxx:484
 TEveElement.cxx:485
 TEveElement.cxx:486
 TEveElement.cxx:487
 TEveElement.cxx:488
 TEveElement.cxx:489
 TEveElement.cxx:490
 TEveElement.cxx:491
 TEveElement.cxx:492
 TEveElement.cxx:493
 TEveElement.cxx:494
 TEveElement.cxx:495
 TEveElement.cxx:496
 TEveElement.cxx:497
 TEveElement.cxx:498
 TEveElement.cxx:499
 TEveElement.cxx:500
 TEveElement.cxx:501
 TEveElement.cxx:502
 TEveElement.cxx:503
 TEveElement.cxx:504
 TEveElement.cxx:505
 TEveElement.cxx:506
 TEveElement.cxx:507
 TEveElement.cxx:508
 TEveElement.cxx:509
 TEveElement.cxx:510
 TEveElement.cxx:511
 TEveElement.cxx:512
 TEveElement.cxx:513
 TEveElement.cxx:514
 TEveElement.cxx:515
 TEveElement.cxx:516
 TEveElement.cxx:517
 TEveElement.cxx:518
 TEveElement.cxx:519
 TEveElement.cxx:520
 TEveElement.cxx:521
 TEveElement.cxx:522
 TEveElement.cxx:523
 TEveElement.cxx:524
 TEveElement.cxx:525
 TEveElement.cxx:526
 TEveElement.cxx:527
 TEveElement.cxx:528
 TEveElement.cxx:529
 TEveElement.cxx:530
 TEveElement.cxx:531
 TEveElement.cxx:532
 TEveElement.cxx:533
 TEveElement.cxx:534
 TEveElement.cxx:535
 TEveElement.cxx:536
 TEveElement.cxx:537
 TEveElement.cxx:538
 TEveElement.cxx:539
 TEveElement.cxx:540
 TEveElement.cxx:541
 TEveElement.cxx:542
 TEveElement.cxx:543
 TEveElement.cxx:544
 TEveElement.cxx:545
 TEveElement.cxx:546
 TEveElement.cxx:547
 TEveElement.cxx:548
 TEveElement.cxx:549
 TEveElement.cxx:550
 TEveElement.cxx:551
 TEveElement.cxx:552
 TEveElement.cxx:553
 TEveElement.cxx:554
 TEveElement.cxx:555
 TEveElement.cxx:556
 TEveElement.cxx:557
 TEveElement.cxx:558
 TEveElement.cxx:559
 TEveElement.cxx:560
 TEveElement.cxx:561
 TEveElement.cxx:562
 TEveElement.cxx:563
 TEveElement.cxx:564
 TEveElement.cxx:565
 TEveElement.cxx:566
 TEveElement.cxx:567
 TEveElement.cxx:568
 TEveElement.cxx:569
 TEveElement.cxx:570
 TEveElement.cxx:571
 TEveElement.cxx:572
 TEveElement.cxx:573
 TEveElement.cxx:574
 TEveElement.cxx:575
 TEveElement.cxx:576
 TEveElement.cxx:577
 TEveElement.cxx:578
 TEveElement.cxx:579
 TEveElement.cxx:580
 TEveElement.cxx:581
 TEveElement.cxx:582
 TEveElement.cxx:583
 TEveElement.cxx:584
 TEveElement.cxx:585
 TEveElement.cxx:586
 TEveElement.cxx:587
 TEveElement.cxx:588
 TEveElement.cxx:589
 TEveElement.cxx:590
 TEveElement.cxx:591
 TEveElement.cxx:592
 TEveElement.cxx:593
 TEveElement.cxx:594
 TEveElement.cxx:595
 TEveElement.cxx:596
 TEveElement.cxx:597
 TEveElement.cxx:598
 TEveElement.cxx:599
 TEveElement.cxx:600
 TEveElement.cxx:601
 TEveElement.cxx:602
 TEveElement.cxx:603
 TEveElement.cxx:604
 TEveElement.cxx:605
 TEveElement.cxx:606
 TEveElement.cxx:607
 TEveElement.cxx:608
 TEveElement.cxx:609
 TEveElement.cxx:610
 TEveElement.cxx:611
 TEveElement.cxx:612
 TEveElement.cxx:613
 TEveElement.cxx:614
 TEveElement.cxx:615
 TEveElement.cxx:616
 TEveElement.cxx:617
 TEveElement.cxx:618
 TEveElement.cxx:619
 TEveElement.cxx:620
 TEveElement.cxx:621
 TEveElement.cxx:622
 TEveElement.cxx:623
 TEveElement.cxx:624
 TEveElement.cxx:625
 TEveElement.cxx:626
 TEveElement.cxx:627
 TEveElement.cxx:628
 TEveElement.cxx:629
 TEveElement.cxx:630
 TEveElement.cxx:631
 TEveElement.cxx:632
 TEveElement.cxx:633
 TEveElement.cxx:634
 TEveElement.cxx:635
 TEveElement.cxx:636
 TEveElement.cxx:637
 TEveElement.cxx:638
 TEveElement.cxx:639
 TEveElement.cxx:640
 TEveElement.cxx:641
 TEveElement.cxx:642
 TEveElement.cxx:643
 TEveElement.cxx:644
 TEveElement.cxx:645
 TEveElement.cxx:646
 TEveElement.cxx:647
 TEveElement.cxx:648
 TEveElement.cxx:649
 TEveElement.cxx:650
 TEveElement.cxx:651
 TEveElement.cxx:652
 TEveElement.cxx:653
 TEveElement.cxx:654
 TEveElement.cxx:655
 TEveElement.cxx:656
 TEveElement.cxx:657
 TEveElement.cxx:658
 TEveElement.cxx:659
 TEveElement.cxx:660
 TEveElement.cxx:661
 TEveElement.cxx:662
 TEveElement.cxx:663
 TEveElement.cxx:664
 TEveElement.cxx:665
 TEveElement.cxx:666
 TEveElement.cxx:667
 TEveElement.cxx:668
 TEveElement.cxx:669
 TEveElement.cxx:670
 TEveElement.cxx:671
 TEveElement.cxx:672
 TEveElement.cxx:673
 TEveElement.cxx:674
 TEveElement.cxx:675
 TEveElement.cxx:676
 TEveElement.cxx:677
 TEveElement.cxx:678
 TEveElement.cxx:679
 TEveElement.cxx:680
 TEveElement.cxx:681
 TEveElement.cxx:682
 TEveElement.cxx:683
 TEveElement.cxx:684
 TEveElement.cxx:685
 TEveElement.cxx:686
 TEveElement.cxx:687
 TEveElement.cxx:688
 TEveElement.cxx:689
 TEveElement.cxx:690
 TEveElement.cxx:691
 TEveElement.cxx:692
 TEveElement.cxx:693
 TEveElement.cxx:694
 TEveElement.cxx:695
 TEveElement.cxx:696
 TEveElement.cxx:697
 TEveElement.cxx:698
 TEveElement.cxx:699
 TEveElement.cxx:700
 TEveElement.cxx:701
 TEveElement.cxx:702
 TEveElement.cxx:703
 TEveElement.cxx:704
 TEveElement.cxx:705
 TEveElement.cxx:706
 TEveElement.cxx:707
 TEveElement.cxx:708
 TEveElement.cxx:709
 TEveElement.cxx:710
 TEveElement.cxx:711
 TEveElement.cxx:712
 TEveElement.cxx:713
 TEveElement.cxx:714
 TEveElement.cxx:715
 TEveElement.cxx:716
 TEveElement.cxx:717
 TEveElement.cxx:718
 TEveElement.cxx:719
 TEveElement.cxx:720
 TEveElement.cxx:721
 TEveElement.cxx:722
 TEveElement.cxx:723
 TEveElement.cxx:724
 TEveElement.cxx:725
 TEveElement.cxx:726
 TEveElement.cxx:727
 TEveElement.cxx:728
 TEveElement.cxx:729
 TEveElement.cxx:730
 TEveElement.cxx:731
 TEveElement.cxx:732
 TEveElement.cxx:733
 TEveElement.cxx:734
 TEveElement.cxx:735
 TEveElement.cxx:736
 TEveElement.cxx:737
 TEveElement.cxx:738
 TEveElement.cxx:739
 TEveElement.cxx:740
 TEveElement.cxx:741
 TEveElement.cxx:742
 TEveElement.cxx:743
 TEveElement.cxx:744
 TEveElement.cxx:745
 TEveElement.cxx:746
 TEveElement.cxx:747
 TEveElement.cxx:748
 TEveElement.cxx:749
 TEveElement.cxx:750
 TEveElement.cxx:751
 TEveElement.cxx:752
 TEveElement.cxx:753
 TEveElement.cxx:754
 TEveElement.cxx:755
 TEveElement.cxx:756
 TEveElement.cxx:757
 TEveElement.cxx:758
 TEveElement.cxx:759
 TEveElement.cxx:760
 TEveElement.cxx:761
 TEveElement.cxx:762
 TEveElement.cxx:763
 TEveElement.cxx:764
 TEveElement.cxx:765
 TEveElement.cxx:766
 TEveElement.cxx:767
 TEveElement.cxx:768
 TEveElement.cxx:769
 TEveElement.cxx:770
 TEveElement.cxx:771
 TEveElement.cxx:772
 TEveElement.cxx:773
 TEveElement.cxx:774
 TEveElement.cxx:775
 TEveElement.cxx:776
 TEveElement.cxx:777
 TEveElement.cxx:778
 TEveElement.cxx:779
 TEveElement.cxx:780
 TEveElement.cxx:781
 TEveElement.cxx:782
 TEveElement.cxx:783
 TEveElement.cxx:784
 TEveElement.cxx:785
 TEveElement.cxx:786
 TEveElement.cxx:787
 TEveElement.cxx:788
 TEveElement.cxx:789
 TEveElement.cxx:790
 TEveElement.cxx:791
 TEveElement.cxx:792
 TEveElement.cxx:793
 TEveElement.cxx:794
 TEveElement.cxx:795
 TEveElement.cxx:796
 TEveElement.cxx:797
 TEveElement.cxx:798
 TEveElement.cxx:799
 TEveElement.cxx:800
 TEveElement.cxx:801
 TEveElement.cxx:802
 TEveElement.cxx:803
 TEveElement.cxx:804
 TEveElement.cxx:805
 TEveElement.cxx:806
 TEveElement.cxx:807
 TEveElement.cxx:808
 TEveElement.cxx:809
 TEveElement.cxx:810
 TEveElement.cxx:811
 TEveElement.cxx:812
 TEveElement.cxx:813
 TEveElement.cxx:814
 TEveElement.cxx:815
 TEveElement.cxx:816
 TEveElement.cxx:817
 TEveElement.cxx:818
 TEveElement.cxx:819
 TEveElement.cxx:820
 TEveElement.cxx:821
 TEveElement.cxx:822
 TEveElement.cxx:823
 TEveElement.cxx:824
 TEveElement.cxx:825
 TEveElement.cxx:826
 TEveElement.cxx:827
 TEveElement.cxx:828
 TEveElement.cxx:829
 TEveElement.cxx:830
 TEveElement.cxx:831
 TEveElement.cxx:832
 TEveElement.cxx:833
 TEveElement.cxx:834
 TEveElement.cxx:835
 TEveElement.cxx:836
 TEveElement.cxx:837
 TEveElement.cxx:838
 TEveElement.cxx:839
 TEveElement.cxx:840
 TEveElement.cxx:841
 TEveElement.cxx:842
 TEveElement.cxx:843
 TEveElement.cxx:844
 TEveElement.cxx:845
 TEveElement.cxx:846
 TEveElement.cxx:847
 TEveElement.cxx:848
 TEveElement.cxx:849
 TEveElement.cxx:850
 TEveElement.cxx:851
 TEveElement.cxx:852
 TEveElement.cxx:853
 TEveElement.cxx:854
 TEveElement.cxx:855
 TEveElement.cxx:856
 TEveElement.cxx:857
 TEveElement.cxx:858
 TEveElement.cxx:859
 TEveElement.cxx:860
 TEveElement.cxx:861
 TEveElement.cxx:862
 TEveElement.cxx:863
 TEveElement.cxx:864
 TEveElement.cxx:865
 TEveElement.cxx:866
 TEveElement.cxx:867
 TEveElement.cxx:868
 TEveElement.cxx:869
 TEveElement.cxx:870
 TEveElement.cxx:871
 TEveElement.cxx:872
 TEveElement.cxx:873
 TEveElement.cxx:874
 TEveElement.cxx:875
 TEveElement.cxx:876
 TEveElement.cxx:877
 TEveElement.cxx:878
 TEveElement.cxx:879
 TEveElement.cxx:880
 TEveElement.cxx:881
 TEveElement.cxx:882
 TEveElement.cxx:883
 TEveElement.cxx:884
 TEveElement.cxx:885
 TEveElement.cxx:886
 TEveElement.cxx:887
 TEveElement.cxx:888
 TEveElement.cxx:889
 TEveElement.cxx:890
 TEveElement.cxx:891
 TEveElement.cxx:892
 TEveElement.cxx:893
 TEveElement.cxx:894
 TEveElement.cxx:895
 TEveElement.cxx:896
 TEveElement.cxx:897
 TEveElement.cxx:898
 TEveElement.cxx:899
 TEveElement.cxx:900
 TEveElement.cxx:901
 TEveElement.cxx:902
 TEveElement.cxx:903
 TEveElement.cxx:904
 TEveElement.cxx:905
 TEveElement.cxx:906
 TEveElement.cxx:907
 TEveElement.cxx:908
 TEveElement.cxx:909
 TEveElement.cxx:910
 TEveElement.cxx:911
 TEveElement.cxx:912
 TEveElement.cxx:913
 TEveElement.cxx:914
 TEveElement.cxx:915
 TEveElement.cxx:916
 TEveElement.cxx:917
 TEveElement.cxx:918
 TEveElement.cxx:919
 TEveElement.cxx:920
 TEveElement.cxx:921
 TEveElement.cxx:922
 TEveElement.cxx:923
 TEveElement.cxx:924
 TEveElement.cxx:925
 TEveElement.cxx:926
 TEveElement.cxx:927
 TEveElement.cxx:928
 TEveElement.cxx:929
 TEveElement.cxx:930
 TEveElement.cxx:931
 TEveElement.cxx:932
 TEveElement.cxx:933
 TEveElement.cxx:934
 TEveElement.cxx:935
 TEveElement.cxx:936
 TEveElement.cxx:937
 TEveElement.cxx:938
 TEveElement.cxx:939
 TEveElement.cxx:940
 TEveElement.cxx:941
 TEveElement.cxx:942
 TEveElement.cxx:943
 TEveElement.cxx:944
 TEveElement.cxx:945
 TEveElement.cxx:946
 TEveElement.cxx:947
 TEveElement.cxx:948
 TEveElement.cxx:949
 TEveElement.cxx:950
 TEveElement.cxx:951
 TEveElement.cxx:952
 TEveElement.cxx:953
 TEveElement.cxx:954
 TEveElement.cxx:955
 TEveElement.cxx:956
 TEveElement.cxx:957
 TEveElement.cxx:958
 TEveElement.cxx:959
 TEveElement.cxx:960
 TEveElement.cxx:961
 TEveElement.cxx:962
 TEveElement.cxx:963
 TEveElement.cxx:964
 TEveElement.cxx:965
 TEveElement.cxx:966
 TEveElement.cxx:967
 TEveElement.cxx:968
 TEveElement.cxx:969
 TEveElement.cxx:970
 TEveElement.cxx:971
 TEveElement.cxx:972
 TEveElement.cxx:973
 TEveElement.cxx:974
 TEveElement.cxx:975
 TEveElement.cxx:976
 TEveElement.cxx:977
 TEveElement.cxx:978
 TEveElement.cxx:979
 TEveElement.cxx:980
 TEveElement.cxx:981
 TEveElement.cxx:982
 TEveElement.cxx:983
 TEveElement.cxx:984
 TEveElement.cxx:985
 TEveElement.cxx:986
 TEveElement.cxx:987
 TEveElement.cxx:988
 TEveElement.cxx:989
 TEveElement.cxx:990
 TEveElement.cxx:991
 TEveElement.cxx:992
 TEveElement.cxx:993
 TEveElement.cxx:994
 TEveElement.cxx:995
 TEveElement.cxx:996
 TEveElement.cxx:997
 TEveElement.cxx:998
 TEveElement.cxx:999
 TEveElement.cxx:1000
 TEveElement.cxx:1001
 TEveElement.cxx:1002
 TEveElement.cxx:1003
 TEveElement.cxx:1004
 TEveElement.cxx:1005
 TEveElement.cxx:1006
 TEveElement.cxx:1007
 TEveElement.cxx:1008
 TEveElement.cxx:1009
 TEveElement.cxx:1010
 TEveElement.cxx:1011
 TEveElement.cxx:1012
 TEveElement.cxx:1013
 TEveElement.cxx:1014
 TEveElement.cxx:1015
 TEveElement.cxx:1016
 TEveElement.cxx:1017
 TEveElement.cxx:1018
 TEveElement.cxx:1019
 TEveElement.cxx:1020
 TEveElement.cxx:1021
 TEveElement.cxx:1022
 TEveElement.cxx:1023
 TEveElement.cxx:1024
 TEveElement.cxx:1025
 TEveElement.cxx:1026
 TEveElement.cxx:1027
 TEveElement.cxx:1028
 TEveElement.cxx:1029
 TEveElement.cxx:1030
 TEveElement.cxx:1031
 TEveElement.cxx:1032
 TEveElement.cxx:1033
 TEveElement.cxx:1034
 TEveElement.cxx:1035
 TEveElement.cxx:1036
 TEveElement.cxx:1037
 TEveElement.cxx:1038
 TEveElement.cxx:1039
 TEveElement.cxx:1040
 TEveElement.cxx:1041
 TEveElement.cxx:1042
 TEveElement.cxx:1043
 TEveElement.cxx:1044
 TEveElement.cxx:1045
 TEveElement.cxx:1046
 TEveElement.cxx:1047
 TEveElement.cxx:1048
 TEveElement.cxx:1049
 TEveElement.cxx:1050
 TEveElement.cxx:1051
 TEveElement.cxx:1052
 TEveElement.cxx:1053
 TEveElement.cxx:1054
 TEveElement.cxx:1055
 TEveElement.cxx:1056
 TEveElement.cxx:1057
 TEveElement.cxx:1058
 TEveElement.cxx:1059
 TEveElement.cxx:1060
 TEveElement.cxx:1061
 TEveElement.cxx:1062
 TEveElement.cxx:1063
 TEveElement.cxx:1064
 TEveElement.cxx:1065
 TEveElement.cxx:1066
 TEveElement.cxx:1067
 TEveElement.cxx:1068
 TEveElement.cxx:1069
 TEveElement.cxx:1070
 TEveElement.cxx:1071
 TEveElement.cxx:1072
 TEveElement.cxx:1073
 TEveElement.cxx:1074
 TEveElement.cxx:1075
 TEveElement.cxx:1076
 TEveElement.cxx:1077
 TEveElement.cxx:1078
 TEveElement.cxx:1079
 TEveElement.cxx:1080
 TEveElement.cxx:1081
 TEveElement.cxx:1082
 TEveElement.cxx:1083
 TEveElement.cxx:1084
 TEveElement.cxx:1085
 TEveElement.cxx:1086
 TEveElement.cxx:1087
 TEveElement.cxx:1088
 TEveElement.cxx:1089
 TEveElement.cxx:1090
 TEveElement.cxx:1091
 TEveElement.cxx:1092
 TEveElement.cxx:1093
 TEveElement.cxx:1094
 TEveElement.cxx:1095
 TEveElement.cxx:1096
 TEveElement.cxx:1097
 TEveElement.cxx:1098
 TEveElement.cxx:1099
 TEveElement.cxx:1100
 TEveElement.cxx:1101
 TEveElement.cxx:1102
 TEveElement.cxx:1103
 TEveElement.cxx:1104
 TEveElement.cxx:1105
 TEveElement.cxx:1106
 TEveElement.cxx:1107
 TEveElement.cxx:1108
 TEveElement.cxx:1109
 TEveElement.cxx:1110
 TEveElement.cxx:1111
 TEveElement.cxx:1112
 TEveElement.cxx:1113
 TEveElement.cxx:1114
 TEveElement.cxx:1115
 TEveElement.cxx:1116
 TEveElement.cxx:1117
 TEveElement.cxx:1118
 TEveElement.cxx:1119
 TEveElement.cxx:1120
 TEveElement.cxx:1121
 TEveElement.cxx:1122
 TEveElement.cxx:1123
 TEveElement.cxx:1124
 TEveElement.cxx:1125
 TEveElement.cxx:1126
 TEveElement.cxx:1127
 TEveElement.cxx:1128
 TEveElement.cxx:1129
 TEveElement.cxx:1130
 TEveElement.cxx:1131
 TEveElement.cxx:1132
 TEveElement.cxx:1133
 TEveElement.cxx:1134
 TEveElement.cxx:1135
 TEveElement.cxx:1136
 TEveElement.cxx:1137
 TEveElement.cxx:1138
 TEveElement.cxx:1139
 TEveElement.cxx:1140
 TEveElement.cxx:1141
 TEveElement.cxx:1142
 TEveElement.cxx:1143
 TEveElement.cxx:1144
 TEveElement.cxx:1145
 TEveElement.cxx:1146
 TEveElement.cxx:1147
 TEveElement.cxx:1148
 TEveElement.cxx:1149
 TEveElement.cxx:1150
 TEveElement.cxx:1151
 TEveElement.cxx:1152
 TEveElement.cxx:1153
 TEveElement.cxx:1154
 TEveElement.cxx:1155
 TEveElement.cxx:1156
 TEveElement.cxx:1157
 TEveElement.cxx:1158
 TEveElement.cxx:1159
 TEveElement.cxx:1160
 TEveElement.cxx:1161
 TEveElement.cxx:1162
 TEveElement.cxx:1163
 TEveElement.cxx:1164
 TEveElement.cxx:1165
 TEveElement.cxx:1166
 TEveElement.cxx:1167
 TEveElement.cxx:1168
 TEveElement.cxx:1169
 TEveElement.cxx:1170
 TEveElement.cxx:1171
 TEveElement.cxx:1172
 TEveElement.cxx:1173
 TEveElement.cxx:1174
 TEveElement.cxx:1175
 TEveElement.cxx:1176
 TEveElement.cxx:1177
 TEveElement.cxx:1178
 TEveElement.cxx:1179
 TEveElement.cxx:1180
 TEveElement.cxx:1181
 TEveElement.cxx:1182
 TEveElement.cxx:1183
 TEveElement.cxx:1184
 TEveElement.cxx:1185
 TEveElement.cxx:1186
 TEveElement.cxx:1187
 TEveElement.cxx:1188
 TEveElement.cxx:1189
 TEveElement.cxx:1190
 TEveElement.cxx:1191
 TEveElement.cxx:1192
 TEveElement.cxx:1193
 TEveElement.cxx:1194
 TEveElement.cxx:1195
 TEveElement.cxx:1196
 TEveElement.cxx:1197
 TEveElement.cxx:1198
 TEveElement.cxx:1199
 TEveElement.cxx:1200
 TEveElement.cxx:1201
 TEveElement.cxx:1202
 TEveElement.cxx:1203
 TEveElement.cxx:1204
 TEveElement.cxx:1205
 TEveElement.cxx:1206
 TEveElement.cxx:1207
 TEveElement.cxx:1208
 TEveElement.cxx:1209
 TEveElement.cxx:1210
 TEveElement.cxx:1211
 TEveElement.cxx:1212
 TEveElement.cxx:1213
 TEveElement.cxx:1214
 TEveElement.cxx:1215
 TEveElement.cxx:1216
 TEveElement.cxx:1217
 TEveElement.cxx:1218
 TEveElement.cxx:1219
 TEveElement.cxx:1220
 TEveElement.cxx:1221
 TEveElement.cxx:1222
 TEveElement.cxx:1223
 TEveElement.cxx:1224
 TEveElement.cxx:1225
 TEveElement.cxx:1226
 TEveElement.cxx:1227
 TEveElement.cxx:1228
 TEveElement.cxx:1229
 TEveElement.cxx:1230
 TEveElement.cxx:1231
 TEveElement.cxx:1232
 TEveElement.cxx:1233
 TEveElement.cxx:1234
 TEveElement.cxx:1235
 TEveElement.cxx:1236
 TEveElement.cxx:1237
 TEveElement.cxx:1238
 TEveElement.cxx:1239
 TEveElement.cxx:1240
 TEveElement.cxx:1241
 TEveElement.cxx:1242
 TEveElement.cxx:1243
 TEveElement.cxx:1244
 TEveElement.cxx:1245
 TEveElement.cxx:1246
 TEveElement.cxx:1247
 TEveElement.cxx:1248
 TEveElement.cxx:1249
 TEveElement.cxx:1250
 TEveElement.cxx:1251
 TEveElement.cxx:1252
 TEveElement.cxx:1253
 TEveElement.cxx:1254
 TEveElement.cxx:1255
 TEveElement.cxx:1256
 TEveElement.cxx:1257
 TEveElement.cxx:1258
 TEveElement.cxx:1259
 TEveElement.cxx:1260
 TEveElement.cxx:1261
 TEveElement.cxx:1262
 TEveElement.cxx:1263
 TEveElement.cxx:1264
 TEveElement.cxx:1265
 TEveElement.cxx:1266
 TEveElement.cxx:1267
 TEveElement.cxx:1268
 TEveElement.cxx:1269
 TEveElement.cxx:1270
 TEveElement.cxx:1271
 TEveElement.cxx:1272
 TEveElement.cxx:1273
 TEveElement.cxx:1274
 TEveElement.cxx:1275
 TEveElement.cxx:1276
 TEveElement.cxx:1277
 TEveElement.cxx:1278
 TEveElement.cxx:1279
 TEveElement.cxx:1280
 TEveElement.cxx:1281
 TEveElement.cxx:1282
 TEveElement.cxx:1283
 TEveElement.cxx:1284
 TEveElement.cxx:1285
 TEveElement.cxx:1286
 TEveElement.cxx:1287
 TEveElement.cxx:1288
 TEveElement.cxx:1289
 TEveElement.cxx:1290
 TEveElement.cxx:1291
 TEveElement.cxx:1292
 TEveElement.cxx:1293
 TEveElement.cxx:1294
 TEveElement.cxx:1295
 TEveElement.cxx:1296
 TEveElement.cxx:1297
 TEveElement.cxx:1298
 TEveElement.cxx:1299
 TEveElement.cxx:1300
 TEveElement.cxx:1301
 TEveElement.cxx:1302
 TEveElement.cxx:1303
 TEveElement.cxx:1304
 TEveElement.cxx:1305
 TEveElement.cxx:1306
 TEveElement.cxx:1307
 TEveElement.cxx:1308
 TEveElement.cxx:1309
 TEveElement.cxx:1310
 TEveElement.cxx:1311
 TEveElement.cxx:1312
 TEveElement.cxx:1313
 TEveElement.cxx:1314
 TEveElement.cxx:1315
 TEveElement.cxx:1316
 TEveElement.cxx:1317
 TEveElement.cxx:1318
 TEveElement.cxx:1319
 TEveElement.cxx:1320
 TEveElement.cxx:1321
 TEveElement.cxx:1322
 TEveElement.cxx:1323
 TEveElement.cxx:1324
 TEveElement.cxx:1325
 TEveElement.cxx:1326
 TEveElement.cxx:1327
 TEveElement.cxx:1328
 TEveElement.cxx:1329
 TEveElement.cxx:1330
 TEveElement.cxx:1331
 TEveElement.cxx:1332
 TEveElement.cxx:1333
 TEveElement.cxx:1334
 TEveElement.cxx:1335
 TEveElement.cxx:1336
 TEveElement.cxx:1337
 TEveElement.cxx:1338
 TEveElement.cxx:1339
 TEveElement.cxx:1340
 TEveElement.cxx:1341
 TEveElement.cxx:1342
 TEveElement.cxx:1343
 TEveElement.cxx:1344
 TEveElement.cxx:1345
 TEveElement.cxx:1346
 TEveElement.cxx:1347
 TEveElement.cxx:1348
 TEveElement.cxx:1349
 TEveElement.cxx:1350
 TEveElement.cxx:1351
 TEveElement.cxx:1352
 TEveElement.cxx:1353
 TEveElement.cxx:1354
 TEveElement.cxx:1355
 TEveElement.cxx:1356
 TEveElement.cxx:1357
 TEveElement.cxx:1358
 TEveElement.cxx:1359
 TEveElement.cxx:1360
 TEveElement.cxx:1361
 TEveElement.cxx:1362
 TEveElement.cxx:1363
 TEveElement.cxx:1364
 TEveElement.cxx:1365
 TEveElement.cxx:1366
 TEveElement.cxx:1367
 TEveElement.cxx:1368
 TEveElement.cxx:1369
 TEveElement.cxx:1370
 TEveElement.cxx:1371
 TEveElement.cxx:1372
 TEveElement.cxx:1373
 TEveElement.cxx:1374
 TEveElement.cxx:1375
 TEveElement.cxx:1376
 TEveElement.cxx:1377
 TEveElement.cxx:1378
 TEveElement.cxx:1379
 TEveElement.cxx:1380
 TEveElement.cxx:1381
 TEveElement.cxx:1382
 TEveElement.cxx:1383
 TEveElement.cxx:1384
 TEveElement.cxx:1385
 TEveElement.cxx:1386
 TEveElement.cxx:1387
 TEveElement.cxx:1388
 TEveElement.cxx:1389
 TEveElement.cxx:1390
 TEveElement.cxx:1391
 TEveElement.cxx:1392
 TEveElement.cxx:1393
 TEveElement.cxx:1394
 TEveElement.cxx:1395
 TEveElement.cxx:1396
 TEveElement.cxx:1397
 TEveElement.cxx:1398
 TEveElement.cxx:1399
 TEveElement.cxx:1400
 TEveElement.cxx:1401
 TEveElement.cxx:1402
 TEveElement.cxx:1403
 TEveElement.cxx:1404
 TEveElement.cxx:1405
 TEveElement.cxx:1406
 TEveElement.cxx:1407
 TEveElement.cxx:1408
 TEveElement.cxx:1409
 TEveElement.cxx:1410
 TEveElement.cxx:1411
 TEveElement.cxx:1412
 TEveElement.cxx:1413
 TEveElement.cxx:1414
 TEveElement.cxx:1415
 TEveElement.cxx:1416
 TEveElement.cxx:1417
 TEveElement.cxx:1418
 TEveElement.cxx:1419
 TEveElement.cxx:1420
 TEveElement.cxx:1421
 TEveElement.cxx:1422
 TEveElement.cxx:1423
 TEveElement.cxx:1424
 TEveElement.cxx:1425
 TEveElement.cxx:1426
 TEveElement.cxx:1427
 TEveElement.cxx:1428
 TEveElement.cxx:1429
 TEveElement.cxx:1430
 TEveElement.cxx:1431
 TEveElement.cxx:1432
 TEveElement.cxx:1433
 TEveElement.cxx:1434
 TEveElement.cxx:1435
 TEveElement.cxx:1436
 TEveElement.cxx:1437
 TEveElement.cxx:1438
 TEveElement.cxx:1439
 TEveElement.cxx:1440
 TEveElement.cxx:1441
 TEveElement.cxx:1442
 TEveElement.cxx:1443
 TEveElement.cxx:1444
 TEveElement.cxx:1445
 TEveElement.cxx:1446
 TEveElement.cxx:1447
 TEveElement.cxx:1448
 TEveElement.cxx:1449
 TEveElement.cxx:1450
 TEveElement.cxx:1451
 TEveElement.cxx:1452
 TEveElement.cxx:1453
 TEveElement.cxx:1454
 TEveElement.cxx:1455
 TEveElement.cxx:1456
 TEveElement.cxx:1457
 TEveElement.cxx:1458
 TEveElement.cxx:1459
 TEveElement.cxx:1460
 TEveElement.cxx:1461
 TEveElement.cxx:1462
 TEveElement.cxx:1463
 TEveElement.cxx:1464
 TEveElement.cxx:1465
 TEveElement.cxx:1466
 TEveElement.cxx:1467
 TEveElement.cxx:1468
 TEveElement.cxx:1469
 TEveElement.cxx:1470
 TEveElement.cxx:1471
 TEveElement.cxx:1472
 TEveElement.cxx:1473
 TEveElement.cxx:1474
 TEveElement.cxx:1475
 TEveElement.cxx:1476
 TEveElement.cxx:1477
 TEveElement.cxx:1478
 TEveElement.cxx:1479
 TEveElement.cxx:1480
 TEveElement.cxx:1481
 TEveElement.cxx:1482
 TEveElement.cxx:1483
 TEveElement.cxx:1484
 TEveElement.cxx:1485
 TEveElement.cxx:1486
 TEveElement.cxx:1487
 TEveElement.cxx:1488
 TEveElement.cxx:1489
 TEveElement.cxx:1490
 TEveElement.cxx:1491
 TEveElement.cxx:1492
 TEveElement.cxx:1493
 TEveElement.cxx:1494
 TEveElement.cxx:1495
 TEveElement.cxx:1496
 TEveElement.cxx:1497
 TEveElement.cxx:1498
 TEveElement.cxx:1499
 TEveElement.cxx:1500
 TEveElement.cxx:1501
 TEveElement.cxx:1502
 TEveElement.cxx:1503
 TEveElement.cxx:1504
 TEveElement.cxx:1505
 TEveElement.cxx:1506
 TEveElement.cxx:1507
 TEveElement.cxx:1508
 TEveElement.cxx:1509
 TEveElement.cxx:1510
 TEveElement.cxx:1511
 TEveElement.cxx:1512
 TEveElement.cxx:1513
 TEveElement.cxx:1514
 TEveElement.cxx:1515
 TEveElement.cxx:1516
 TEveElement.cxx:1517
 TEveElement.cxx:1518
 TEveElement.cxx:1519
 TEveElement.cxx:1520
 TEveElement.cxx:1521
 TEveElement.cxx:1522
 TEveElement.cxx:1523
 TEveElement.cxx:1524
 TEveElement.cxx:1525
 TEveElement.cxx:1526
 TEveElement.cxx:1527
 TEveElement.cxx:1528
 TEveElement.cxx:1529
 TEveElement.cxx:1530
 TEveElement.cxx:1531
 TEveElement.cxx:1532
 TEveElement.cxx:1533
 TEveElement.cxx:1534
 TEveElement.cxx:1535
 TEveElement.cxx:1536
 TEveElement.cxx:1537
 TEveElement.cxx:1538
 TEveElement.cxx:1539
 TEveElement.cxx:1540
 TEveElement.cxx:1541
 TEveElement.cxx:1542
 TEveElement.cxx:1543
 TEveElement.cxx:1544
 TEveElement.cxx:1545
 TEveElement.cxx:1546
 TEveElement.cxx:1547
 TEveElement.cxx:1548
 TEveElement.cxx:1549
 TEveElement.cxx:1550
 TEveElement.cxx:1551
 TEveElement.cxx:1552
 TEveElement.cxx:1553
 TEveElement.cxx:1554
 TEveElement.cxx:1555
 TEveElement.cxx:1556
 TEveElement.cxx:1557
 TEveElement.cxx:1558
 TEveElement.cxx:1559
 TEveElement.cxx:1560
 TEveElement.cxx:1561
 TEveElement.cxx:1562
 TEveElement.cxx:1563
 TEveElement.cxx:1564
 TEveElement.cxx:1565
 TEveElement.cxx:1566
 TEveElement.cxx:1567
 TEveElement.cxx:1568
 TEveElement.cxx:1569
 TEveElement.cxx:1570
 TEveElement.cxx:1571
 TEveElement.cxx:1572
 TEveElement.cxx:1573
 TEveElement.cxx:1574
 TEveElement.cxx:1575
 TEveElement.cxx:1576
 TEveElement.cxx:1577
 TEveElement.cxx:1578
 TEveElement.cxx:1579
 TEveElement.cxx:1580
 TEveElement.cxx:1581
 TEveElement.cxx:1582
 TEveElement.cxx:1583
 TEveElement.cxx:1584
 TEveElement.cxx:1585
 TEveElement.cxx:1586
 TEveElement.cxx:1587
 TEveElement.cxx:1588
 TEveElement.cxx:1589
 TEveElement.cxx:1590
 TEveElement.cxx:1591
 TEveElement.cxx:1592
 TEveElement.cxx:1593
 TEveElement.cxx:1594
 TEveElement.cxx:1595
 TEveElement.cxx:1596
 TEveElement.cxx:1597
 TEveElement.cxx:1598
 TEveElement.cxx:1599
 TEveElement.cxx:1600
 TEveElement.cxx:1601
 TEveElement.cxx:1602
 TEveElement.cxx:1603
 TEveElement.cxx:1604
 TEveElement.cxx:1605
 TEveElement.cxx:1606
 TEveElement.cxx:1607
 TEveElement.cxx:1608
 TEveElement.cxx:1609
 TEveElement.cxx:1610
 TEveElement.cxx:1611
 TEveElement.cxx:1612
 TEveElement.cxx:1613
 TEveElement.cxx:1614
 TEveElement.cxx:1615
 TEveElement.cxx:1616
 TEveElement.cxx:1617
 TEveElement.cxx:1618
 TEveElement.cxx:1619
 TEveElement.cxx:1620
 TEveElement.cxx:1621
 TEveElement.cxx:1622
 TEveElement.cxx:1623
 TEveElement.cxx:1624
 TEveElement.cxx:1625
 TEveElement.cxx:1626
 TEveElement.cxx:1627
 TEveElement.cxx:1628
 TEveElement.cxx:1629
 TEveElement.cxx:1630
 TEveElement.cxx:1631
 TEveElement.cxx:1632
 TEveElement.cxx:1633
 TEveElement.cxx:1634
 TEveElement.cxx:1635
 TEveElement.cxx:1636
 TEveElement.cxx:1637
 TEveElement.cxx:1638
 TEveElement.cxx:1639
 TEveElement.cxx:1640
 TEveElement.cxx:1641
 TEveElement.cxx:1642
 TEveElement.cxx:1643
 TEveElement.cxx:1644
 TEveElement.cxx:1645
 TEveElement.cxx:1646
 TEveElement.cxx:1647
 TEveElement.cxx:1648
 TEveElement.cxx:1649
 TEveElement.cxx:1650
 TEveElement.cxx:1651
 TEveElement.cxx:1652
 TEveElement.cxx:1653
 TEveElement.cxx:1654
 TEveElement.cxx:1655
 TEveElement.cxx:1656
 TEveElement.cxx:1657
 TEveElement.cxx:1658
 TEveElement.cxx:1659
 TEveElement.cxx:1660
 TEveElement.cxx:1661
 TEveElement.cxx:1662
 TEveElement.cxx:1663
 TEveElement.cxx:1664
 TEveElement.cxx:1665
 TEveElement.cxx:1666
 TEveElement.cxx:1667
 TEveElement.cxx:1668
 TEveElement.cxx:1669
 TEveElement.cxx:1670
 TEveElement.cxx:1671
 TEveElement.cxx:1672
 TEveElement.cxx:1673
 TEveElement.cxx:1674
 TEveElement.cxx:1675
 TEveElement.cxx:1676
 TEveElement.cxx:1677
 TEveElement.cxx:1678
 TEveElement.cxx:1679
 TEveElement.cxx:1680
 TEveElement.cxx:1681
 TEveElement.cxx:1682
 TEveElement.cxx:1683
 TEveElement.cxx:1684
 TEveElement.cxx:1685
 TEveElement.cxx:1686
 TEveElement.cxx:1687
 TEveElement.cxx:1688
 TEveElement.cxx:1689
 TEveElement.cxx:1690
 TEveElement.cxx:1691
 TEveElement.cxx:1692
 TEveElement.cxx:1693
 TEveElement.cxx:1694
 TEveElement.cxx:1695
 TEveElement.cxx:1696
 TEveElement.cxx:1697
 TEveElement.cxx:1698
 TEveElement.cxx:1699
 TEveElement.cxx:1700
 TEveElement.cxx:1701
 TEveElement.cxx:1702
 TEveElement.cxx:1703
 TEveElement.cxx:1704
 TEveElement.cxx:1705
 TEveElement.cxx:1706
 TEveElement.cxx:1707
 TEveElement.cxx:1708
 TEveElement.cxx:1709
 TEveElement.cxx:1710
 TEveElement.cxx:1711
 TEveElement.cxx:1712
 TEveElement.cxx:1713
 TEveElement.cxx:1714
 TEveElement.cxx:1715
 TEveElement.cxx:1716
 TEveElement.cxx:1717
 TEveElement.cxx:1718
 TEveElement.cxx:1719
 TEveElement.cxx:1720
 TEveElement.cxx:1721
 TEveElement.cxx:1722
 TEveElement.cxx:1723
 TEveElement.cxx:1724
 TEveElement.cxx:1725
 TEveElement.cxx:1726
 TEveElement.cxx:1727
 TEveElement.cxx:1728
 TEveElement.cxx:1729
 TEveElement.cxx:1730
 TEveElement.cxx:1731
 TEveElement.cxx:1732
 TEveElement.cxx:1733
 TEveElement.cxx:1734
 TEveElement.cxx:1735
 TEveElement.cxx:1736
 TEveElement.cxx:1737
 TEveElement.cxx:1738
 TEveElement.cxx:1739
 TEveElement.cxx:1740
 TEveElement.cxx:1741
 TEveElement.cxx:1742
 TEveElement.cxx:1743
 TEveElement.cxx:1744
 TEveElement.cxx:1745
 TEveElement.cxx:1746
 TEveElement.cxx:1747
 TEveElement.cxx:1748
 TEveElement.cxx:1749
 TEveElement.cxx:1750
 TEveElement.cxx:1751
 TEveElement.cxx:1752
 TEveElement.cxx:1753
 TEveElement.cxx:1754
 TEveElement.cxx:1755
 TEveElement.cxx:1756
 TEveElement.cxx:1757
 TEveElement.cxx:1758
 TEveElement.cxx:1759
 TEveElement.cxx:1760
 TEveElement.cxx:1761
 TEveElement.cxx:1762
 TEveElement.cxx:1763
 TEveElement.cxx:1764
 TEveElement.cxx:1765
 TEveElement.cxx:1766
 TEveElement.cxx:1767
 TEveElement.cxx:1768
 TEveElement.cxx:1769
 TEveElement.cxx:1770
 TEveElement.cxx:1771
 TEveElement.cxx:1772
 TEveElement.cxx:1773
 TEveElement.cxx:1774
 TEveElement.cxx:1775
 TEveElement.cxx:1776
 TEveElement.cxx:1777
 TEveElement.cxx:1778
 TEveElement.cxx:1779
 TEveElement.cxx:1780
 TEveElement.cxx:1781
 TEveElement.cxx:1782
 TEveElement.cxx:1783
 TEveElement.cxx:1784
 TEveElement.cxx:1785
 TEveElement.cxx:1786
 TEveElement.cxx:1787
 TEveElement.cxx:1788
 TEveElement.cxx:1789
 TEveElement.cxx:1790
 TEveElement.cxx:1791
 TEveElement.cxx:1792
 TEveElement.cxx:1793
 TEveElement.cxx:1794
 TEveElement.cxx:1795
 TEveElement.cxx:1796
 TEveElement.cxx:1797
 TEveElement.cxx:1798
 TEveElement.cxx:1799
 TEveElement.cxx:1800
 TEveElement.cxx:1801
 TEveElement.cxx:1802
 TEveElement.cxx:1803
 TEveElement.cxx:1804
 TEveElement.cxx:1805
 TEveElement.cxx:1806
 TEveElement.cxx:1807
 TEveElement.cxx:1808
 TEveElement.cxx:1809
 TEveElement.cxx:1810
 TEveElement.cxx:1811
 TEveElement.cxx:1812
 TEveElement.cxx:1813
 TEveElement.cxx:1814
 TEveElement.cxx:1815
 TEveElement.cxx:1816
 TEveElement.cxx:1817
 TEveElement.cxx:1818
 TEveElement.cxx:1819
 TEveElement.cxx:1820
 TEveElement.cxx:1821
 TEveElement.cxx:1822
 TEveElement.cxx:1823
 TEveElement.cxx:1824
 TEveElement.cxx:1825
 TEveElement.cxx:1826
 TEveElement.cxx:1827
 TEveElement.cxx:1828
 TEveElement.cxx:1829
 TEveElement.cxx:1830
 TEveElement.cxx:1831
 TEveElement.cxx:1832
 TEveElement.cxx:1833
 TEveElement.cxx:1834
 TEveElement.cxx:1835
 TEveElement.cxx:1836
 TEveElement.cxx:1837
 TEveElement.cxx:1838
 TEveElement.cxx:1839
 TEveElement.cxx:1840
 TEveElement.cxx:1841
 TEveElement.cxx:1842
 TEveElement.cxx:1843
 TEveElement.cxx:1844
 TEveElement.cxx:1845
 TEveElement.cxx:1846
 TEveElement.cxx:1847
 TEveElement.cxx:1848
 TEveElement.cxx:1849
 TEveElement.cxx:1850
 TEveElement.cxx:1851
 TEveElement.cxx:1852
 TEveElement.cxx:1853
 TEveElement.cxx:1854
 TEveElement.cxx:1855
 TEveElement.cxx:1856
 TEveElement.cxx:1857
 TEveElement.cxx:1858
 TEveElement.cxx:1859
 TEveElement.cxx:1860
 TEveElement.cxx:1861
 TEveElement.cxx:1862
 TEveElement.cxx:1863
 TEveElement.cxx:1864
 TEveElement.cxx:1865
 TEveElement.cxx:1866
 TEveElement.cxx:1867
 TEveElement.cxx:1868
 TEveElement.cxx:1869
 TEveElement.cxx:1870
 TEveElement.cxx:1871
 TEveElement.cxx:1872
 TEveElement.cxx:1873
 TEveElement.cxx:1874
 TEveElement.cxx:1875
 TEveElement.cxx:1876
 TEveElement.cxx:1877
 TEveElement.cxx:1878
 TEveElement.cxx:1879
 TEveElement.cxx:1880
 TEveElement.cxx:1881
 TEveElement.cxx:1882
 TEveElement.cxx:1883
 TEveElement.cxx:1884
 TEveElement.cxx:1885
 TEveElement.cxx:1886
 TEveElement.cxx:1887
 TEveElement.cxx:1888
 TEveElement.cxx:1889
 TEveElement.cxx:1890
 TEveElement.cxx:1891
 TEveElement.cxx:1892
 TEveElement.cxx:1893
 TEveElement.cxx:1894
 TEveElement.cxx:1895
 TEveElement.cxx:1896
 TEveElement.cxx:1897
 TEveElement.cxx:1898
 TEveElement.cxx:1899
 TEveElement.cxx:1900
 TEveElement.cxx:1901
 TEveElement.cxx:1902
 TEveElement.cxx:1903
 TEveElement.cxx:1904
 TEveElement.cxx:1905
 TEveElement.cxx:1906
 TEveElement.cxx:1907
 TEveElement.cxx:1908
 TEveElement.cxx:1909
 TEveElement.cxx:1910
 TEveElement.cxx:1911
 TEveElement.cxx:1912
 TEveElement.cxx:1913
 TEveElement.cxx:1914
 TEveElement.cxx:1915
 TEveElement.cxx:1916
 TEveElement.cxx:1917
 TEveElement.cxx:1918
 TEveElement.cxx:1919
 TEveElement.cxx:1920
 TEveElement.cxx:1921
 TEveElement.cxx:1922
 TEveElement.cxx:1923
 TEveElement.cxx:1924
 TEveElement.cxx:1925
 TEveElement.cxx:1926
 TEveElement.cxx:1927
 TEveElement.cxx:1928
 TEveElement.cxx:1929
 TEveElement.cxx:1930
 TEveElement.cxx:1931
 TEveElement.cxx:1932
 TEveElement.cxx:1933
 TEveElement.cxx:1934
 TEveElement.cxx:1935
 TEveElement.cxx:1936
 TEveElement.cxx:1937
 TEveElement.cxx:1938
 TEveElement.cxx:1939
 TEveElement.cxx:1940
 TEveElement.cxx:1941
 TEveElement.cxx:1942
 TEveElement.cxx:1943
 TEveElement.cxx:1944
 TEveElement.cxx:1945
 TEveElement.cxx:1946
 TEveElement.cxx:1947
 TEveElement.cxx:1948
 TEveElement.cxx:1949
 TEveElement.cxx:1950
 TEveElement.cxx:1951
 TEveElement.cxx:1952
 TEveElement.cxx:1953
 TEveElement.cxx:1954
 TEveElement.cxx:1955
 TEveElement.cxx:1956
 TEveElement.cxx:1957
 TEveElement.cxx:1958
 TEveElement.cxx:1959
 TEveElement.cxx:1960
 TEveElement.cxx:1961
 TEveElement.cxx:1962
 TEveElement.cxx:1963
 TEveElement.cxx:1964
 TEveElement.cxx:1965
 TEveElement.cxx:1966
 TEveElement.cxx:1967
 TEveElement.cxx:1968
 TEveElement.cxx:1969
 TEveElement.cxx:1970
 TEveElement.cxx:1971
 TEveElement.cxx:1972
 TEveElement.cxx:1973
 TEveElement.cxx:1974
 TEveElement.cxx:1975
 TEveElement.cxx:1976
 TEveElement.cxx:1977
 TEveElement.cxx:1978
 TEveElement.cxx:1979
 TEveElement.cxx:1980
 TEveElement.cxx:1981
 TEveElement.cxx:1982
 TEveElement.cxx:1983
 TEveElement.cxx:1984
 TEveElement.cxx:1985
 TEveElement.cxx:1986
 TEveElement.cxx:1987
 TEveElement.cxx:1988
 TEveElement.cxx:1989
 TEveElement.cxx:1990
 TEveElement.cxx:1991
 TEveElement.cxx:1992
 TEveElement.cxx:1993
 TEveElement.cxx:1994
 TEveElement.cxx:1995
 TEveElement.cxx:1996
 TEveElement.cxx:1997
 TEveElement.cxx:1998
 TEveElement.cxx:1999
 TEveElement.cxx:2000
 TEveElement.cxx:2001
 TEveElement.cxx:2002
 TEveElement.cxx:2003
 TEveElement.cxx:2004
 TEveElement.cxx:2005
 TEveElement.cxx:2006
 TEveElement.cxx:2007
 TEveElement.cxx:2008
 TEveElement.cxx:2009
 TEveElement.cxx:2010
 TEveElement.cxx:2011
 TEveElement.cxx:2012
 TEveElement.cxx:2013
 TEveElement.cxx:2014
 TEveElement.cxx:2015
 TEveElement.cxx:2016
 TEveElement.cxx:2017
 TEveElement.cxx:2018
 TEveElement.cxx:2019
 TEveElement.cxx:2020
 TEveElement.cxx:2021
 TEveElement.cxx:2022