// @(#)root/eve:$Id$
// Author: Matevz Tadel 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 "TEveCalo3DGL.h"
#include "TEveCalo.h"

#include "TMath.h"
#include "TAxis.h"

#include "TGLRnrCtx.h"
#include "TGLSelectRecord.h"
#include "TGLPhysicalShape.h"
#include "TGLIncludes.h"
#include "TGLUtil.h"
#include "TEveRGBAPalette.h"
#include "TEveUtil.h"

//______________________________________________________________________________
//
// OpenGL renderer class for TEveCalo3D.

ClassImp(TEveCalo3DGL);

//______________________________________________________________________________
TEveCalo3DGL::TEveCalo3DGL() :
   TGLObject(), fM(0)
{
   // Constructor.

   fMultiColor = kTRUE;
}

//______________________________________________________________________________
Bool_t TEveCalo3DGL::SetModel(TObject* obj, const Option_t* /*opt*/)
{
   // Set model object.

   fM = SetModelDynCast<TEveCalo3D>(obj);
   return kTRUE;
}

//______________________________________________________________________________
void TEveCalo3DGL::SetBBox()
{
   // Set bounding box.

   // !! This ok if master sub-classed from TAttBBox
   SetAxisAlignedBBox(((TEveCalo3D*)fExternalObj)->AssertBBox());
}

//______________________________________________________________________________
Bool_t TEveCalo3DGL::ShouldDLCache(const TGLRnrCtx& rnrCtx) const
{
   // Override from TGLObject.
   // To account for large point-sizes we modify the projection matrix
   // during selection and thus we need a direct draw.

   if (rnrCtx.Highlight() || rnrCtx.Selection()) return kFALSE;
   return TGLObject::ShouldDLCache(rnrCtx);
}

//______________________________________________________________________________
inline void TEveCalo3DGL::CrossProduct(const Float_t a[3], const Float_t b[3],
                                       const Float_t c[3], Float_t out[3]) const
{
   // Calculate cross-product.

   const Float_t v1[3] = { a[0] - c[0], a[1] - c[1], a[2] - c[2] };
   const Float_t v2[3] = { b[0] - c[0], b[1] - c[1], b[2] - c[2] };

   out[0] = v1[1] * v2[2] - v1[2] * v2[1];
   out[1] = v1[2] * v2[0] - v1[0] * v2[2];
   out[2] = v1[0] * v2[1] - v1[1] * v2[0];
}

//______________________________________________________________________________
void TEveCalo3DGL::RenderGridEndCap() const
{
   // Render end cap grid.

   using namespace TMath;

   Float_t  rB = fM->GetBarrelRadius();
   Double_t zEF = fM->GetForwardEndCapPos();
   Double_t zEB = fM->GetBackwardEndCapPos();

   Float_t etaMin = fM->GetEtaMin();
   Float_t etaMax = fM->GetEtaMax();
   Float_t transF  = fM->GetTransitionEtaForward();
   Float_t transB  = fM->GetTransitionEtaBackward();
   Float_t phiMin = fM->GetPhiMin();
   Float_t phiMax = fM->GetPhiMax();

   TAxis *ax = fM->GetData()->GetEtaBins();
   Int_t  nx = ax->GetNbins();
   TAxis *ay = fM->GetData()->GetPhiBins();
   Int_t  ny = ay->GetNbins();


   Float_t r, z, theta, phiU, phiL, eta;

   // eta slices
   for (Int_t i=0; i<=nx; ++i)
   {
      eta = ax->GetBinUpEdge(i);
      if (eta >= transF && (eta > etaMin && eta < etaMax))
      {
         theta = TEveCaloData::EtaToTheta(eta);
         r = Abs(zEF*Tan(theta));
         z = Sign(zEF, ax->GetBinLowEdge(i));
         for (Int_t j=1; j<=ny; ++j)
         {
            phiL = ay->GetBinLowEdge(j);
            phiU = ay->GetBinUpEdge(j);
            if (TEveUtil::IsU1IntervalContainedByMinMax(phiMin, phiMax, phiL, phiU))
            {
               glVertex3f(r*Cos(phiL), r*Sin(phiL), z);
               glVertex3f(r*Cos(phiU), r*Sin(phiU), z);
            }
         }
      } else if (eta <= transB && (eta > etaMin && eta < etaMax)) {
         theta = TEveCaloData::EtaToTheta(eta);
         r = Abs(zEB*Tan(theta));
         z = Sign(zEB, ax->GetBinLowEdge(i));
         for (Int_t j=1; j<=ny; ++j)
         {
            phiL = ay->GetBinLowEdge(j);
            phiU = ay->GetBinUpEdge(j);
            if (TEveUtil::IsU1IntervalContainedByMinMax(phiMin, phiMax, phiL, phiU))
            {
               glVertex3f(r*Cos(phiL), r*Sin(phiL), z);
               glVertex3f(r*Cos(phiU), r*Sin(phiU), z);
            }
         }
      }
   }

   Float_t r1, r2;
   // phi slices front
   if (etaMax > transF)
   {
      r1 = zEF*Tan(TEveCaloData::EtaToTheta(etaMax));
      if (etaMin < transF)
         r2 = rB;
      else
         r2 = zEF*Tan(TEveCaloData::EtaToTheta(etaMin));

      for (Int_t j=1; j<=ny; ++j)
      {
         phiL = ay->GetBinLowEdge(j);
         phiU = ay->GetBinUpEdge(j);
         if (TEveUtil::IsU1IntervalContainedByMinMax(phiMin, phiMax, phiL, phiU))
         {
            glVertex3f( r1*Cos(phiU), r1*Sin(phiU), zEF);
            glVertex3f( r2*Cos(phiU), r2*Sin(phiU), zEF);
            glVertex3f( r1*Cos(phiL), r1*Sin(phiL), zEF);
            glVertex3f( r2*Cos(phiL), r2*Sin(phiL), zEF);
         }
      }
   }

   // phi slices back
   if (etaMin < transB)
   {
      r1 = zEB*Tan(TEveCaloData::EtaToTheta(etaMin));
      if (etaMax > transB)
         r2 = rB;
      else
         r2 = zEB*Tan(TEveCaloData::EtaToTheta(etaMax));

      r1 = Abs(r1);
      r2 = Abs(r2);
      for (Int_t j=1; j<=ny; ++j)
      {
         phiL = ay->GetBinLowEdge(j);
         phiU = ay->GetBinUpEdge(j);
         if (TEveUtil::IsU1IntervalContainedByMinMax(phiMin, phiMax, phiL, phiU))
         {
            glVertex3f(r1*Cos(phiU), r1*Sin(phiU), zEB);
            glVertex3f(r2*Cos(phiU), r2*Sin(phiU), zEB);
            glVertex3f(r1*Cos(phiL), r1*Sin(phiL), zEB);
            glVertex3f(r2*Cos(phiL), r2*Sin(phiL), zEB);
         }
      }
   }
}

//______________________________________________________________________________
void TEveCalo3DGL::RenderGridBarrel() const
{
   // Render barrel grid.

   using namespace TMath;

   Float_t etaMin = fM->GetEtaMin();
   Float_t etaMax = fM->GetEtaMax();
   Float_t transF  = fM->GetTransitionEtaForward();
   Float_t transB  = fM->GetTransitionEtaBackward();
   Float_t phiMin = fM->GetPhiMin();
   Float_t phiMax = fM->GetPhiMax();

   Float_t rB = fM->GetBarrelRadius();
   TAxis *ax  = fM->GetData()->GetEtaBins();
   Int_t nx   = ax->GetNbins();
   TAxis *ay  = fM->GetData()->GetPhiBins();
   Int_t ny   = ay->GetNbins();

   Float_t z, theta, phiL, phiU, eta, x, y;

   // eta slices
   for(Int_t i=0; i<=nx; i++)
   {
      eta = ax->GetBinUpEdge(i);
      if (eta<=transF && eta>=transB && (etaMin < eta && eta < etaMax))
      {
         theta = TEveCaloData::EtaToTheta(eta);
         z  = rB/Tan(theta);
         for (Int_t j=1; j<=ny; j++)
         {
            phiU = ay->GetBinUpEdge(j);
            phiL = ay->GetBinLowEdge(j);
            if (TEveUtil::IsU1IntervalContainedByMinMax(phiMin, phiMax, phiL, phiU))
            {
               glVertex3f(rB*Cos(phiL), rB*Sin(phiL), z);
               glVertex3f(rB*Cos(phiU), rB*Sin(phiU), z);
            }
         }
      }
   }

   // phi slices
   Float_t zF, zB;

   if (etaMin > transB)
      zB = rB/Tan(TEveCaloData::EtaToTheta(etaMin));
   else
      zB = fM->GetBackwardEndCapPos();


   if (etaMax < transF)
      zF =  rB/Tan(TEveCaloData::EtaToTheta(etaMax));
   else
      zF = fM->GetForwardEndCapPos();

   for (Int_t j=1; j<=ny; j++)
   {
      phiU = ay->GetBinUpEdge(j);
      phiL = ay->GetBinLowEdge(j);
      if (TEveUtil::IsU1IntervalContainedByMinMax(phiMin, phiMax, phiL, phiU))
      {
         x = rB * Cos(phiL);
         y = rB * Sin(phiL);
         glVertex3f(x, y, zB);
         glVertex3f(x, y, zF);
         x = rB * Cos(phiU);
         y = rB * Sin(phiU);
         glVertex3f(x, y, zB);
         glVertex3f(x, y, zF);
      }
   }
}

//______________________________________________________________________________
void TEveCalo3DGL::RenderGrid(TGLRnrCtx & rnrCtx) const
{
   // Draw frame reading eta, phi axis.

   if (rnrCtx.Highlight() || rnrCtx.Selection() || rnrCtx.IsDrawPassOutlineLine()) return;

   Bool_t transparent_p = fM->fFrameTransparency > 0;

   if (transparent_p)
   {
      glPushAttrib(GL_ENABLE_BIT | GL_DEPTH_BUFFER_BIT);

      glDepthMask(GL_FALSE);
      glEnable(GL_BLEND);
      glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

      TGLUtil::ColorTransparency(fM->fFrameColor, fM->fFrameTransparency);
   }

   TGLCapabilitySwitch lights_off(GL_LIGHTING, kFALSE);

   TGLUtil::LineWidth(fM->GetFrameWidth());
   glBegin(GL_LINES);

   Float_t etaMin = fM->GetEtaMin();
   Float_t etaMax = fM->GetEtaMax();

   Float_t transF  = fM->GetTransitionEtaForward();
   Float_t transB  = fM->GetTransitionEtaBackward();
   if (fM->GetRnrBarrelFrame() && (etaMin < transF && etaMax > transB))
   {
      RenderGridBarrel();
   }

   if (fM->GetRnrEndCapFrame() && (etaMax > transF || etaMin < transB))
   {
      RenderGridEndCap();
   }

   glEnd();

   if (transparent_p)
   {
      glPopAttrib();
   }
}

//______________________________________________________________________________
void TEveCalo3DGL::RenderBox(const Float_t pnts[8]) const
{
   // Render box with given points.

   //    z
   //    |
   //    |
   //    |________y
   //   /  6-------7
   //  /  /|      /|
   // x  5-------4 |
   //    | 2-----|-3
   //    |/      |/
   //    1-------0
   //

   const Float_t *p = pnts;
   Float_t cross[3];

   // bottom: 0123
   glBegin(GL_POLYGON);
   CrossProduct(p+3, p+9, p, cross);
   glNormal3fv(cross);
   glVertex3fv(p);
   glVertex3fv(p+3);
   glVertex3fv(p+6);
   glVertex3fv(p+9);
   glEnd();
   // top:    7654
   glBegin(GL_POLYGON);
   CrossProduct(p+21, p+15, p+12, cross);
   glNormal3fv(cross);
   glVertex3fv(p+21);
   glVertex3fv(p+18);
   glVertex3fv(p+15);
   glVertex3fv(p+12);
   glEnd();
   // back:   0451
   glBegin(GL_POLYGON);
   CrossProduct(p+12, p+3, p, cross);
   glNormal3fv(cross);
   glVertex3fv(p);
   glVertex3fv(p+12);
   glVertex3fv(p+15);
   glVertex3fv(p+3);
   glEnd();
   //front :  3267
   glBegin(GL_POLYGON);
   CrossProduct(p+6, p+21, p+9, cross);
   glNormal3fv(cross);
   glVertex3fv(p+9);
   glVertex3fv(p+6);
   glVertex3fv(p+18);
   glVertex3fv(p+21);
   glEnd();
   // left:    0374
   glBegin(GL_POLYGON);
   CrossProduct(p+21, p, p+9, cross);
   glNormal3fv(cross);
   glVertex3fv(p);
   glVertex3fv(p+9);
   glVertex3fv(p+21);
   glVertex3fv(p+12);
   glEnd();
   // right:   1562
   glBegin(GL_POLYGON);
   CrossProduct(p+15, p+6, p+3, cross);
   glNormal3fv(cross);
   glVertex3fv(p+3);
   glVertex3fv(p+15);
   glVertex3fv(p+18);
   glVertex3fv(p+6);
   glEnd();
}

//______________________________________________________________________________
void TEveCalo3DGL::RenderBarrelCell(const TEveCaloData::CellGeom_t &cellData, Float_t towerH, Float_t& offset ) const
{
   // Render barrel cell.

   using namespace TMath;

   Float_t r1 = fM->GetBarrelRadius() + offset;
   Float_t r2 = r1 + towerH*Sin(cellData.ThetaMin());
   Float_t z1In, z1Out, z2In, z2Out;

   z1In  = r1/Tan(cellData.ThetaMax());
   z1Out = r2/Tan(cellData.ThetaMax());
   z2In  = r1/Tan(cellData.ThetaMin());
   z2Out = r2/Tan(cellData.ThetaMin());

   Float_t cos1 = Cos(cellData.PhiMin());
   Float_t sin1 = Sin(cellData.PhiMin());
   Float_t cos2 = Cos(cellData.PhiMax());
   Float_t sin2 = Sin(cellData.PhiMax());

   Float_t box[24];
   Float_t* pnts = box;
   // 0
   pnts[0] = r1*cos2;
   pnts[1] = r1*sin2;
   pnts[2] = z1In;
   pnts += 3;
   // 1
   pnts[0] = r1*cos1;
   pnts[1] = r1*sin1;
   pnts[2] = z1In;
   pnts += 3;
   // 2
   pnts[0] = r1*cos1;
   pnts[1] = r1*sin1;
   pnts[2] = z2In;
   pnts += 3;
   // 3
   pnts[0] = r1*cos2;
   pnts[1] = r1*sin2;
   pnts[2] = z2In;
   pnts += 3;
   //---------------------------------------------------
   // 4
   pnts[0] = r2*cos2;
   pnts[1] = r2*sin2;
   pnts[2] = z1Out;
   pnts += 3;
   // 5
   pnts[0] = r2*cos1;
   pnts[1] = r2*sin1;
   pnts[2] = z1Out;
   pnts += 3;
   // 6
   pnts[0] = r2*cos1;
   pnts[1] = r2*sin1;
   pnts[2] = z2Out;
   pnts += 3;
   // 7
   pnts[0] = r2*cos2;
   pnts[1] = r2*sin2;
   pnts[2] = z2Out;

   RenderBox(box);

   offset += towerH*Sin(cellData.ThetaMin());

}// end RenderBarrelCell

//______________________________________________________________________________
void TEveCalo3DGL::RenderEndCapCell(const TEveCaloData::CellGeom_t &cellData, Float_t towerH, Float_t& offset ) const
{
   // Render an endcap cell.

   using namespace TMath;
   Float_t z1, r1In, r1Out, z2, r2In, r2Out;

   z1    = (cellData.EtaMin()<0) ? fM->fEndCapPosB : fM->fEndCapPosF;
   z2    = z1 + TMath::Sign(towerH, cellData.EtaMin());

   r1In  = z1*Tan(cellData.ThetaMin());
   r2In  = z2*Tan(cellData.ThetaMin());
   r1Out = z1*Tan(cellData.ThetaMax());
   r2Out = z2*Tan(cellData.ThetaMax());

   Float_t cos2 = Cos(cellData.PhiMin());
   Float_t sin2 = Sin(cellData.PhiMin());
   Float_t cos1 = Cos(cellData.PhiMax());
   Float_t sin1 = Sin(cellData.PhiMax());

   Float_t box[24];
   Float_t* pnts = box;
   // 0
   pnts[0] = r1In*cos1;
   pnts[1] = r1In*sin1;
   pnts[2] = z1;
   pnts += 3;
   // 1
   pnts[0] = r1In*cos2;
   pnts[1] = r1In*sin2;
   pnts[2] = z1;
   pnts += 3;
   // 2
   pnts[0] = r2In*cos2;
   pnts[1] = r2In*sin2;
   pnts[2] = z2;
   pnts += 3;
   // 3
   pnts[0] = r2In*cos1;
   pnts[1] = r2In*sin1;
   pnts[2] = z2;
   pnts += 3;
   //---------------------------------------------------
   // 4
   pnts[0] = r1Out*cos1;
   pnts[1] = r1Out*sin1;
   pnts[2] = z1;
   pnts += 3;
   // 5
   pnts[0] = r1Out*cos2;
   pnts[1] = r1Out*sin2;
   pnts[2] = z1;
   pnts += 3;
   // 6
   pnts[0] = r2Out*cos2;
   pnts[1] = r2Out*sin2;
   pnts[2] = z2;
   pnts += 3;
   // 7
   pnts[0] = r2Out*cos1;
   pnts[1] = r2Out*sin1;
   pnts[2] = z2;

   RenderBox(box);

   if (z1 > 0)
      offset += towerH * Cos(cellData.ThetaMin());
   else
      offset -= towerH * Cos(cellData.ThetaMin());

} // end RenderEndCapCell


//______________________________________________________________________________
void TEveCalo3DGL::DirectDraw(TGLRnrCtx &rnrCtx) const
{
   // GL rendering.

   if ( fM->GetValueIsColor())  fM->AssertPalette();

   // check if eta phi range has changed
   if (fM->fCellIdCacheOK == kFALSE)
      fM->BuildCellIdCache();

   glPushAttrib(GL_ENABLE_BIT | GL_LINE_BIT | GL_POLYGON_BIT);
   glEnable(GL_LIGHTING);
   glEnable(GL_NORMALIZE);
   glEnable(GL_BLEND);
   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

   TEveCaloData::CellData_t cellData;
   Float_t towerH = 0;
   Int_t   tower = 0;
   Int_t   prevTower = -1;
   Float_t offset = 0;
   Int_t cellID = 0;

   if (rnrCtx.SecSelection()) glPushName(0);

   fOffset.assign(fM->fCellList.size(), 0);
   for (TEveCaloData::vCellId_i i = fM->fCellList.begin(); i != fM->fCellList.end(); ++i)
   {
      fM->fData->GetCellData((*i), cellData);
      tower = i->fTower;
      if (tower != prevTower)
      {
         offset = 0;
         prevTower = tower;
      }
      fOffset[cellID] = offset;
      fM->SetupColorHeight(cellData.Value(fM->fPlotEt), (*i).fSlice, towerH);

      if (rnrCtx.SecSelection()) glLoadName(cellID);

      if ((cellData.Eta() > 0 && cellData.Eta() < fM->GetTransitionEtaForward()) ||
          (cellData.Eta() < 0 && cellData.Eta() > fM->GetTransitionEtaBackward()))
      {
         RenderBarrelCell(cellData, towerH, offset);
      }
      else
      {
         RenderEndCapCell(cellData, towerH, offset);
      }
      ++cellID;
   }

   if (rnrCtx.SecSelection()) glPopName();

   RenderGrid(rnrCtx);

   glPopAttrib();
}

//______________________________________________________________________________
void TEveCalo3DGL::DrawHighlight(TGLRnrCtx & rnrCtx, const TGLPhysicalShape* /*pshp*/, Int_t /*lvl*/) const
{
   // Draw polygons in highlight mode.

   if (fM->fData->GetCellsSelected().empty() && fM->fData->GetCellsHighlighted().empty())
   {
      return;
   }

   glPushAttrib(GL_ENABLE_BIT | GL_LINE_BIT | GL_POLYGON_BIT);
   glDisable(GL_LIGHTING);
   glDisable(GL_CULL_FACE);
   glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

   TGLUtil::LineWidth(2);
   TGLUtil::LockColor();

   if (!fM->fData->GetCellsHighlighted().empty())
   {
      glColor4ubv(rnrCtx.ColorSet().Selection(3).CArr());
      DrawSelectedCells(fM->fData->GetCellsHighlighted());
   }
   if (!fM->fData->GetCellsSelected().empty())
   {
      Float_t dr[2];
      glGetFloatv(GL_DEPTH_RANGE,dr);
      glColor4ubv(rnrCtx.ColorSet().Selection(1).CArr());
      glDepthRange(dr[0], 0.8*dr[1]);
      DrawSelectedCells(fM->fData->GetCellsSelected());
      glDepthRange(dr[0], dr[1]);
   }

   TGLUtil::UnlockColor();
   glPopAttrib();
}

//______________________________________________________________________________
void TEveCalo3DGL::DrawSelectedCells(TEveCaloData::vCellId_t cells) const
{
   TEveCaloData::CellData_t cellData;
   Float_t towerH = 0;

   for (TEveCaloData::vCellId_i i = cells.begin(); i != cells.end(); i++)
   {
      fM->fData->GetCellData(*i, cellData);
      fM->SetupColorHeight(cellData.Value(fM->fPlotEt), (*i).fSlice, towerH);

      // find tower with offsets
      Float_t offset = 0;
      for (Int_t j = 0; j < (Int_t) fM->fCellList.size(); ++j)
      {
         if (fM->fCellList[j].fTower == i->fTower && fM->fCellList[j].fSlice == i->fSlice )
         {
            offset = fOffset[j];
            break;
         }
      }

      if (fM->CellInEtaPhiRng(cellData))
      {
         if (cellData.Eta() < fM->GetTransitionEtaForward() && cellData.Eta() > fM->GetTransitionEtaBackward())
            RenderBarrelCell(cellData, towerH, offset);
         else
            RenderEndCapCell(cellData, towerH, offset);
      }
   }
}

//______________________________________________________________________________
void TEveCalo3DGL::ProcessSelection(TGLRnrCtx& /*rnrCtx*/, TGLSelectRecord& rec)
{
   // Processes tower selection.
   // Virtual function from TGLogicalShape. Called from TGLViewer.

   TEveCaloData::vCellId_t sel;
   if (rec.GetN() > 1)
   {
      sel.push_back(fM->fCellList[rec.GetItem(1)]);
   }
   fM->fData->ProcessSelection(sel, rec);
}
 TEveCalo3DGL.cxx:1
 TEveCalo3DGL.cxx:2
 TEveCalo3DGL.cxx:3
 TEveCalo3DGL.cxx:4
 TEveCalo3DGL.cxx:5
 TEveCalo3DGL.cxx:6
 TEveCalo3DGL.cxx:7
 TEveCalo3DGL.cxx:8
 TEveCalo3DGL.cxx:9
 TEveCalo3DGL.cxx:10
 TEveCalo3DGL.cxx:11
 TEveCalo3DGL.cxx:12
 TEveCalo3DGL.cxx:13
 TEveCalo3DGL.cxx:14
 TEveCalo3DGL.cxx:15
 TEveCalo3DGL.cxx:16
 TEveCalo3DGL.cxx:17
 TEveCalo3DGL.cxx:18
 TEveCalo3DGL.cxx:19
 TEveCalo3DGL.cxx:20
 TEveCalo3DGL.cxx:21
 TEveCalo3DGL.cxx:22
 TEveCalo3DGL.cxx:23
 TEveCalo3DGL.cxx:24
 TEveCalo3DGL.cxx:25
 TEveCalo3DGL.cxx:26
 TEveCalo3DGL.cxx:27
 TEveCalo3DGL.cxx:28
 TEveCalo3DGL.cxx:29
 TEveCalo3DGL.cxx:30
 TEveCalo3DGL.cxx:31
 TEveCalo3DGL.cxx:32
 TEveCalo3DGL.cxx:33
 TEveCalo3DGL.cxx:34
 TEveCalo3DGL.cxx:35
 TEveCalo3DGL.cxx:36
 TEveCalo3DGL.cxx:37
 TEveCalo3DGL.cxx:38
 TEveCalo3DGL.cxx:39
 TEveCalo3DGL.cxx:40
 TEveCalo3DGL.cxx:41
 TEveCalo3DGL.cxx:42
 TEveCalo3DGL.cxx:43
 TEveCalo3DGL.cxx:44
 TEveCalo3DGL.cxx:45
 TEveCalo3DGL.cxx:46
 TEveCalo3DGL.cxx:47
 TEveCalo3DGL.cxx:48
 TEveCalo3DGL.cxx:49
 TEveCalo3DGL.cxx:50
 TEveCalo3DGL.cxx:51
 TEveCalo3DGL.cxx:52
 TEveCalo3DGL.cxx:53
 TEveCalo3DGL.cxx:54
 TEveCalo3DGL.cxx:55
 TEveCalo3DGL.cxx:56
 TEveCalo3DGL.cxx:57
 TEveCalo3DGL.cxx:58
 TEveCalo3DGL.cxx:59
 TEveCalo3DGL.cxx:60
 TEveCalo3DGL.cxx:61
 TEveCalo3DGL.cxx:62
 TEveCalo3DGL.cxx:63
 TEveCalo3DGL.cxx:64
 TEveCalo3DGL.cxx:65
 TEveCalo3DGL.cxx:66
 TEveCalo3DGL.cxx:67
 TEveCalo3DGL.cxx:68
 TEveCalo3DGL.cxx:69
 TEveCalo3DGL.cxx:70
 TEveCalo3DGL.cxx:71
 TEveCalo3DGL.cxx:72
 TEveCalo3DGL.cxx:73
 TEveCalo3DGL.cxx:74
 TEveCalo3DGL.cxx:75
 TEveCalo3DGL.cxx:76
 TEveCalo3DGL.cxx:77
 TEveCalo3DGL.cxx:78
 TEveCalo3DGL.cxx:79
 TEveCalo3DGL.cxx:80
 TEveCalo3DGL.cxx:81
 TEveCalo3DGL.cxx:82
 TEveCalo3DGL.cxx:83
 TEveCalo3DGL.cxx:84
 TEveCalo3DGL.cxx:85
 TEveCalo3DGL.cxx:86
 TEveCalo3DGL.cxx:87
 TEveCalo3DGL.cxx:88
 TEveCalo3DGL.cxx:89
 TEveCalo3DGL.cxx:90
 TEveCalo3DGL.cxx:91
 TEveCalo3DGL.cxx:92
 TEveCalo3DGL.cxx:93
 TEveCalo3DGL.cxx:94
 TEveCalo3DGL.cxx:95
 TEveCalo3DGL.cxx:96
 TEveCalo3DGL.cxx:97
 TEveCalo3DGL.cxx:98
 TEveCalo3DGL.cxx:99
 TEveCalo3DGL.cxx:100
 TEveCalo3DGL.cxx:101
 TEveCalo3DGL.cxx:102
 TEveCalo3DGL.cxx:103
 TEveCalo3DGL.cxx:104
 TEveCalo3DGL.cxx:105
 TEveCalo3DGL.cxx:106
 TEveCalo3DGL.cxx:107
 TEveCalo3DGL.cxx:108
 TEveCalo3DGL.cxx:109
 TEveCalo3DGL.cxx:110
 TEveCalo3DGL.cxx:111
 TEveCalo3DGL.cxx:112
 TEveCalo3DGL.cxx:113
 TEveCalo3DGL.cxx:114
 TEveCalo3DGL.cxx:115
 TEveCalo3DGL.cxx:116
 TEveCalo3DGL.cxx:117
 TEveCalo3DGL.cxx:118
 TEveCalo3DGL.cxx:119
 TEveCalo3DGL.cxx:120
 TEveCalo3DGL.cxx:121
 TEveCalo3DGL.cxx:122
 TEveCalo3DGL.cxx:123
 TEveCalo3DGL.cxx:124
 TEveCalo3DGL.cxx:125
 TEveCalo3DGL.cxx:126
 TEveCalo3DGL.cxx:127
 TEveCalo3DGL.cxx:128
 TEveCalo3DGL.cxx:129
 TEveCalo3DGL.cxx:130
 TEveCalo3DGL.cxx:131
 TEveCalo3DGL.cxx:132
 TEveCalo3DGL.cxx:133
 TEveCalo3DGL.cxx:134
 TEveCalo3DGL.cxx:135
 TEveCalo3DGL.cxx:136
 TEveCalo3DGL.cxx:137
 TEveCalo3DGL.cxx:138
 TEveCalo3DGL.cxx:139
 TEveCalo3DGL.cxx:140
 TEveCalo3DGL.cxx:141
 TEveCalo3DGL.cxx:142
 TEveCalo3DGL.cxx:143
 TEveCalo3DGL.cxx:144
 TEveCalo3DGL.cxx:145
 TEveCalo3DGL.cxx:146
 TEveCalo3DGL.cxx:147
 TEveCalo3DGL.cxx:148
 TEveCalo3DGL.cxx:149
 TEveCalo3DGL.cxx:150
 TEveCalo3DGL.cxx:151
 TEveCalo3DGL.cxx:152
 TEveCalo3DGL.cxx:153
 TEveCalo3DGL.cxx:154
 TEveCalo3DGL.cxx:155
 TEveCalo3DGL.cxx:156
 TEveCalo3DGL.cxx:157
 TEveCalo3DGL.cxx:158
 TEveCalo3DGL.cxx:159
 TEveCalo3DGL.cxx:160
 TEveCalo3DGL.cxx:161
 TEveCalo3DGL.cxx:162
 TEveCalo3DGL.cxx:163
 TEveCalo3DGL.cxx:164
 TEveCalo3DGL.cxx:165
 TEveCalo3DGL.cxx:166
 TEveCalo3DGL.cxx:167
 TEveCalo3DGL.cxx:168
 TEveCalo3DGL.cxx:169
 TEveCalo3DGL.cxx:170
 TEveCalo3DGL.cxx:171
 TEveCalo3DGL.cxx:172
 TEveCalo3DGL.cxx:173
 TEveCalo3DGL.cxx:174
 TEveCalo3DGL.cxx:175
 TEveCalo3DGL.cxx:176
 TEveCalo3DGL.cxx:177
 TEveCalo3DGL.cxx:178
 TEveCalo3DGL.cxx:179
 TEveCalo3DGL.cxx:180
 TEveCalo3DGL.cxx:181
 TEveCalo3DGL.cxx:182
 TEveCalo3DGL.cxx:183
 TEveCalo3DGL.cxx:184
 TEveCalo3DGL.cxx:185
 TEveCalo3DGL.cxx:186
 TEveCalo3DGL.cxx:187
 TEveCalo3DGL.cxx:188
 TEveCalo3DGL.cxx:189
 TEveCalo3DGL.cxx:190
 TEveCalo3DGL.cxx:191
 TEveCalo3DGL.cxx:192
 TEveCalo3DGL.cxx:193
 TEveCalo3DGL.cxx:194
 TEveCalo3DGL.cxx:195
 TEveCalo3DGL.cxx:196
 TEveCalo3DGL.cxx:197
 TEveCalo3DGL.cxx:198
 TEveCalo3DGL.cxx:199
 TEveCalo3DGL.cxx:200
 TEveCalo3DGL.cxx:201
 TEveCalo3DGL.cxx:202
 TEveCalo3DGL.cxx:203
 TEveCalo3DGL.cxx:204
 TEveCalo3DGL.cxx:205
 TEveCalo3DGL.cxx:206
 TEveCalo3DGL.cxx:207
 TEveCalo3DGL.cxx:208
 TEveCalo3DGL.cxx:209
 TEveCalo3DGL.cxx:210
 TEveCalo3DGL.cxx:211
 TEveCalo3DGL.cxx:212
 TEveCalo3DGL.cxx:213
 TEveCalo3DGL.cxx:214
 TEveCalo3DGL.cxx:215
 TEveCalo3DGL.cxx:216
 TEveCalo3DGL.cxx:217
 TEveCalo3DGL.cxx:218
 TEveCalo3DGL.cxx:219
 TEveCalo3DGL.cxx:220
 TEveCalo3DGL.cxx:221
 TEveCalo3DGL.cxx:222
 TEveCalo3DGL.cxx:223
 TEveCalo3DGL.cxx:224
 TEveCalo3DGL.cxx:225
 TEveCalo3DGL.cxx:226
 TEveCalo3DGL.cxx:227
 TEveCalo3DGL.cxx:228
 TEveCalo3DGL.cxx:229
 TEveCalo3DGL.cxx:230
 TEveCalo3DGL.cxx:231
 TEveCalo3DGL.cxx:232
 TEveCalo3DGL.cxx:233
 TEveCalo3DGL.cxx:234
 TEveCalo3DGL.cxx:235
 TEveCalo3DGL.cxx:236
 TEveCalo3DGL.cxx:237
 TEveCalo3DGL.cxx:238
 TEveCalo3DGL.cxx:239
 TEveCalo3DGL.cxx:240
 TEveCalo3DGL.cxx:241
 TEveCalo3DGL.cxx:242
 TEveCalo3DGL.cxx:243
 TEveCalo3DGL.cxx:244
 TEveCalo3DGL.cxx:245
 TEveCalo3DGL.cxx:246
 TEveCalo3DGL.cxx:247
 TEveCalo3DGL.cxx:248
 TEveCalo3DGL.cxx:249
 TEveCalo3DGL.cxx:250
 TEveCalo3DGL.cxx:251
 TEveCalo3DGL.cxx:252
 TEveCalo3DGL.cxx:253
 TEveCalo3DGL.cxx:254
 TEveCalo3DGL.cxx:255
 TEveCalo3DGL.cxx:256
 TEveCalo3DGL.cxx:257
 TEveCalo3DGL.cxx:258
 TEveCalo3DGL.cxx:259
 TEveCalo3DGL.cxx:260
 TEveCalo3DGL.cxx:261
 TEveCalo3DGL.cxx:262
 TEveCalo3DGL.cxx:263
 TEveCalo3DGL.cxx:264
 TEveCalo3DGL.cxx:265
 TEveCalo3DGL.cxx:266
 TEveCalo3DGL.cxx:267
 TEveCalo3DGL.cxx:268
 TEveCalo3DGL.cxx:269
 TEveCalo3DGL.cxx:270
 TEveCalo3DGL.cxx:271
 TEveCalo3DGL.cxx:272
 TEveCalo3DGL.cxx:273
 TEveCalo3DGL.cxx:274
 TEveCalo3DGL.cxx:275
 TEveCalo3DGL.cxx:276
 TEveCalo3DGL.cxx:277
 TEveCalo3DGL.cxx:278
 TEveCalo3DGL.cxx:279
 TEveCalo3DGL.cxx:280
 TEveCalo3DGL.cxx:281
 TEveCalo3DGL.cxx:282
 TEveCalo3DGL.cxx:283
 TEveCalo3DGL.cxx:284
 TEveCalo3DGL.cxx:285
 TEveCalo3DGL.cxx:286
 TEveCalo3DGL.cxx:287
 TEveCalo3DGL.cxx:288
 TEveCalo3DGL.cxx:289
 TEveCalo3DGL.cxx:290
 TEveCalo3DGL.cxx:291
 TEveCalo3DGL.cxx:292
 TEveCalo3DGL.cxx:293
 TEveCalo3DGL.cxx:294
 TEveCalo3DGL.cxx:295
 TEveCalo3DGL.cxx:296
 TEveCalo3DGL.cxx:297
 TEveCalo3DGL.cxx:298
 TEveCalo3DGL.cxx:299
 TEveCalo3DGL.cxx:300
 TEveCalo3DGL.cxx:301
 TEveCalo3DGL.cxx:302
 TEveCalo3DGL.cxx:303
 TEveCalo3DGL.cxx:304
 TEveCalo3DGL.cxx:305
 TEveCalo3DGL.cxx:306
 TEveCalo3DGL.cxx:307
 TEveCalo3DGL.cxx:308
 TEveCalo3DGL.cxx:309
 TEveCalo3DGL.cxx:310
 TEveCalo3DGL.cxx:311
 TEveCalo3DGL.cxx:312
 TEveCalo3DGL.cxx:313
 TEveCalo3DGL.cxx:314
 TEveCalo3DGL.cxx:315
 TEveCalo3DGL.cxx:316
 TEveCalo3DGL.cxx:317
 TEveCalo3DGL.cxx:318
 TEveCalo3DGL.cxx:319
 TEveCalo3DGL.cxx:320
 TEveCalo3DGL.cxx:321
 TEveCalo3DGL.cxx:322
 TEveCalo3DGL.cxx:323
 TEveCalo3DGL.cxx:324
 TEveCalo3DGL.cxx:325
 TEveCalo3DGL.cxx:326
 TEveCalo3DGL.cxx:327
 TEveCalo3DGL.cxx:328
 TEveCalo3DGL.cxx:329
 TEveCalo3DGL.cxx:330
 TEveCalo3DGL.cxx:331
 TEveCalo3DGL.cxx:332
 TEveCalo3DGL.cxx:333
 TEveCalo3DGL.cxx:334
 TEveCalo3DGL.cxx:335
 TEveCalo3DGL.cxx:336
 TEveCalo3DGL.cxx:337
 TEveCalo3DGL.cxx:338
 TEveCalo3DGL.cxx:339
 TEveCalo3DGL.cxx:340
 TEveCalo3DGL.cxx:341
 TEveCalo3DGL.cxx:342
 TEveCalo3DGL.cxx:343
 TEveCalo3DGL.cxx:344
 TEveCalo3DGL.cxx:345
 TEveCalo3DGL.cxx:346
 TEveCalo3DGL.cxx:347
 TEveCalo3DGL.cxx:348
 TEveCalo3DGL.cxx:349
 TEveCalo3DGL.cxx:350
 TEveCalo3DGL.cxx:351
 TEveCalo3DGL.cxx:352
 TEveCalo3DGL.cxx:353
 TEveCalo3DGL.cxx:354
 TEveCalo3DGL.cxx:355
 TEveCalo3DGL.cxx:356
 TEveCalo3DGL.cxx:357
 TEveCalo3DGL.cxx:358
 TEveCalo3DGL.cxx:359
 TEveCalo3DGL.cxx:360
 TEveCalo3DGL.cxx:361
 TEveCalo3DGL.cxx:362
 TEveCalo3DGL.cxx:363
 TEveCalo3DGL.cxx:364
 TEveCalo3DGL.cxx:365
 TEveCalo3DGL.cxx:366
 TEveCalo3DGL.cxx:367
 TEveCalo3DGL.cxx:368
 TEveCalo3DGL.cxx:369
 TEveCalo3DGL.cxx:370
 TEveCalo3DGL.cxx:371
 TEveCalo3DGL.cxx:372
 TEveCalo3DGL.cxx:373
 TEveCalo3DGL.cxx:374
 TEveCalo3DGL.cxx:375
 TEveCalo3DGL.cxx:376
 TEveCalo3DGL.cxx:377
 TEveCalo3DGL.cxx:378
 TEveCalo3DGL.cxx:379
 TEveCalo3DGL.cxx:380
 TEveCalo3DGL.cxx:381
 TEveCalo3DGL.cxx:382
 TEveCalo3DGL.cxx:383
 TEveCalo3DGL.cxx:384
 TEveCalo3DGL.cxx:385
 TEveCalo3DGL.cxx:386
 TEveCalo3DGL.cxx:387
 TEveCalo3DGL.cxx:388
 TEveCalo3DGL.cxx:389
 TEveCalo3DGL.cxx:390
 TEveCalo3DGL.cxx:391
 TEveCalo3DGL.cxx:392
 TEveCalo3DGL.cxx:393
 TEveCalo3DGL.cxx:394
 TEveCalo3DGL.cxx:395
 TEveCalo3DGL.cxx:396
 TEveCalo3DGL.cxx:397
 TEveCalo3DGL.cxx:398
 TEveCalo3DGL.cxx:399
 TEveCalo3DGL.cxx:400
 TEveCalo3DGL.cxx:401
 TEveCalo3DGL.cxx:402
 TEveCalo3DGL.cxx:403
 TEveCalo3DGL.cxx:404
 TEveCalo3DGL.cxx:405
 TEveCalo3DGL.cxx:406
 TEveCalo3DGL.cxx:407
 TEveCalo3DGL.cxx:408
 TEveCalo3DGL.cxx:409
 TEveCalo3DGL.cxx:410
 TEveCalo3DGL.cxx:411
 TEveCalo3DGL.cxx:412
 TEveCalo3DGL.cxx:413
 TEveCalo3DGL.cxx:414
 TEveCalo3DGL.cxx:415
 TEveCalo3DGL.cxx:416
 TEveCalo3DGL.cxx:417
 TEveCalo3DGL.cxx:418
 TEveCalo3DGL.cxx:419
 TEveCalo3DGL.cxx:420
 TEveCalo3DGL.cxx:421
 TEveCalo3DGL.cxx:422
 TEveCalo3DGL.cxx:423
 TEveCalo3DGL.cxx:424
 TEveCalo3DGL.cxx:425
 TEveCalo3DGL.cxx:426
 TEveCalo3DGL.cxx:427
 TEveCalo3DGL.cxx:428
 TEveCalo3DGL.cxx:429
 TEveCalo3DGL.cxx:430
 TEveCalo3DGL.cxx:431
 TEveCalo3DGL.cxx:432
 TEveCalo3DGL.cxx:433
 TEveCalo3DGL.cxx:434
 TEveCalo3DGL.cxx:435
 TEveCalo3DGL.cxx:436
 TEveCalo3DGL.cxx:437
 TEveCalo3DGL.cxx:438
 TEveCalo3DGL.cxx:439
 TEveCalo3DGL.cxx:440
 TEveCalo3DGL.cxx:441
 TEveCalo3DGL.cxx:442
 TEveCalo3DGL.cxx:443
 TEveCalo3DGL.cxx:444
 TEveCalo3DGL.cxx:445
 TEveCalo3DGL.cxx:446
 TEveCalo3DGL.cxx:447
 TEveCalo3DGL.cxx:448
 TEveCalo3DGL.cxx:449
 TEveCalo3DGL.cxx:450
 TEveCalo3DGL.cxx:451
 TEveCalo3DGL.cxx:452
 TEveCalo3DGL.cxx:453
 TEveCalo3DGL.cxx:454
 TEveCalo3DGL.cxx:455
 TEveCalo3DGL.cxx:456
 TEveCalo3DGL.cxx:457
 TEveCalo3DGL.cxx:458
 TEveCalo3DGL.cxx:459
 TEveCalo3DGL.cxx:460
 TEveCalo3DGL.cxx:461
 TEveCalo3DGL.cxx:462
 TEveCalo3DGL.cxx:463
 TEveCalo3DGL.cxx:464
 TEveCalo3DGL.cxx:465
 TEveCalo3DGL.cxx:466
 TEveCalo3DGL.cxx:467
 TEveCalo3DGL.cxx:468
 TEveCalo3DGL.cxx:469
 TEveCalo3DGL.cxx:470
 TEveCalo3DGL.cxx:471
 TEveCalo3DGL.cxx:472
 TEveCalo3DGL.cxx:473
 TEveCalo3DGL.cxx:474
 TEveCalo3DGL.cxx:475
 TEveCalo3DGL.cxx:476
 TEveCalo3DGL.cxx:477
 TEveCalo3DGL.cxx:478
 TEveCalo3DGL.cxx:479
 TEveCalo3DGL.cxx:480
 TEveCalo3DGL.cxx:481
 TEveCalo3DGL.cxx:482
 TEveCalo3DGL.cxx:483
 TEveCalo3DGL.cxx:484
 TEveCalo3DGL.cxx:485
 TEveCalo3DGL.cxx:486
 TEveCalo3DGL.cxx:487
 TEveCalo3DGL.cxx:488
 TEveCalo3DGL.cxx:489
 TEveCalo3DGL.cxx:490
 TEveCalo3DGL.cxx:491
 TEveCalo3DGL.cxx:492
 TEveCalo3DGL.cxx:493
 TEveCalo3DGL.cxx:494
 TEveCalo3DGL.cxx:495
 TEveCalo3DGL.cxx:496
 TEveCalo3DGL.cxx:497
 TEveCalo3DGL.cxx:498
 TEveCalo3DGL.cxx:499
 TEveCalo3DGL.cxx:500
 TEveCalo3DGL.cxx:501
 TEveCalo3DGL.cxx:502
 TEveCalo3DGL.cxx:503
 TEveCalo3DGL.cxx:504
 TEveCalo3DGL.cxx:505
 TEveCalo3DGL.cxx:506
 TEveCalo3DGL.cxx:507
 TEveCalo3DGL.cxx:508
 TEveCalo3DGL.cxx:509
 TEveCalo3DGL.cxx:510
 TEveCalo3DGL.cxx:511
 TEveCalo3DGL.cxx:512
 TEveCalo3DGL.cxx:513
 TEveCalo3DGL.cxx:514
 TEveCalo3DGL.cxx:515
 TEveCalo3DGL.cxx:516
 TEveCalo3DGL.cxx:517
 TEveCalo3DGL.cxx:518
 TEveCalo3DGL.cxx:519
 TEveCalo3DGL.cxx:520
 TEveCalo3DGL.cxx:521
 TEveCalo3DGL.cxx:522
 TEveCalo3DGL.cxx:523
 TEveCalo3DGL.cxx:524
 TEveCalo3DGL.cxx:525
 TEveCalo3DGL.cxx:526
 TEveCalo3DGL.cxx:527
 TEveCalo3DGL.cxx:528
 TEveCalo3DGL.cxx:529
 TEveCalo3DGL.cxx:530
 TEveCalo3DGL.cxx:531
 TEveCalo3DGL.cxx:532
 TEveCalo3DGL.cxx:533
 TEveCalo3DGL.cxx:534
 TEveCalo3DGL.cxx:535
 TEveCalo3DGL.cxx:536
 TEveCalo3DGL.cxx:537
 TEveCalo3DGL.cxx:538
 TEveCalo3DGL.cxx:539
 TEveCalo3DGL.cxx:540
 TEveCalo3DGL.cxx:541
 TEveCalo3DGL.cxx:542
 TEveCalo3DGL.cxx:543
 TEveCalo3DGL.cxx:544
 TEveCalo3DGL.cxx:545
 TEveCalo3DGL.cxx:546
 TEveCalo3DGL.cxx:547
 TEveCalo3DGL.cxx:548
 TEveCalo3DGL.cxx:549
 TEveCalo3DGL.cxx:550
 TEveCalo3DGL.cxx:551
 TEveCalo3DGL.cxx:552
 TEveCalo3DGL.cxx:553
 TEveCalo3DGL.cxx:554
 TEveCalo3DGL.cxx:555
 TEveCalo3DGL.cxx:556
 TEveCalo3DGL.cxx:557
 TEveCalo3DGL.cxx:558
 TEveCalo3DGL.cxx:559
 TEveCalo3DGL.cxx:560
 TEveCalo3DGL.cxx:561
 TEveCalo3DGL.cxx:562
 TEveCalo3DGL.cxx:563
 TEveCalo3DGL.cxx:564
 TEveCalo3DGL.cxx:565
 TEveCalo3DGL.cxx:566
 TEveCalo3DGL.cxx:567
 TEveCalo3DGL.cxx:568
 TEveCalo3DGL.cxx:569
 TEveCalo3DGL.cxx:570
 TEveCalo3DGL.cxx:571
 TEveCalo3DGL.cxx:572
 TEveCalo3DGL.cxx:573
 TEveCalo3DGL.cxx:574
 TEveCalo3DGL.cxx:575
 TEveCalo3DGL.cxx:576
 TEveCalo3DGL.cxx:577
 TEveCalo3DGL.cxx:578
 TEveCalo3DGL.cxx:579
 TEveCalo3DGL.cxx:580
 TEveCalo3DGL.cxx:581
 TEveCalo3DGL.cxx:582
 TEveCalo3DGL.cxx:583
 TEveCalo3DGL.cxx:584
 TEveCalo3DGL.cxx:585
 TEveCalo3DGL.cxx:586
 TEveCalo3DGL.cxx:587
 TEveCalo3DGL.cxx:588
 TEveCalo3DGL.cxx:589
 TEveCalo3DGL.cxx:590
 TEveCalo3DGL.cxx:591
 TEveCalo3DGL.cxx:592
 TEveCalo3DGL.cxx:593
 TEveCalo3DGL.cxx:594
 TEveCalo3DGL.cxx:595
 TEveCalo3DGL.cxx:596
 TEveCalo3DGL.cxx:597
 TEveCalo3DGL.cxx:598
 TEveCalo3DGL.cxx:599
 TEveCalo3DGL.cxx:600
 TEveCalo3DGL.cxx:601
 TEveCalo3DGL.cxx:602
 TEveCalo3DGL.cxx:603
 TEveCalo3DGL.cxx:604
 TEveCalo3DGL.cxx:605
 TEveCalo3DGL.cxx:606
 TEveCalo3DGL.cxx:607
 TEveCalo3DGL.cxx:608
 TEveCalo3DGL.cxx:609
 TEveCalo3DGL.cxx:610
 TEveCalo3DGL.cxx:611
 TEveCalo3DGL.cxx:612
 TEveCalo3DGL.cxx:613
 TEveCalo3DGL.cxx:614
 TEveCalo3DGL.cxx:615
 TEveCalo3DGL.cxx:616
 TEveCalo3DGL.cxx:617
 TEveCalo3DGL.cxx:618
 TEveCalo3DGL.cxx:619
 TEveCalo3DGL.cxx:620
 TEveCalo3DGL.cxx:621
 TEveCalo3DGL.cxx:622
 TEveCalo3DGL.cxx:623
 TEveCalo3DGL.cxx:624
 TEveCalo3DGL.cxx:625
 TEveCalo3DGL.cxx:626
 TEveCalo3DGL.cxx:627
 TEveCalo3DGL.cxx:628
 TEveCalo3DGL.cxx:629
 TEveCalo3DGL.cxx:630
 TEveCalo3DGL.cxx:631
 TEveCalo3DGL.cxx:632
 TEveCalo3DGL.cxx:633
 TEveCalo3DGL.cxx:634
 TEveCalo3DGL.cxx:635
 TEveCalo3DGL.cxx:636
 TEveCalo3DGL.cxx:637
 TEveCalo3DGL.cxx:638
 TEveCalo3DGL.cxx:639
 TEveCalo3DGL.cxx:640
 TEveCalo3DGL.cxx:641
 TEveCalo3DGL.cxx:642
 TEveCalo3DGL.cxx:643
 TEveCalo3DGL.cxx:644
 TEveCalo3DGL.cxx:645
 TEveCalo3DGL.cxx:646
 TEveCalo3DGL.cxx:647
 TEveCalo3DGL.cxx:648
 TEveCalo3DGL.cxx:649
 TEveCalo3DGL.cxx:650
 TEveCalo3DGL.cxx:651
 TEveCalo3DGL.cxx:652
 TEveCalo3DGL.cxx:653
 TEveCalo3DGL.cxx:654
 TEveCalo3DGL.cxx:655
 TEveCalo3DGL.cxx:656
 TEveCalo3DGL.cxx:657
 TEveCalo3DGL.cxx:658
 TEveCalo3DGL.cxx:659
 TEveCalo3DGL.cxx:660
 TEveCalo3DGL.cxx:661
 TEveCalo3DGL.cxx:662
 TEveCalo3DGL.cxx:663
 TEveCalo3DGL.cxx:664
 TEveCalo3DGL.cxx:665
 TEveCalo3DGL.cxx:666
 TEveCalo3DGL.cxx:667
 TEveCalo3DGL.cxx:668
 TEveCalo3DGL.cxx:669
 TEveCalo3DGL.cxx:670
 TEveCalo3DGL.cxx:671
 TEveCalo3DGL.cxx:672
 TEveCalo3DGL.cxx:673
 TEveCalo3DGL.cxx:674
 TEveCalo3DGL.cxx:675
 TEveCalo3DGL.cxx:676
 TEveCalo3DGL.cxx:677
 TEveCalo3DGL.cxx:678
 TEveCalo3DGL.cxx:679
 TEveCalo3DGL.cxx:680