// @(#)root/eve:$Id$
// Author: Alja Mrak-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 "TAxis.h"
#include "TH2.h"
#include "THLimitsFinder.h"

#include "TGLViewer.h"
#include "TGLIncludes.h"
#include "TGLPhysicalShape.h"
#include "TGLRnrCtx.h"
#include "TGLSelectRecord.h"
#include "TGLScene.h"
#include "TGLCamera.h"
#include "TGLUtil.h"
#include "TColor.h"
#include "TROOT.h"


#include "TEveCaloLegoGL.h"
#include "TEveCalo.h"
#include "TEveManager.h"
#include "TEveRGBAPalette.h"

#include <algorithm>

//______________________________________________________________________________
// OpenGL renderer class for TEveCaloLego.
//

ClassImp(TEveCaloLegoGL);

//______________________________________________________________________________
TEveCaloLegoGL::TEveCaloLegoGL() :
   TGLObject(),

   fGridColor(-1),
   fFontColor(-1),

   fEtaAxis(0),
   fPhiAxis(0),
   fZAxis(0),
   fM(0),
   fDLCacheOK(kFALSE),
   fMaxVal(0),
   fValToPixel(0),
   fCurrentPixelsPerBin(0),
   fCells3D(kTRUE),
   fBinStep(-1)
{
   // Constructor.

   fDLCache = kFALSE;

   fEtaAxis = new TAxis();
   fPhiAxis = new TAxis();
   fZAxis   = new TAxis();

   fAxisPainter.SetFontMode(TGLFont::kPixmap);
}

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

   DLCachePurge();

   delete fEtaAxis;
   delete fPhiAxis;
   delete fZAxis;
}

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

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

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

   SetAxisAlignedBBox(((TEveCaloLego*)fExternalObj)->AssertBBox());
}

//______________________________________________________________________________
void TEveCaloLegoGL::DLCacheDrop()
{
   // Drop all display-list definitions.

   fDLCacheOK = kFALSE;
   for (SliceDLMap_i i = fDLMap.begin(); i != fDLMap.end(); ++i)
      i->second = 0;

   TGLObject::DLCacheDrop();
}

//______________________________________________________________________________
void TEveCaloLegoGL::DLCachePurge()
{
   // Unregister all display-lists.

   // all lego cells
   fDLCacheOK = kFALSE;
   if (! fDLMap.empty()) {
      for (SliceDLMap_i i = fDLMap.begin(); i != fDLMap.end(); ++i) {
         if (i->second) {
            PurgeDLRange(i->second, 1);
            i->second = 0;
         }
      }
   }
   TGLObject::DLCachePurge();
}

//______________________________________________________________________________
void TEveCaloLegoGL::MakeQuad(Float_t x1, Float_t y1, Float_t z1,
      Float_t xw, Float_t yw, Float_t h) const
{
   // Draw an axis-aligned box using quads.

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

   Float_t x2 = x1 + xw;
   Float_t y2 = y1 + yw;
   Float_t z2 = z1 + h;

   if (x1 < fM->GetEtaMin()) x1 = fM->GetEtaMin();
   if (x2 > fM->GetEtaMax()) x2 = fM->GetEtaMax();

   if (y1 < fM->GetPhiMin()) y1 = fM->GetPhiMin();
   if (y2 > fM->GetPhiMax()) y2 = fM->GetPhiMax();

   glBegin(GL_QUADS);
   {
      // bottom 0123
      glNormal3f(0, 0, -1);
      glVertex3f(x2, y2, z1);
      glVertex3f(x2, y1, z1);
      glVertex3f(x1, y1, z1);
      glVertex3f(x1, y2, z1);
      // top 4765
      glNormal3f(0, 0, 1);
      glVertex3f(x2, y2, z2);
      glVertex3f(x1, y2, z2);
      glVertex3f(x1, y1, z2);
      glVertex3f(x2, y1, z2);

      // back 0451
      glNormal3f(1, 0, 0);
      glVertex3f(x2, y2, z1);
      glVertex3f(x2, y2, z2);
      glVertex3f(x2, y1, z2);
      glVertex3f(x2, y1, z1);
      // front 3267
      glNormal3f(-1, 0, 0);
      glVertex3f(x1, y2, z1);
      glVertex3f(x1, y1, z1);
      glVertex3f(x1, y1, z2);
      glVertex3f(x1, y2, z2);

      // left  0374
      glNormal3f(0, 1, 0);
      glVertex3f(x2, y2, z1);
      glVertex3f(x1, y2, z1);
      glVertex3f(x1, y2, z2);
      glVertex3f(x2, y2, z2);
      // right 1562
      glNormal3f(0, -1, 0);
      glVertex3f(x2, y1, z1);
      glVertex3f(x2, y1, z2);
      glVertex3f(x1, y1, z2);
      glVertex3f(x1, y1, z1);
   }
   glEnd();
}

//______________________________________________________________________________
void TEveCaloLegoGL::Make3DDisplayList(TEveCaloData::vCellId_t& cellList, SliceDLMap_t& dlMap, Bool_t selection) const
{
   // Create display-list that draws histogram bars for non-rebinned data.
   // It is used for filled and outline passes.

   TEveCaloData::CellData_t cellData;
   Int_t   prevTower = 0;
   Float_t offset = 0;

   // ids in eta phi rng
   Int_t nSlices = fM->fData->GetNSlices();
   for (Int_t s = 0; s < nSlices; ++s)
   {
      if (dlMap.empty() || dlMap[s] == 0)
         dlMap[s] = glGenLists(1);

      glNewList(dlMap[s], GL_COMPILE);

      for (UInt_t i = 0; i < cellList.size(); ++i)
      {
         if (cellList[i].fSlice > s) continue;
         if (cellList[i].fTower != prevTower) {
            offset = 0;
            prevTower = cellList[i].fTower;
         }

         fM->fData->GetCellData(cellList[i], cellData);
         if (s == cellList[i].fSlice)
         {
            if (selection) glLoadName(i);

            WrapTwoPi(cellData.fPhiMin, cellData.fPhiMax);
            MakeQuad(cellData.EtaMin(), cellData.PhiMin(), offset,
                     cellData.EtaDelta(), cellData.PhiDelta(), cellData.Value(fM->fPlotEt));
         }
         offset += cellData.Value(fM->fPlotEt);
      }
      glEndList();
   }
}

//______________________________________________________________________________
void TEveCaloLegoGL::Make3DDisplayListRebin(TEveCaloData::RebinData_t& rebinData, SliceDLMap_t& dlMap, Bool_t selection) const
{
   // Create display-list that draws histogram bars for rebinned data.
   // It is used for filled and outline passes.

   Int_t nSlices = fM->fData->GetNSlices();
   Float_t *vals;
   Float_t offset;
   Float_t y0, y1;

   for (Int_t s = 0; s < nSlices; ++s)
   {
      if (dlMap.empty() || dlMap[s] == 0)
         dlMap[s] = glGenLists(1);

      glNewList(dlMap[s], GL_COMPILE);

      for (Int_t i = 1; i <= fEtaAxis->GetNbins(); ++i)
      {
         for (Int_t j = 1; j <= fPhiAxis->GetNbins(); ++j)
         {
            const Int_t bin = (i)+(j)*(fEtaAxis->GetNbins()+2);

            if (rebinData.fBinData[bin] !=-1)
            {
               vals = rebinData.GetSliceVals(bin);
               offset =0;
               for (Int_t t = 0; t < s; ++t)
                  offset += vals[t];

               y0 = fPhiAxis->GetBinLowEdge(j);
               y1 = fPhiAxis->GetBinUpEdge(j);
               WrapTwoPi(y0, y1);

               if (selection) glLoadName(bin);

               MakeQuad(fEtaAxis->GetBinLowEdge(i), y0, offset,
                        fEtaAxis->GetBinWidth(i), y1-y0, vals[s]);
            }
         }
      }
      glEndList();
   }
}

//______________________________________________________________________________
void TEveCaloLegoGL::SetAxis3DTitlePos(TGLRnrCtx &rnrCtx, Float_t x0, Float_t x1, Float_t y0, Float_t y1) const
{
   const GLdouble *pm = rnrCtx.RefCamera().RefLastNoPickProjM().CArr();
   GLdouble mm[16];
   GLint    vp[4];
   glGetDoublev(GL_MODELVIEW_MATRIX,  mm);
   glGetIntegerv(GL_VIEWPORT, vp);
   GLdouble projX[4], projY[4], projZ[4];

   GLdouble cornerX[4];
   GLdouble cornerY[4];
   cornerX[0] = x0; cornerY[0] = y0;
   cornerX[1] = x1; cornerY[1] = y0;
   cornerX[2] = x1; cornerY[2] = y1;
   cornerX[3] = x0; cornerY[3] = y1;

   gluProject(cornerX[0], cornerY[0], 0, mm, pm, vp, &projX[0], &projY[0], &projZ[0]);
   gluProject(cornerX[1], cornerY[1], 0, mm, pm, vp, &projX[1], &projY[1], &projZ[1]);
   gluProject(cornerX[2], cornerY[2], 0, mm, pm, vp, &projX[2], &projY[2], &projZ[2]);
   gluProject(cornerX[3], cornerY[3], 0, mm, pm, vp, &projX[3], &projY[3], &projZ[3]);


   // Z axis location (left most corner)
   //
   Int_t idxLeft = 0;
   Float_t xt = projX[0];
   for (Int_t i = 1; i < 4; ++i) {
      if (projX[i] < xt) {
         xt  = projX[i];
         idxLeft = i;
      }
   }
   fZAxisTitlePos.Set(cornerX[idxLeft], cornerY[idxLeft], 1.05 * fMaxVal);


   // XY axis location (closest to eye) first
   //
   Float_t zt = 1.f;
   Float_t zMin = 0.f;
   Int_t idxFront = 0;
   for (Int_t i = 0; i < 4; ++i) {
      if (projZ[i] < zt) {
         zt  = projZ[i];
         idxFront = i;
      }
      if (projZ[i] > zMin) zMin = projZ[i];
   }


   Int_t xyIdx = idxFront;
   if (zMin - zt < 1e-2) xyIdx = 0; // avoid flipping in front view


   switch (xyIdx) {
      case 0:
         fXAxisTitlePos.fX = x1;
         fXAxisTitlePos.fY = y0;
         fYAxisTitlePos.fX = x0;
         fYAxisTitlePos.fY = y1;
         break;
      case 1:
         fXAxisTitlePos.fX = x0;
         fXAxisTitlePos.fY = y0;
         fYAxisTitlePos.fX = x1;
         fYAxisTitlePos.fY = y1;
         break;
      case 2:
         fXAxisTitlePos.fX = x0;
         fXAxisTitlePos.fY = y1;
         fYAxisTitlePos.fX = x1;
         fYAxisTitlePos.fY = y0;
         break;
      case 3:
         fXAxisTitlePos.fX = x1;
         fXAxisTitlePos.fY = y1;
         fYAxisTitlePos.fX = x0;
         fYAxisTitlePos.fY = y0;
         break;
   }

   // move title 5% over the axis length
   Float_t off = 0.05;
   Float_t tOffX = (x1-x0) * off; if (fYAxisTitlePos.fX > x0) tOffX = -tOffX;
   Float_t tOffY = (y1-y0) * off; if (fXAxisTitlePos.fY > y0) tOffY = -tOffY;
   fXAxisTitlePos.fX += tOffX;
   fYAxisTitlePos.fY += tOffY;


   // frame box
   //
   if (fM->fBoxMode)
   {
      // get corner closest to eye excluding left corner
      Double_t zm = 1.f;
      Int_t idxDepthT = 0;
      for (Int_t i = 0; i < 4; ++i)
      {
         if (projZ[i] < zm && projZ[i] >= zt && i != idxFront )
         {
            zm  = projZ[i];
            idxDepthT = i;
         }
      }
      if (idxFront == idxLeft)  idxFront =idxDepthT;

      switch (idxFront)
      {
         case 0:
            fBackPlaneXConst[0].Set(x1, y0, 0); fBackPlaneXConst[1].Set(x1, y1, 0);
            fBackPlaneYConst[0].Set(x0, y1, 0); fBackPlaneYConst[1].Set(x1, y1, 0);
            break;
         case 1:
            fBackPlaneXConst[0].Set(x0, y0, 0); fBackPlaneXConst[1].Set(x0, y1, 0);
            fBackPlaneYConst[0].Set(x0, y1, 0); fBackPlaneYConst[1].Set(x1, y1, 0);
            break;
         case 2:
            fBackPlaneXConst[0].Set(x0, y0, 0); fBackPlaneXConst[1].Set(x0, y1, 0);
            fBackPlaneYConst[0].Set(x0, y0, 0); fBackPlaneYConst[1].Set(x1, y0, 0);
            break;
         case 3:
            fBackPlaneXConst[0].Set(x1, y0, 0); fBackPlaneXConst[1].Set(x1, y1, 0);
            fBackPlaneYConst[0].Set(x0, y0, 0); fBackPlaneYConst[1].Set(x1, y0, 0);
            break;
      }
   }
}

//______________________________________________________________________________
void TEveCaloLegoGL::DrawAxis3D(TGLRnrCtx & rnrCtx) const
{
   // Draw z-axis and z-box at the appropriate grid corner-point including
   // tick-marks and labels.

   // set font size first depending on size of projected axis

   TGLMatrix mm;
   GLdouble pm[16];
   glGetDoublev(GL_MODELVIEW_MATRIX, mm.Arr());
   glGetDoublev(GL_PROJECTION_MATRIX, pm);
   Int_t* vp = rnrCtx.RefCamera().RefViewport().CArr();
   GLdouble dn[3];
   GLdouble up[3];
   gluProject(fXAxisTitlePos.fX, fXAxisTitlePos.fY, fXAxisTitlePos.fZ, mm.Arr(), pm, vp, &up[0], &up[1], &up[2]);
   gluProject(fYAxisTitlePos.fX, fYAxisTitlePos.fY, fYAxisTitlePos.fZ, mm.Arr(), pm, vp, &dn[0], &dn[1], &dn[2]);
   Float_t len = TMath::Sqrt((up[0] - dn[0]) * (up[0] - dn[0])
                              + (up[1] - dn[1]) * (up[1] - dn[1])
                              + (up[2] - dn[2]) * (up[2] - dn[2]));
   len = TMath::Min(len, rnrCtx.RefCamera().RefViewport().Diagonal()*0.7f);
   len /= TMath::Sqrt2();

   TGLVertex3 worldRef(fZAxisTitlePos.fX, fZAxisTitlePos.fY, fZAxisTitlePos.fZ);
   fAxisPainter.RefTMOff(0) = rnrCtx.RefCamera().ViewportDeltaToWorld(worldRef, -len, 0,  &mm);
   fAxisPainter.SetLabelPixelFontSize(TMath::Nint(TMath::Max(len*fM->GetData()->GetEtaBins()->GetLabelSize(), 0.02f)));
   fAxisPainter.SetTitlePixelFontSize(TMath::Nint(TMath::Max(len*fM->GetData()->GetEtaBins()->GetLabelSize(), 0.02f)));

   Float_t tickLength = TMath::Max(fM->GetData()->GetEtaBins()->GetTickLength(), 0.02f);
   Float_t labelOffset = TMath::Max(fM->GetData()->GetEtaBins()->GetLabelOffset(), 0.02f);

   // Z axis
   //
   if (fM->fData->Empty() == kFALSE)
   {
      Int_t    ondiv;
      Double_t omin=0, omax=0, bw1;
      THLimitsFinder::Optimize(0, fMaxVal, fM->fNZSteps, omin, omax, ondiv, bw1);
      worldRef.Set(fZAxisTitlePos.fX, fZAxisTitlePos.fY, fZAxisTitlePos.fZ);
      TGLVector3 zto = rnrCtx.RefCamera().ViewportDeltaToWorld(worldRef, 0, fAxisPainter.GetLabelPixelFontSize(),  &mm);
      // check z axis title does not overalp with label
      if ( fZAxisTitlePos.fZ - omax <   fAxisPainter.GetLabelPixelFontSize())
         fZAxisTitlePos.fZ = omax + zto.Z();


      fZAxis->SetAxisColor(fGridColor);
      fZAxis->SetLabelColor(fFontColor);
      fZAxis->SetTitleColor(fFontColor);
      fZAxis->SetNdivisions(fM->fNZSteps*100 + 10);
      fZAxis->SetLimits(0, fMaxVal);
      fZAxis->SetTitle(fM->GetPlotEt() ? "Et[GeV]" : "E[GeV]");

      fAxisPainter.SetTMNDim(1);
      fAxisPainter.RefDir().Set(0., 0., 1.);
      fAxisPainter.SetLabelAlign(TGLFont::kRight, TGLFont::kCenterV);
      glPushMatrix();
      glTranslatef(fZAxisTitlePos.fX, fZAxisTitlePos.fY, 0);

      // tickmark vector = 10 pixels left
      fAxisPainter.RefTitlePos().Set(fAxisPainter.RefTMOff(0).X()*0.05,  fAxisPainter.RefTMOff(0).Y()*0.05, fZAxisTitlePos.fZ);
      fZAxis->SetLabelOffset(labelOffset);
      fZAxis->SetTickLength(tickLength);
      fAxisPainter.PaintAxis(rnrCtx, fZAxis);
      glPopMatrix();

      // draw box frame
      //
      if (fM->fBoxMode) {

         glPushAttrib(GL_ENABLE_BIT | GL_LINE_BIT);

         // box verticals
         TGLUtil::LineWidth(1);
         glBegin(GL_LINES);
         TGLUtil::Color(fGridColor);

         glVertex3f(fBackPlaneXConst[0].fX   ,fBackPlaneXConst[0].fY   ,0);
         glVertex3f(fBackPlaneXConst[0].fX   ,fBackPlaneXConst[0].fY   ,fMaxVal);
         glVertex3f(fBackPlaneXConst[1].fX   ,fBackPlaneXConst[1].fY   ,0);
         glVertex3f(fBackPlaneXConst[1].fX   ,fBackPlaneXConst[1].fY   ,fMaxVal);


         glVertex3f(fBackPlaneYConst[0].fX   ,fBackPlaneYConst[0].fY   ,0);
         glVertex3f(fBackPlaneYConst[0].fX   ,fBackPlaneYConst[0].fY   ,fMaxVal);
         glVertex3f(fBackPlaneYConst[1].fX   ,fBackPlaneYConst[1].fY   ,0);
         glVertex3f(fBackPlaneYConst[1].fX   ,fBackPlaneYConst[1].fY   ,fMaxVal);

         // box top
         glVertex3f(fBackPlaneXConst[0].fX   ,fBackPlaneXConst[0].fY   ,fMaxVal);
         glVertex3f(fBackPlaneXConst[1].fX   ,fBackPlaneXConst[1].fY   ,fMaxVal);
         glVertex3f(fBackPlaneYConst[0].fX   ,fBackPlaneYConst[0].fY   ,fMaxVal);
         glVertex3f(fBackPlaneYConst[1].fX   ,fBackPlaneYConst[1].fY   ,fMaxVal);

         glEnd();

         // box horizontals stippled
         glEnable(GL_LINE_STIPPLE);
         glLineStipple(1, 0x5555);
         glBegin(GL_LINES);
         Float_t hz  = bw1;
         for (Int_t i = 1; i <= ondiv; ++i, hz += bw1) {
            glVertex3f(fBackPlaneXConst[0].fX   ,fBackPlaneXConst[0].fY   ,hz);
            glVertex3f(fBackPlaneXConst[1].fX   ,fBackPlaneXConst[1].fY   ,hz);
            glVertex3f(fBackPlaneYConst[0].fX   ,fBackPlaneYConst[0].fY   ,hz);
            glVertex3f(fBackPlaneYConst[1].fX   ,fBackPlaneYConst[1].fY   ,hz);
         }
         glEnd();

         glPopAttrib();
      }
   }

   // XY Axis
   //

   Float_t yOff  = fM->GetPhiRng();
   if (fXAxisTitlePos.fY < fM->GetPhiMax()) yOff = -yOff;

   Float_t xOff  = fM->GetEtaRng();
   if (fYAxisTitlePos.fX < fM->GetEtaMax()) xOff = -xOff;

   TAxis ax;
   ax.SetAxisColor(fGridColor);
   ax.SetLabelColor(fFontColor);
   ax.SetTitleColor(fFontColor);
   ax.SetTitleFont(fM->GetData()->GetEtaBins()->GetTitleFont());
   ax.SetLabelOffset(labelOffset);
   ax.SetTickLength(tickLength);
   fAxisPainter.SetTMNDim(2);
   fAxisPainter.RefTMOff(1).Set(0, 0, -fMaxVal);
   fAxisPainter.SetLabelAlign(TGLFont::kCenterH, TGLFont::kBottom);

   // eta
   glPushMatrix();
   fAxisPainter.RefDir().Set(1, 0, 0);
   fAxisPainter.RefTMOff(0).Set(0, yOff, 0);
   glTranslatef(0, fXAxisTitlePos.fY, 0);

   ax.SetNdivisions(fM->GetData()->GetEtaBins()->GetNdivisions());
   ax.SetLimits(fM->GetEtaMin(), fM->GetEtaMax());
   ax.SetTitle(fM->GetData()->GetEtaBins()->GetTitle());
   fAxisPainter.RefTitlePos().Set(fXAxisTitlePos.fX, yOff*1.5*ax.GetTickLength(), -fMaxVal*ax.GetTickLength());
   fAxisPainter.PaintAxis(rnrCtx, &ax);
   glPopMatrix();

   // phi
   fAxisPainter.RefDir().Set(0, 1, 0);
   fAxisPainter.RefTMOff(0).Set(xOff, 0, 0);
   ax.SetNdivisions(fM->GetData()->GetPhiBins()->GetNdivisions());
   ax.SetLimits(fM->GetPhiMin(), fM->GetPhiMax());
   ax.SetTitle(fM->GetData()->GetPhiBins()->GetTitle());
   glPushMatrix();
   glTranslatef(fYAxisTitlePos.fX, 0, 0);
   fAxisPainter.RefTitlePos().Set( xOff*1.5*ax.GetTickLength(), fYAxisTitlePos.fY,  -fMaxVal*ax.GetTickLength());
   fAxisPainter.PaintAxis(rnrCtx, &ax);
   glPopMatrix();

} // DrawAxis3D

//______________________________________________________________________________
void  TEveCaloLegoGL::GetScaleForMatrix(Float_t& sx, Float_t& sy, Float_t& sz) const
{
   Double_t em, eM, pm, pM;
   fM->fData->GetEtaLimits(em, eM);
   fM->fData->GetPhiLimits(pm, pM);
   Double_t unit = ((eM - em) < (pM - pm)) ? (eM - em) : (pM - pm);
   sx = (eM - em) / (fM->GetEtaRng() * unit);
   sy = (pM - pm) / (fM->GetPhiRng() * unit);

   sz = 1;
   if (fM->fScaleAbs)
   {
      sz = fM->GetMaxTowerH() / fM->fMaxValAbs;
   }
   else if (!fM->fData->Empty())
   {
      sz = fM->GetMaxTowerH() / fMaxVal;
   }
}

//______________________________________________________________________________
void TEveCaloLegoGL::DrawAxis2D(TGLRnrCtx & rnrCtx) const
{
   // Draw XY axis.

   if (fM->GetData()->Empty())
      fAxisPainter.SetTMNDim(1);

   TGLCamera& cam  = rnrCtx.RefCamera();

   TAxis ax;
   ax.SetAxisColor(fGridColor);
   ax.SetLabelColor(fFontColor);
   ax.SetTitleColor(fFontColor);
   ax.SetTitleFont(fM->GetData()->GetEtaBins()->GetTitleFont());
   ax.SetTitleSize(TMath::Max(fM->GetData()->GetEtaBins()->GetTitleSize(), 0.02f));
   ax.SetLabelOffset(TMath::Max(fM->GetData()->GetEtaBins()->GetLabelOffset(), 0.02f));
   ax.SetTickLength(TMath::Max(fM->GetData()->GetEtaBins()->GetTickLength(), 0.05f));

   // set fonts
   fAxisPainter.SetAttAxis(&ax);

   // get projected length of diagonal to determine
   TGLMatrix mm;
   GLdouble pm[16];
   GLint    vp[4];
   glGetDoublev(GL_MODELVIEW_MATRIX, mm.Arr());
   glGetDoublev(GL_PROJECTION_MATRIX, pm);
   glGetIntegerv(GL_VIEWPORT, vp);

   GLdouble dn[3];
   GLdouble up[3];
   gluProject(fM->GetEtaMin(), fM->GetPhiMin(), 0, mm.Arr(), pm, vp, &dn[0], &dn[1], &dn[2]);
   gluProject(fM->GetEtaMax(), fM->GetPhiMax(), 0, mm.Arr(), pm, vp, &up[0], &up[1], &up[2]);
   Double_t len = TMath::Sqrt((up[0] - dn[0]) * (up[0] - dn[0])
                              + (up[1] - dn[1]) * (up[1] - dn[1])
                              + (up[2] - dn[2]) * (up[2] - dn[2]));

   // lock upper limit to of relative font size relative to viewport diagonal
   Double_t vpLimit = cam.RefViewport().Diagonal()*0.5/TMath::Sqrt2();
   len = TMath::Min(len, vpLimit);

   // eta
   fAxisPainter.SetLabelPixelFontSize(TMath::Nint(len*fM->GetData()->GetEtaBins()->GetLabelSize()));
   fAxisPainter.SetTitlePixelFontSize(TMath::Nint(len*fM->GetData()->GetEtaBins()->GetTitleSize()));
   ax.SetNdivisions(fM->GetData()->GetEtaBins()->GetNdivisions());
   ax.SetLimits(fM->GetEtaMin(), fM->GetEtaMax());
   ax.SetTitle(fM->GetData()->GetEtaBins()->GetTitle());
   fAxisPainter.RefTitlePos().Set(fM->GetEtaMax(), -fM->GetPhiRng()*(ax.GetTickLength()+ ax.GetLabelOffset()), 0 );
   fAxisPainter.RefDir().Set(1, 0, 0);

   Float_t tmOffFrustX = cam.FrustumPlane(TGLCamera::kRight).D() + cam.FrustumPlane(TGLCamera::kLeft).D();
   fAxisPainter.RefTMOff(0).Set(0,  -TMath::Min(fM->GetPhiRng(), tmOffFrustX), 0);
   fAxisPainter.SetLabelAlign(TGLFont::kCenterH, TGLFont::kBottom);

   glPushMatrix();
   glTranslatef(0, fM->GetPhiMin(), 0);
   fAxisPainter.PaintAxis(rnrCtx, &ax);
   glPopMatrix();

   // phi
   ax.SetNdivisions(fM->GetData()->GetPhiBins()->GetNdivisions());
   ax.SetLimits(fM->GetPhiMin(), fM->GetPhiMax());
   ax.SetTitle(fM->GetData()->GetPhiBins()->GetTitle());
   fAxisPainter.RefTitlePos().Set(-fM->GetEtaRng()*(ax.GetTickLength()+ ax.GetLabelOffset()), fM->GetPhiMax(), 0);
   fAxisPainter.RefDir().Set(0, 1, 0);
   Float_t tmOffFrustY = cam.FrustumPlane(TGLCamera::kTop).D() + cam.FrustumPlane(TGLCamera::kBottom).D();
   fAxisPainter.RefTMOff(0).Set(-TMath::Min(fM->GetEtaRng(), tmOffFrustY), 0, 0);
   fAxisPainter.SetLabelAlign(TGLFont::kRight, TGLFont::kCenterV);

   glPushMatrix();
   glTranslatef(fM->GetEtaMin(), 0, 0);
   fAxisPainter.PaintAxis(rnrCtx, &ax);
   glPopMatrix();

   fAxisPainter.SetTMNDim(2);
}

//______________________________________________________________________________
Int_t TEveCaloLegoGL::GetGridStep(TGLRnrCtx &rnrCtx) const
{
   // Calculate view-dependent grid density.

   TGLCamera &camera = rnrCtx.RefCamera();
   Float_t l = -camera.FrustumPlane(TGLCamera::kLeft).D();
   Float_t r =  camera.FrustumPlane(TGLCamera::kRight).D();
   Float_t t =  camera.FrustumPlane(TGLCamera::kTop).D();
   Float_t b = -camera.FrustumPlane(TGLCamera::kBottom).D();
   Float_t frustD    = TMath::Hypot(r-l, t-b);

   GLint   vp[4]; glGetIntegerv(GL_VIEWPORT, vp);
   Float_t viewportD = TMath::Sqrt((vp[1] - vp[0]) * (vp[1] - vp[0]) + (vp[3] - vp[1]) * (vp[3] - vp[1]));
   Float_t deltaToViewport = viewportD/frustD;

   // average bin width
   GLdouble em, eM, pm, pM;
   fM->GetData()->GetEtaLimits(pm, pM);
   fM->GetData()->GetPhiLimits(em, eM);
   Int_t i0 = fM->fData->GetEtaBins()->FindBin(fM->GetEtaMin());
   Int_t i1 = fM->fData->GetEtaBins()->FindBin(fM->GetEtaMax());
   Int_t j0 = fM->fData->GetPhiBins()->FindBin(fM->GetPhiMin());
   Int_t j1 = fM->fData->GetPhiBins()->FindBin(fM->GetPhiMax());

   Float_t averageBinWidth = TMath::Hypot(eM - em, pM - pm)/TMath::Sqrt((i0 - i1) * (i0 - i1) + (j0 - j1) * (j0 - j1));
   Float_t ppb = deltaToViewport*averageBinWidth;

   Int_t ngroup = 1;
   if (fM->fAutoRebin && fM->fPixelsPerBin > ppb)
   {
      // limit rebin realtive to number of axis bins
      Int_t maxGroup = TMath::Min(fM->fData->GetEtaBins()->GetNbins(), fM->fData->GetPhiBins()->GetNbins())/4;
      if (maxGroup > 1) {
         ngroup = TMath::Nint(fM->fPixelsPerBin*0.5/ppb); // symetrical rebin factor 2
         if (ngroup  > maxGroup) ngroup = maxGroup;
      }
   }
   fCurrentPixelsPerBin = TMath::Nint(ppb);

   return ngroup;
}

//___________________________________________________________________________
void TEveCaloLegoGL::RebinAxis(TAxis *orig, TAxis *curr) const
{
   // Rebin eta, phi axis.

   Double_t center = 0.5 * (orig->GetXmin() + orig->GetXmax());
   Int_t    idx0   = orig->FindBin(center);
   Double_t bc     = orig->GetBinCenter(idx0);
   if (bc > center) --idx0;

   Int_t nbR = TMath::FloorNint(idx0/fBinStep) + TMath::FloorNint((orig->GetNbins() - idx0)/fBinStep);
   Int_t off = idx0 - TMath::FloorNint(idx0/fBinStep)*fBinStep;
   std::vector<Double_t> bins(nbR + 1);
   for (Int_t i = 0; i <= nbR; ++i)
   {
      bins[i] = orig->GetBinUpEdge(off + i*fBinStep);
   }
   curr->Set(nbR, &bins[0]);
}

//______________________________________________________________________________
void TEveCaloLegoGL::DrawHistBase(TGLRnrCtx &rnrCtx) const
{
   // Draw basic histogram components: x-y grid

   Float_t eta0 = fM->fEtaMin;
   Float_t eta1 = fM->fEtaMax;
   Float_t phi0 = fM->GetPhiMin();
   Float_t phi1 = fM->GetPhiMax();

   // XY grid
   //
   TGLUtil::Color(fGridColor);
   TGLUtil::LineWidth(1);
   glBegin(GL_LINES);
   glVertex2f(eta0, phi0);
   glVertex2f(eta0, phi1);
   glVertex2f(eta1, phi0);
   glVertex2f(eta1, phi1);

   glVertex2f(eta0, phi0);
   glVertex2f(eta1, phi0);
   glVertex2f(eta0, phi1);
   glVertex2f(eta1, phi1);

   // eta grid
   Float_t val;
   Int_t neb = fEtaAxis->GetNbins();
   for (Int_t i = 0; i<= neb; i++)
   {
      val = fEtaAxis->GetBinUpEdge(i);
      if (val > eta0 && val < eta1 )
      {
         glVertex2f(val, phi0);
         glVertex2f(val, phi1);
      }
   }

   // phi grid
   Int_t npb = fPhiAxis->GetNbins();
   for (Int_t i = 1; i <= npb; i++) {
       val = fPhiAxis->GetBinUpEdge(i);
      if (val > phi0 && val < phi1)
      {
         glVertex2f(eta0, val);
         glVertex2f(eta1, val);
      }
   }

   glEnd();

   // XYZ axes
   //
   glPushAttrib(GL_ENABLE_BIT | GL_LINE_BIT | GL_POLYGON_BIT);
   TGLUtil::LineWidth(2);
   if (fCells3D)
   {
      SetAxis3DTitlePos(rnrCtx, eta0, eta1, phi0, phi1);
      DrawAxis3D(rnrCtx);
   }
   else
   {
      DrawAxis2D(rnrCtx);
   }
   glPopAttrib();
}

//______________________________________________________________________________
void TEveCaloLegoGL::DrawCells3D(TGLRnrCtx & rnrCtx) const
{
   // Render the calo lego-plot with OpenGL.

   // quads
   {
      for (SliceDLMap_i i = fDLMap.begin(); i != fDLMap.end(); ++i) {
         TGLUtil::ColorTransparency(fM->GetDataSliceColor(i->first), fM->GetData()->GetSliceTransparency(i->first));
         glLoadName(i->first);
         glPushName(0);
         glCallList(i->second);
         glPopName();
      }
   }
   // outlines
   {
      if (rnrCtx.SceneStyle() == TGLRnrCtx::kFill) {
         glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
         glDisable(GL_POLYGON_OFFSET_FILL);
         TGLUtil::Color(1);
         for (SliceDLMap_i i = fDLMap.begin(); i != fDLMap.end(); ++i)
            glCallList(i->second);
      }
   }
}

//______________________________________________________________________________
void TEveCaloLegoGL::PrepareCell2DData(TEveCaloData::vCellId_t& cellList, vCell2D_t& cells2D) const
{
   // Prepare cells 2D data non-rebinned for drawing.

   Int_t   max_energy_slice, cellID=0;
   Float_t sum, max_energy;

   TEveCaloData::vCellId_t::iterator currentCell = cellList.begin();
   TEveCaloData::vCellId_t::iterator nextCell    = currentCell;
   ++nextCell;

   while (true)
   {
      TEveCaloData::CellData_t currentCellData;
      TEveCaloData::CellData_t nextCellData;

      fM->fData->GetCellData(*currentCell, currentCellData);
      sum = max_energy = currentCellData.Value(fM->fPlotEt);
      max_energy_slice = currentCell->fSlice;
      while (nextCell != cellList.end() && currentCell->fTower == nextCell->fTower)
      {
         fM->fData->GetCellData(*nextCell, nextCellData);
         Float_t energy = nextCellData.Value(fM->fPlotEt);
         sum += energy;
         if (energy > max_energy)
         {
            max_energy       = energy;
            max_energy_slice = nextCell->fSlice;
         }
         ++nextCell;
         ++cellID;
      }

      WrapTwoPi(currentCellData.fPhiMin, currentCellData.fPhiMax);
      cells2D.push_back(Cell2D_t(cellID, sum, max_energy_slice));
      cells2D.back().SetGeom(currentCellData.fEtaMin, currentCellData.fEtaMax,
                             currentCellData.fPhiMin, currentCellData.fPhiMax);

      if (nextCell == cellList.end())
         break;

      currentCell = nextCell;
      ++nextCell;
      ++cellID;
   }
}

//______________________________________________________________________________
void TEveCaloLegoGL::PrepareCell2DDataRebin(TEveCaloData::RebinData_t& rebinData, vCell2D_t& cells2D) const
{
   // Prepare cells 2D rebinned data for drawing.

   const Int_t nEta = fEtaAxis->GetNbins();
   const Int_t nPhi = fPhiAxis->GetNbins();
   std::vector<Float_t> vec;
   vec.assign((nEta + 2)*(nPhi + 2), 0.f);
   std::vector<Float_t> max_e;
   std::vector<Int_t>   max_e_slice;
   max_e.assign((nEta + 2) * (nPhi + 2), 0.f);
   max_e_slice.assign((nEta + 2) * (nPhi + 2), -1);

   for (UInt_t bin = 0; bin < rebinData.fBinData.size(); ++bin) {
      Float_t ssum = 0;
      if (rebinData.fBinData[bin] != -1) {
         Float_t *val = rebinData.GetSliceVals(bin);
         for (Int_t s = 0; s < rebinData.fNSlices; ++s) {
            ssum += val[s];
            if (val[s] > max_e[bin]) {
               max_e[bin]       = val[s];
               max_e_slice[bin] = s;
            }
         }
      }
      vec[bin] = ssum;
   }

   // smallest threshold
   Float_t threshold = fM->GetDataSliceThreshold(0);
   for (Int_t s = 1; s < fM->fData->GetNSlices(); ++s) {
      if (threshold > fM->GetDataSliceThreshold(s))
         threshold = fM->GetDataSliceThreshold(s);
   }

   // write cells
   for (Int_t i = 1; i <= fEtaAxis->GetNbins(); ++i) {
      for (Int_t j = 1; j <= fPhiAxis->GetNbins(); ++j) {
         const Int_t bin = j * (nEta + 2) + i;
         if (vec[bin] > threshold && rebinData.fBinData[bin] != -1) {
            cells2D.push_back(Cell2D_t(bin, vec[bin], max_e_slice[bin]));
            cells2D.back().SetGeom(fEtaAxis->GetBinLowEdge(i), fEtaAxis->GetBinUpEdge(i),
                                   fPhiAxis->GetBinLowEdge(j), fPhiAxis->GetBinUpEdge(j));
         }
      }
   }
}

//--------------------------------------------------------------------------------
void TEveCaloLegoGL::DrawCells2D(TGLRnrCtx &rnrCtx, vCell2D_t& cells2D) const
{
   // Draw cells in top view.

   Float_t bws    = -1; //smallest bin
   Float_t logMax = -1;

   Float_t baseOffset = fM->GetFixedHeightValIn2DMode()*fMaxVal;

   if (fM->f2DMode == TEveCaloLego::kValColor)
   {
      fM->AssertPalette();
      UChar_t col[4];

      for (vCell2D_i i = cells2D.begin(); i != cells2D.end(); ++i)
      {
         if (rnrCtx.SecSelection()) glLoadName(i->fId);
         glBegin(GL_POLYGON);
         fM->fPalette->ColorFromValue(TMath::FloorNint(i->fSumVal), col);
         col[3] = fM->GetData()->GetSliceTransparency(i->fMaxSlice);
         TGLUtil::Color4ubv(col);
         Float_t z = fM->GetHasFixedHeightIn2DMode() ? baseOffset : i->fSumVal;
         glVertex3f(i->fX0, i->fY0, z);
         glVertex3f(i->fX1, i->fY0, z);
         glVertex3f(i->fX1, i->fY1, z);
         glVertex3f(i->fX0, i->fY1, z);
         glEnd();
      }
   }
   else
   {
      Float_t maxv = 0;
      bws = 1e5;
      for (vCell2D_i i = fCells2D.begin(); i != fCells2D.end(); ++i)
      {
         if (i->MinSize() < bws)   bws  = i->MinSize();
         if (i->fSumVal   > maxv)  maxv = i->fSumVal;
      }
      bws   *= 0.5f;
      logMax = TMath::Log10(maxv + 1);
      fValToPixel = bws / logMax;

      if (rnrCtx.SecSelection())
      {
         // Special draw for name stack.

         for (vCell2D_i i = cells2D.begin(); i != cells2D.end(); ++i)
         {
            glLoadName(i->fMaxSlice);
            glPushName(i->fId);

            glBegin(GL_QUADS);
            Float_t z = fM->GetHasFixedHeightIn2DMode() ? baseOffset : i->fSumVal;
            glVertex3f(i->fX0, i->fY0, z);
            glVertex3f(i->fX1, i->fY0, z);
            glVertex3f(i->fX1, i->fY1, z);
            glVertex3f(i->fX0, i->fY1, z);
            glEnd();

            glPopName();
         }
      }
      else
      {
         // Optimised draw without name stack.

         if ( ! rnrCtx.Highlight())
         {
            glBegin(GL_POINTS);
            for (vCell2D_i i = cells2D.begin(); i != cells2D.end(); ++i)
            {
               TGLUtil::ColorTransparency(fM->fData->GetSliceColor(i->fMaxSlice), fM->fData->GetSliceTransparency(i->fMaxSlice));
               Float_t z = fM->GetHasFixedHeightIn2DMode() ? baseOffset : i->fSumVal;
               glVertex3f(i->X(), i->Y() , z);
            }
            glEnd();
         }

         glBegin(GL_QUADS);
         for (vCell2D_i i = cells2D.begin(); i != cells2D.end(); ++i)
         {
            TGLUtil::ColorTransparency(fM->fData->GetSliceColor(i->fMaxSlice), fM->fData->GetSliceTransparency(i->fMaxSlice));
            Float_t bw = fValToPixel*TMath::Log10(i->fSumVal+1);
            Float_t x = i->X();
            Float_t y = i->Y();
            Float_t z = fM->GetHasFixedHeightIn2DMode() ? baseOffset : i->fSumVal;
            glVertex3f(x - bw, y - bw, z);
            glVertex3f(x + bw, y - bw, z);
            glVertex3f(x + bw, y + bw, z);
            glVertex3f(x - bw, y + bw, z);
         }
         glEnd();

         if (fM->f2DMode == TEveCaloLego::kValSizeOutline)
         {
            glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT);
            Float_t z    = 0;
            Float_t zOff = fMaxVal*0.001 ; // avoid polygon stipling
            glBegin(GL_QUADS);
            for ( vCell2D_i i = cells2D.begin(); i != cells2D.end(); ++i) {
               Char_t transp = TMath::Min(100, 80 + fM->fData->GetSliceTransparency(i->fMaxSlice) / 5);
               TGLUtil::ColorTransparency(fM->fData->GetSliceColor(i->fMaxSlice), transp);
               z = fM->GetHasFixedHeightIn2DMode() ? baseOffset : i->fSumVal;
               z -=  zOff;
               glVertex3f(i->fX0, i->fY0, z);
               glVertex3f(i->fX1, i->fY0, z);
               glVertex3f(i->fX1, i->fY1, z);
               glVertex3f(i->fX0, i->fY1, z);
            }
            glEnd();

            glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
            glBegin(GL_QUADS);
            for ( vCell2D_i i = cells2D.begin(); i != cells2D.end(); ++i) {
               TGLUtil::ColorTransparency(fM->fData->GetSliceColor(i->fMaxSlice), 60);
               z = fM->GetHasFixedHeightIn2DMode() ? baseOffset : i->fSumVal;
               z +=  zOff;
               glVertex3f(i->fX0, i->fY0, z);
               glVertex3f(i->fX1, i->fY0, z);
               glVertex3f(i->fX1, i->fY1, z);
               glVertex3f(i->fX0, i->fY1, z);
            }
            glEnd();
            glPopAttrib();
         }
      }
   }

   // text
   if (fCurrentPixelsPerBin > fM->fDrawNumberCellPixels &&
       ! rnrCtx.Selection() && ! rnrCtx.Highlight())
   {
      TGLUtil::Color(rnrCtx.ColorSet().Markup().GetColorIndex());
      TGLFont font;
      rnrCtx.RegisterFontNoScale(fM->fCellPixelFontSize, "arial", TGLFont::kPixmap, font);
      const char* txt;
      for (vCell2D_i i = cells2D.begin(); i != cells2D.end(); ++i) {

         Float_t val = i->fSumVal;
         if (val > 10)
            txt = Form("%d", TMath::Nint(val));
         else if (val > 1 )
            txt = Form("%.1f", val);
         else if (val > 0.01 )
            txt = Form("%.2f", 0.01*TMath::Nint(val*100));
         else
            txt = Form("~1e%d", TMath::Nint(TMath::Log10(val)));

         font.Render(txt, i->X(), i->Y(), val*1.2, TGLFont::kCenterH, TGLFont::kCenterV);
      }
   }
}

//______________________________________________________________________________
void TEveCaloLegoGL::DrawHighlight(TGLRnrCtx& rnrCtx, const TGLPhysicalShape* /*pshp*/, Int_t /*lvl*/) const
{
   // Draw highligted cells.

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

   // modelview matrix
   glPushMatrix();
   Float_t sx, sy, sz;
   GetScaleForMatrix(sx, sy, sz);
   glScalef(sx, sy, sz);
   glTranslatef(-fM->GetEta(), -fM->fPhi, 0);

   if (fCells3D)
   {
      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(rnrCtx, fM->fData->GetCellsHighlighted());
   }
   if (!fM->fData->GetCellsSelected().empty())
   {
      glColor4ubv(rnrCtx.ColorSet().Selection(1).CArr());
      DrawSelectedCells(rnrCtx, fM->fData->GetCellsSelected());
   }
   TGLUtil::UnlockColor();

   if (fCells3D)
   {
      glPopAttrib();
   }

   glPopMatrix();
}


//______________________________________________________________________________
void TEveCaloLegoGL::DrawSelectedCells(TGLRnrCtx & rnrCtx, TEveCaloData::vCellId_t cellsSelectedInput) const
{
   // Draw selected cells in highlight mode.

   // check eta&phi range of selected cells
   TEveCaloData::vCellId_t  cellsSelected;
   TEveCaloData::CellData_t cellData;
   for (TEveCaloData::vCellId_i i = cellsSelectedInput.begin(); i != cellsSelectedInput.end(); ++i)
   {
      fM->fData->GetCellData((*i), cellData);
      if (fM->CellInEtaPhiRng(cellData))
         cellsSelected.push_back(*i);
   }

   // prepare rebin for 2D or 3D if necessary
   TEveCaloData::RebinData_t rebinDataSelected;
   if (fBinStep > 1)
   {
      fM->fData->Rebin(fEtaAxis, fPhiAxis, cellsSelected, fM->fPlotEt, rebinDataSelected);
      if (fM->fNormalizeRebin) {
         Float_t scale = 1.f / (fBinStep * fBinStep);
         for (std::vector<Float_t>::iterator it = rebinDataSelected.fSliceData.begin(); it != rebinDataSelected.fSliceData.end(); it++)
            (*it) *= scale;
      }
   }

   if (fCells3D)
   {
      Float_t offset =  0;
      if (fBinStep == 1)
      {
         for (TEveCaloData::vCellId_i j = cellsSelected.begin(); j != cellsSelected.end(); ++j)
         {
            offset = 0;
            {
               Int_t   orig_slice = j->fSlice;
               for (Int_t s = 0; s < orig_slice; ++s)
               {
                  j->fSlice = s;
                  fM->fData->GetCellData(*j, cellData);
                  offset += cellData.Value(fM->fPlotEt);
               }
               j->fSlice = orig_slice;
            }
            fM->fData->GetCellData(*j, cellData);
            WrapTwoPi(cellData.fPhiMin, cellData.fPhiMax);
            MakeQuad(cellData.EtaMin(), cellData.PhiMin(), offset,
                     cellData.EtaDelta(), cellData.PhiDelta(), cellData.Value(fM->fPlotEt));
         }
      }
      else
      {
         Float_t *vals;
         Float_t *valsRef;
         Float_t  y0, y1;
         Int_t    nSlices = fM->fData->GetNSlices();
         for (Int_t i = 1; i <= fEtaAxis->GetNbins(); ++i)
         {
            for (Int_t j = 1; j <= fPhiAxis->GetNbins(); ++j)
            {
               const Int_t bin = (i)+(j)*(fEtaAxis->GetNbins()+2);
               if (rebinDataSelected.fBinData[bin] !=-1)
               {
                  offset  = 0;
                  vals    = rebinDataSelected.GetSliceVals(bin);
                  valsRef = fRebinData.GetSliceVals(bin);
                  for (Int_t s = 0; s < nSlices; ++s)
                  {
                     if (vals[s] > 0)
                     {
                        y0 = fPhiAxis->GetBinLowEdge(j);
                        y1 = fPhiAxis->GetBinUpEdge(j);
                        WrapTwoPi(y0, y1);
                        MakeQuad(fEtaAxis->GetBinLowEdge(i), y0, offset,
                                 fEtaAxis->GetBinWidth(i), y1-y0, vals[s]);
                     }
                     offset += valsRef[s];
                  }
               }
            }
         }
      }
   }
   else
   {
      vCell2D_t cells2DSelected;
      if (fBinStep == 1)
      {
         // but is confusing since top view does not draw all slices at same time
         TEveCaloData::vCellId_i j    = cellsSelectedInput.begin();
         TEveCaloData::vCellId_i jEnd = cellsSelectedInput.end();
         std::set<Int_t> towers;
         while (j != jEnd)
         {
            towers.insert(j->fTower);
            ++j;
         }
         for (vCell2D_i i = fCells2D.begin(); i != fCells2D.end(); ++i)
         {
            TEveCaloData::CellId_t cell = fM->fCellList[i->fId];
            // std::set<Int_t>::iterator ti = towers.find(cell.fTower);
            if (towers.find(cell.fTower) != towers.end())
            {
               cells2DSelected.push_back(*i);
            }
         }
      }
      else
      {
         PrepareCell2DDataRebin(rebinDataSelected, cells2DSelected);
      }
      DrawCells2D(rnrCtx, cells2DSelected);
   }
}

//______________________________________________________________________________
void TEveCaloLegoGL::DirectDraw(TGLRnrCtx & rnrCtx) const
{
   // Draw the object.

   if (! fM->fData || ! fM->fData->GetEtaBins() || ! fM->fData->GetPhiBins())
      return;

   // projection type
   if (fM->fProjection == TEveCaloLego::kAuto)
      fCells3D = (!(rnrCtx.RefCamera().IsOrthographic() && rnrCtx.RefCamera().GetCamBase().GetBaseVec(1).Z()));
   else if (fM->fProjection == TEveCaloLego::k2D)
      fCells3D = kFALSE;
   else if (fM->fProjection == TEveCaloLego::k3D)
      fCells3D = kTRUE;

   // rebin axsis , check limits, fix TwoPi cycling
   Int_t new_bin_step = GetGridStep(rnrCtx);

   // rebin data
   if (fM->AssertCellIdCache() || fBinStep != new_bin_step)
   {
      fBinStep = new_bin_step;
      fDLCacheOK   = kFALSE;
      fRebinData.Clear();

      RebinAxis(fM->fData->GetEtaBins(), fEtaAxis);
      RebinAxis(fM->fData->GetPhiBins(), fPhiAxis);

      if (fBinStep > 1)
      {
         fM->fData->Rebin(fEtaAxis, fPhiAxis, fM->fCellList, fM->fPlotEt, fRebinData);

         fMaxVal = 0;
         for (UInt_t i = 0; i < fRebinData.fSliceData.size(); i += fRebinData.fNSlices)
         {
            Double_t sum = 0;
            for (Int_t s = 0; s < fRebinData.fNSlices; s++)
            {
               sum += fRebinData.fSliceData[i+s];
            }
            if (sum > fMaxVal) fMaxVal = sum;
         }

         if (fM->fNormalizeRebin)
         {
            Float_t scale = 1.f / (fBinStep * fBinStep);
            for (std::vector<Float_t>::iterator it = fRebinData.fSliceData.begin(); it != fRebinData.fSliceData.end(); it++)
            {
               (*it) *= scale;
            }
            fMaxVal *= scale;
         }
      }
      else
      {
         fMaxVal = fM->GetMaxVal();
      }
   }

   // modelview matrix
   glPushMatrix();
   Float_t sx, sy, sz;
   GetScaleForMatrix(sx, sy, sz);
   glScalef(sx, sy, sz);
   glTranslatef(-fM->GetEta(), -fM->fPhi, 0);

   fFontColor = fM->fFontColor;
   fGridColor = fM->fGridColor;
   if (fGridColor < 0 || fFontColor < 0)
   {
      TColor* c1 = gROOT->GetColor(rnrCtx.ColorSet().Markup().GetColorIndex());
      TColor* c2 = gROOT->GetColor(rnrCtx.ColorSet().Background().GetColorIndex());
      Float_t f1, f2;
      if (fFontColor < 0) {
         f1 = 0.8; f2 = 0.2;
         fFontColor = TColor::GetColor(c1->GetRed()  *f1  + c2->GetRed()  *f2,
                                       c1->GetGreen()*f1  + c2->GetGreen()*f2,
                                       c1->GetBlue() *f1  + c2->GetBlue() *f2);
      }
      if (fGridColor < 0) {
         f1 = 0.3; f2 = 0.3;
         fGridColor = TColor::GetColor(c1->GetRed()  *f1  + c2->GetRed()  *f2,
                                       c1->GetGreen()*f1  + c2->GetGreen()*f2,
                                       c1->GetBlue() *f1  + c2->GetBlue() *f2);
      }
   }

   glPushAttrib(GL_ENABLE_BIT | GL_LINE_BIT | GL_POLYGON_BIT);
   TGLUtil::LineWidth(1);
   glEnable(GL_BLEND);
   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
   if (!fM->fData->Empty())
   {
      glPushName(0);
      if (fCells3D)
      {
         if (fDLCacheOK == kFALSE)
         {
            if (fBinStep == 1)
               Make3DDisplayList(fM->fCellList, fDLMap, kTRUE);
            else
               Make3DDisplayListRebin(fRebinData, fDLMap, kTRUE);
            fDLCacheOK = kTRUE;
         }
         glEnable(GL_NORMALIZE);
         glEnable(GL_POLYGON_OFFSET_FILL);
         glPolygonOffset(0.8, 1);

         DrawCells3D(rnrCtx);
      }
      else
      {
         glDisable(GL_LIGHTING);

         fCells2D.clear();
         if (fBinStep == 1)
            PrepareCell2DData(fM->fCellList, fCells2D);
         else
            PrepareCell2DDataRebin(fRebinData, fCells2D);

         DrawCells2D(rnrCtx, fCells2D);
      }
      glPopName();
   }
   glPopAttrib();

   // draw histogram base
   if (rnrCtx.Selection() == kFALSE && rnrCtx.IsDrawPassFilled())
   {
      glPushAttrib(GL_ENABLE_BIT | GL_LINE_BIT | GL_POLYGON_BIT);
      glDisable(GL_LIGHTING);
      DrawHistBase(rnrCtx);
      if (fM->fDrawHPlane) {
         glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
         glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
         glDisable(GL_CULL_FACE);
         TGLUtil::ColorTransparency(fM->fPlaneColor, fM->fPlaneTransparency);
         Float_t zhp = fM->fHPlaneVal * fMaxVal;
         glBegin(GL_POLYGON);
         glVertex3f(fM->fEtaMin, fM->GetPhiMin(), zhp);
         glVertex3f(fM->fEtaMax, fM->GetPhiMin(), zhp);
         glVertex3f(fM->fEtaMax, fM->GetPhiMax(), zhp);
         glVertex3f(fM->fEtaMin, fM->GetPhiMax(), zhp);
         glEnd();
      }
      glPopAttrib();
   }

   glPopMatrix();
}

//______________________________________________________________________________
void TEveCaloLegoGL::ProcessSelection(TGLRnrCtx & /*rnrCtx*/, TGLSelectRecord & rec)
{
   // Processes tower selection from TGLViewer.

   TEveCaloData::vCellId_t sel;
   if (rec.GetN() > 2)
   {
      Int_t slice = rec.GetItem(1);
      Int_t cell  = rec.GetItem(2);

      if (fBinStep == 1)
      {
         Int_t tower = fM->fCellList[cell].fTower;
         while (cell > 0 && tower == fM->fCellList[cell].fTower)
         {
            sel.push_back(fM->fCellList[cell]);
            if (fCells3D) break;
            --cell;
         }
      }
      else
      {
         if (cell > 0)
         {
            Int_t nEta   = fEtaAxis->GetNbins();
            Int_t phiBin = Int_t(cell/(nEta+2));
            Int_t etaBin = cell - phiBin*(nEta+2);
            TEveCaloData::vCellId_t sl;
            fM->fData->GetCellList(fEtaAxis->GetBinCenter(etaBin), fEtaAxis->GetBinWidth(etaBin),
                                   fPhiAxis->GetBinCenter(phiBin), fPhiAxis->GetBinWidth(phiBin),
                                   sl);

            for (TEveCaloData::vCellId_i it = sl.begin(); it != sl.end(); ++it)
            {
               if (fCells3D) {
                  if ((*it).fSlice == slice ) sel.push_back(*it);
               } else {
                  if ((*it).fSlice <= slice ) sel.push_back(*it);
               }
            }
         }
      }
   }
   fM->fData->ProcessSelection(sel, rec);
}
 TEveCaloLegoGL.cxx:1
 TEveCaloLegoGL.cxx:2
 TEveCaloLegoGL.cxx:3
 TEveCaloLegoGL.cxx:4
 TEveCaloLegoGL.cxx:5
 TEveCaloLegoGL.cxx:6
 TEveCaloLegoGL.cxx:7
 TEveCaloLegoGL.cxx:8
 TEveCaloLegoGL.cxx:9
 TEveCaloLegoGL.cxx:10
 TEveCaloLegoGL.cxx:11
 TEveCaloLegoGL.cxx:12
 TEveCaloLegoGL.cxx:13
 TEveCaloLegoGL.cxx:14
 TEveCaloLegoGL.cxx:15
 TEveCaloLegoGL.cxx:16
 TEveCaloLegoGL.cxx:17
 TEveCaloLegoGL.cxx:18
 TEveCaloLegoGL.cxx:19
 TEveCaloLegoGL.cxx:20
 TEveCaloLegoGL.cxx:21
 TEveCaloLegoGL.cxx:22
 TEveCaloLegoGL.cxx:23
 TEveCaloLegoGL.cxx:24
 TEveCaloLegoGL.cxx:25
 TEveCaloLegoGL.cxx:26
 TEveCaloLegoGL.cxx:27
 TEveCaloLegoGL.cxx:28
 TEveCaloLegoGL.cxx:29
 TEveCaloLegoGL.cxx:30
 TEveCaloLegoGL.cxx:31
 TEveCaloLegoGL.cxx:32
 TEveCaloLegoGL.cxx:33
 TEveCaloLegoGL.cxx:34
 TEveCaloLegoGL.cxx:35
 TEveCaloLegoGL.cxx:36
 TEveCaloLegoGL.cxx:37
 TEveCaloLegoGL.cxx:38
 TEveCaloLegoGL.cxx:39
 TEveCaloLegoGL.cxx:40
 TEveCaloLegoGL.cxx:41
 TEveCaloLegoGL.cxx:42
 TEveCaloLegoGL.cxx:43
 TEveCaloLegoGL.cxx:44
 TEveCaloLegoGL.cxx:45
 TEveCaloLegoGL.cxx:46
 TEveCaloLegoGL.cxx:47
 TEveCaloLegoGL.cxx:48
 TEveCaloLegoGL.cxx:49
 TEveCaloLegoGL.cxx:50
 TEveCaloLegoGL.cxx:51
 TEveCaloLegoGL.cxx:52
 TEveCaloLegoGL.cxx:53
 TEveCaloLegoGL.cxx:54
 TEveCaloLegoGL.cxx:55
 TEveCaloLegoGL.cxx:56
 TEveCaloLegoGL.cxx:57
 TEveCaloLegoGL.cxx:58
 TEveCaloLegoGL.cxx:59
 TEveCaloLegoGL.cxx:60
 TEveCaloLegoGL.cxx:61
 TEveCaloLegoGL.cxx:62
 TEveCaloLegoGL.cxx:63
 TEveCaloLegoGL.cxx:64
 TEveCaloLegoGL.cxx:65
 TEveCaloLegoGL.cxx:66
 TEveCaloLegoGL.cxx:67
 TEveCaloLegoGL.cxx:68
 TEveCaloLegoGL.cxx:69
 TEveCaloLegoGL.cxx:70
 TEveCaloLegoGL.cxx:71
 TEveCaloLegoGL.cxx:72
 TEveCaloLegoGL.cxx:73
 TEveCaloLegoGL.cxx:74
 TEveCaloLegoGL.cxx:75
 TEveCaloLegoGL.cxx:76
 TEveCaloLegoGL.cxx:77
 TEveCaloLegoGL.cxx:78
 TEveCaloLegoGL.cxx:79
 TEveCaloLegoGL.cxx:80
 TEveCaloLegoGL.cxx:81
 TEveCaloLegoGL.cxx:82
 TEveCaloLegoGL.cxx:83
 TEveCaloLegoGL.cxx:84
 TEveCaloLegoGL.cxx:85
 TEveCaloLegoGL.cxx:86
 TEveCaloLegoGL.cxx:87
 TEveCaloLegoGL.cxx:88
 TEveCaloLegoGL.cxx:89
 TEveCaloLegoGL.cxx:90
 TEveCaloLegoGL.cxx:91
 TEveCaloLegoGL.cxx:92
 TEveCaloLegoGL.cxx:93
 TEveCaloLegoGL.cxx:94
 TEveCaloLegoGL.cxx:95
 TEveCaloLegoGL.cxx:96
 TEveCaloLegoGL.cxx:97
 TEveCaloLegoGL.cxx:98
 TEveCaloLegoGL.cxx:99
 TEveCaloLegoGL.cxx:100
 TEveCaloLegoGL.cxx:101
 TEveCaloLegoGL.cxx:102
 TEveCaloLegoGL.cxx:103
 TEveCaloLegoGL.cxx:104
 TEveCaloLegoGL.cxx:105
 TEveCaloLegoGL.cxx:106
 TEveCaloLegoGL.cxx:107
 TEveCaloLegoGL.cxx:108
 TEveCaloLegoGL.cxx:109
 TEveCaloLegoGL.cxx:110
 TEveCaloLegoGL.cxx:111
 TEveCaloLegoGL.cxx:112
 TEveCaloLegoGL.cxx:113
 TEveCaloLegoGL.cxx:114
 TEveCaloLegoGL.cxx:115
 TEveCaloLegoGL.cxx:116
 TEveCaloLegoGL.cxx:117
 TEveCaloLegoGL.cxx:118
 TEveCaloLegoGL.cxx:119
 TEveCaloLegoGL.cxx:120
 TEveCaloLegoGL.cxx:121
 TEveCaloLegoGL.cxx:122
 TEveCaloLegoGL.cxx:123
 TEveCaloLegoGL.cxx:124
 TEveCaloLegoGL.cxx:125
 TEveCaloLegoGL.cxx:126
 TEveCaloLegoGL.cxx:127
 TEveCaloLegoGL.cxx:128
 TEveCaloLegoGL.cxx:129
 TEveCaloLegoGL.cxx:130
 TEveCaloLegoGL.cxx:131
 TEveCaloLegoGL.cxx:132
 TEveCaloLegoGL.cxx:133
 TEveCaloLegoGL.cxx:134
 TEveCaloLegoGL.cxx:135
 TEveCaloLegoGL.cxx:136
 TEveCaloLegoGL.cxx:137
 TEveCaloLegoGL.cxx:138
 TEveCaloLegoGL.cxx:139
 TEveCaloLegoGL.cxx:140
 TEveCaloLegoGL.cxx:141
 TEveCaloLegoGL.cxx:142
 TEveCaloLegoGL.cxx:143
 TEveCaloLegoGL.cxx:144
 TEveCaloLegoGL.cxx:145
 TEveCaloLegoGL.cxx:146
 TEveCaloLegoGL.cxx:147
 TEveCaloLegoGL.cxx:148
 TEveCaloLegoGL.cxx:149
 TEveCaloLegoGL.cxx:150
 TEveCaloLegoGL.cxx:151
 TEveCaloLegoGL.cxx:152
 TEveCaloLegoGL.cxx:153
 TEveCaloLegoGL.cxx:154
 TEveCaloLegoGL.cxx:155
 TEveCaloLegoGL.cxx:156
 TEveCaloLegoGL.cxx:157
 TEveCaloLegoGL.cxx:158
 TEveCaloLegoGL.cxx:159
 TEveCaloLegoGL.cxx:160
 TEveCaloLegoGL.cxx:161
 TEveCaloLegoGL.cxx:162
 TEveCaloLegoGL.cxx:163
 TEveCaloLegoGL.cxx:164
 TEveCaloLegoGL.cxx:165
 TEveCaloLegoGL.cxx:166
 TEveCaloLegoGL.cxx:167
 TEveCaloLegoGL.cxx:168
 TEveCaloLegoGL.cxx:169
 TEveCaloLegoGL.cxx:170
 TEveCaloLegoGL.cxx:171
 TEveCaloLegoGL.cxx:172
 TEveCaloLegoGL.cxx:173
 TEveCaloLegoGL.cxx:174
 TEveCaloLegoGL.cxx:175
 TEveCaloLegoGL.cxx:176
 TEveCaloLegoGL.cxx:177
 TEveCaloLegoGL.cxx:178
 TEveCaloLegoGL.cxx:179
 TEveCaloLegoGL.cxx:180
 TEveCaloLegoGL.cxx:181
 TEveCaloLegoGL.cxx:182
 TEveCaloLegoGL.cxx:183
 TEveCaloLegoGL.cxx:184
 TEveCaloLegoGL.cxx:185
 TEveCaloLegoGL.cxx:186
 TEveCaloLegoGL.cxx:187
 TEveCaloLegoGL.cxx:188
 TEveCaloLegoGL.cxx:189
 TEveCaloLegoGL.cxx:190
 TEveCaloLegoGL.cxx:191
 TEveCaloLegoGL.cxx:192
 TEveCaloLegoGL.cxx:193
 TEveCaloLegoGL.cxx:194
 TEveCaloLegoGL.cxx:195
 TEveCaloLegoGL.cxx:196
 TEveCaloLegoGL.cxx:197
 TEveCaloLegoGL.cxx:198
 TEveCaloLegoGL.cxx:199
 TEveCaloLegoGL.cxx:200
 TEveCaloLegoGL.cxx:201
 TEveCaloLegoGL.cxx:202
 TEveCaloLegoGL.cxx:203
 TEveCaloLegoGL.cxx:204
 TEveCaloLegoGL.cxx:205
 TEveCaloLegoGL.cxx:206
 TEveCaloLegoGL.cxx:207
 TEveCaloLegoGL.cxx:208
 TEveCaloLegoGL.cxx:209
 TEveCaloLegoGL.cxx:210
 TEveCaloLegoGL.cxx:211
 TEveCaloLegoGL.cxx:212
 TEveCaloLegoGL.cxx:213
 TEveCaloLegoGL.cxx:214
 TEveCaloLegoGL.cxx:215
 TEveCaloLegoGL.cxx:216
 TEveCaloLegoGL.cxx:217
 TEveCaloLegoGL.cxx:218
 TEveCaloLegoGL.cxx:219
 TEveCaloLegoGL.cxx:220
 TEveCaloLegoGL.cxx:221
 TEveCaloLegoGL.cxx:222
 TEveCaloLegoGL.cxx:223
 TEveCaloLegoGL.cxx:224
 TEveCaloLegoGL.cxx:225
 TEveCaloLegoGL.cxx:226
 TEveCaloLegoGL.cxx:227
 TEveCaloLegoGL.cxx:228
 TEveCaloLegoGL.cxx:229
 TEveCaloLegoGL.cxx:230
 TEveCaloLegoGL.cxx:231
 TEveCaloLegoGL.cxx:232
 TEveCaloLegoGL.cxx:233
 TEveCaloLegoGL.cxx:234
 TEveCaloLegoGL.cxx:235
 TEveCaloLegoGL.cxx:236
 TEveCaloLegoGL.cxx:237
 TEveCaloLegoGL.cxx:238
 TEveCaloLegoGL.cxx:239
 TEveCaloLegoGL.cxx:240
 TEveCaloLegoGL.cxx:241
 TEveCaloLegoGL.cxx:242
 TEveCaloLegoGL.cxx:243
 TEveCaloLegoGL.cxx:244
 TEveCaloLegoGL.cxx:245
 TEveCaloLegoGL.cxx:246
 TEveCaloLegoGL.cxx:247
 TEveCaloLegoGL.cxx:248
 TEveCaloLegoGL.cxx:249
 TEveCaloLegoGL.cxx:250
 TEveCaloLegoGL.cxx:251
 TEveCaloLegoGL.cxx:252
 TEveCaloLegoGL.cxx:253
 TEveCaloLegoGL.cxx:254
 TEveCaloLegoGL.cxx:255
 TEveCaloLegoGL.cxx:256
 TEveCaloLegoGL.cxx:257
 TEveCaloLegoGL.cxx:258
 TEveCaloLegoGL.cxx:259
 TEveCaloLegoGL.cxx:260
 TEveCaloLegoGL.cxx:261
 TEveCaloLegoGL.cxx:262
 TEveCaloLegoGL.cxx:263
 TEveCaloLegoGL.cxx:264
 TEveCaloLegoGL.cxx:265
 TEveCaloLegoGL.cxx:266
 TEveCaloLegoGL.cxx:267
 TEveCaloLegoGL.cxx:268
 TEveCaloLegoGL.cxx:269
 TEveCaloLegoGL.cxx:270
 TEveCaloLegoGL.cxx:271
 TEveCaloLegoGL.cxx:272
 TEveCaloLegoGL.cxx:273
 TEveCaloLegoGL.cxx:274
 TEveCaloLegoGL.cxx:275
 TEveCaloLegoGL.cxx:276
 TEveCaloLegoGL.cxx:277
 TEveCaloLegoGL.cxx:278
 TEveCaloLegoGL.cxx:279
 TEveCaloLegoGL.cxx:280
 TEveCaloLegoGL.cxx:281
 TEveCaloLegoGL.cxx:282
 TEveCaloLegoGL.cxx:283
 TEveCaloLegoGL.cxx:284
 TEveCaloLegoGL.cxx:285
 TEveCaloLegoGL.cxx:286
 TEveCaloLegoGL.cxx:287
 TEveCaloLegoGL.cxx:288
 TEveCaloLegoGL.cxx:289
 TEveCaloLegoGL.cxx:290
 TEveCaloLegoGL.cxx:291
 TEveCaloLegoGL.cxx:292
 TEveCaloLegoGL.cxx:293
 TEveCaloLegoGL.cxx:294
 TEveCaloLegoGL.cxx:295
 TEveCaloLegoGL.cxx:296
 TEveCaloLegoGL.cxx:297
 TEveCaloLegoGL.cxx:298
 TEveCaloLegoGL.cxx:299
 TEveCaloLegoGL.cxx:300
 TEveCaloLegoGL.cxx:301
 TEveCaloLegoGL.cxx:302
 TEveCaloLegoGL.cxx:303
 TEveCaloLegoGL.cxx:304
 TEveCaloLegoGL.cxx:305
 TEveCaloLegoGL.cxx:306
 TEveCaloLegoGL.cxx:307
 TEveCaloLegoGL.cxx:308
 TEveCaloLegoGL.cxx:309
 TEveCaloLegoGL.cxx:310
 TEveCaloLegoGL.cxx:311
 TEveCaloLegoGL.cxx:312
 TEveCaloLegoGL.cxx:313
 TEveCaloLegoGL.cxx:314
 TEveCaloLegoGL.cxx:315
 TEveCaloLegoGL.cxx:316
 TEveCaloLegoGL.cxx:317
 TEveCaloLegoGL.cxx:318
 TEveCaloLegoGL.cxx:319
 TEveCaloLegoGL.cxx:320
 TEveCaloLegoGL.cxx:321
 TEveCaloLegoGL.cxx:322
 TEveCaloLegoGL.cxx:323
 TEveCaloLegoGL.cxx:324
 TEveCaloLegoGL.cxx:325
 TEveCaloLegoGL.cxx:326
 TEveCaloLegoGL.cxx:327
 TEveCaloLegoGL.cxx:328
 TEveCaloLegoGL.cxx:329
 TEveCaloLegoGL.cxx:330
 TEveCaloLegoGL.cxx:331
 TEveCaloLegoGL.cxx:332
 TEveCaloLegoGL.cxx:333
 TEveCaloLegoGL.cxx:334
 TEveCaloLegoGL.cxx:335
 TEveCaloLegoGL.cxx:336
 TEveCaloLegoGL.cxx:337
 TEveCaloLegoGL.cxx:338
 TEveCaloLegoGL.cxx:339
 TEveCaloLegoGL.cxx:340
 TEveCaloLegoGL.cxx:341
 TEveCaloLegoGL.cxx:342
 TEveCaloLegoGL.cxx:343
 TEveCaloLegoGL.cxx:344
 TEveCaloLegoGL.cxx:345
 TEveCaloLegoGL.cxx:346
 TEveCaloLegoGL.cxx:347
 TEveCaloLegoGL.cxx:348
 TEveCaloLegoGL.cxx:349
 TEveCaloLegoGL.cxx:350
 TEveCaloLegoGL.cxx:351
 TEveCaloLegoGL.cxx:352
 TEveCaloLegoGL.cxx:353
 TEveCaloLegoGL.cxx:354
 TEveCaloLegoGL.cxx:355
 TEveCaloLegoGL.cxx:356
 TEveCaloLegoGL.cxx:357
 TEveCaloLegoGL.cxx:358
 TEveCaloLegoGL.cxx:359
 TEveCaloLegoGL.cxx:360
 TEveCaloLegoGL.cxx:361
 TEveCaloLegoGL.cxx:362
 TEveCaloLegoGL.cxx:363
 TEveCaloLegoGL.cxx:364
 TEveCaloLegoGL.cxx:365
 TEveCaloLegoGL.cxx:366
 TEveCaloLegoGL.cxx:367
 TEveCaloLegoGL.cxx:368
 TEveCaloLegoGL.cxx:369
 TEveCaloLegoGL.cxx:370
 TEveCaloLegoGL.cxx:371
 TEveCaloLegoGL.cxx:372
 TEveCaloLegoGL.cxx:373
 TEveCaloLegoGL.cxx:374
 TEveCaloLegoGL.cxx:375
 TEveCaloLegoGL.cxx:376
 TEveCaloLegoGL.cxx:377
 TEveCaloLegoGL.cxx:378
 TEveCaloLegoGL.cxx:379
 TEveCaloLegoGL.cxx:380
 TEveCaloLegoGL.cxx:381
 TEveCaloLegoGL.cxx:382
 TEveCaloLegoGL.cxx:383
 TEveCaloLegoGL.cxx:384
 TEveCaloLegoGL.cxx:385
 TEveCaloLegoGL.cxx:386
 TEveCaloLegoGL.cxx:387
 TEveCaloLegoGL.cxx:388
 TEveCaloLegoGL.cxx:389
 TEveCaloLegoGL.cxx:390
 TEveCaloLegoGL.cxx:391
 TEveCaloLegoGL.cxx:392
 TEveCaloLegoGL.cxx:393
 TEveCaloLegoGL.cxx:394
 TEveCaloLegoGL.cxx:395
 TEveCaloLegoGL.cxx:396
 TEveCaloLegoGL.cxx:397
 TEveCaloLegoGL.cxx:398
 TEveCaloLegoGL.cxx:399
 TEveCaloLegoGL.cxx:400
 TEveCaloLegoGL.cxx:401
 TEveCaloLegoGL.cxx:402
 TEveCaloLegoGL.cxx:403
 TEveCaloLegoGL.cxx:404
 TEveCaloLegoGL.cxx:405
 TEveCaloLegoGL.cxx:406
 TEveCaloLegoGL.cxx:407
 TEveCaloLegoGL.cxx:408
 TEveCaloLegoGL.cxx:409
 TEveCaloLegoGL.cxx:410
 TEveCaloLegoGL.cxx:411
 TEveCaloLegoGL.cxx:412
 TEveCaloLegoGL.cxx:413
 TEveCaloLegoGL.cxx:414
 TEveCaloLegoGL.cxx:415
 TEveCaloLegoGL.cxx:416
 TEveCaloLegoGL.cxx:417
 TEveCaloLegoGL.cxx:418
 TEveCaloLegoGL.cxx:419
 TEveCaloLegoGL.cxx:420
 TEveCaloLegoGL.cxx:421
 TEveCaloLegoGL.cxx:422
 TEveCaloLegoGL.cxx:423
 TEveCaloLegoGL.cxx:424
 TEveCaloLegoGL.cxx:425
 TEveCaloLegoGL.cxx:426
 TEveCaloLegoGL.cxx:427
 TEveCaloLegoGL.cxx:428
 TEveCaloLegoGL.cxx:429
 TEveCaloLegoGL.cxx:430
 TEveCaloLegoGL.cxx:431
 TEveCaloLegoGL.cxx:432
 TEveCaloLegoGL.cxx:433
 TEveCaloLegoGL.cxx:434
 TEveCaloLegoGL.cxx:435
 TEveCaloLegoGL.cxx:436
 TEveCaloLegoGL.cxx:437
 TEveCaloLegoGL.cxx:438
 TEveCaloLegoGL.cxx:439
 TEveCaloLegoGL.cxx:440
 TEveCaloLegoGL.cxx:441
 TEveCaloLegoGL.cxx:442
 TEveCaloLegoGL.cxx:443
 TEveCaloLegoGL.cxx:444
 TEveCaloLegoGL.cxx:445
 TEveCaloLegoGL.cxx:446
 TEveCaloLegoGL.cxx:447
 TEveCaloLegoGL.cxx:448
 TEveCaloLegoGL.cxx:449
 TEveCaloLegoGL.cxx:450
 TEveCaloLegoGL.cxx:451
 TEveCaloLegoGL.cxx:452
 TEveCaloLegoGL.cxx:453
 TEveCaloLegoGL.cxx:454
 TEveCaloLegoGL.cxx:455
 TEveCaloLegoGL.cxx:456
 TEveCaloLegoGL.cxx:457
 TEveCaloLegoGL.cxx:458
 TEveCaloLegoGL.cxx:459
 TEveCaloLegoGL.cxx:460
 TEveCaloLegoGL.cxx:461
 TEveCaloLegoGL.cxx:462
 TEveCaloLegoGL.cxx:463
 TEveCaloLegoGL.cxx:464
 TEveCaloLegoGL.cxx:465
 TEveCaloLegoGL.cxx:466
 TEveCaloLegoGL.cxx:467
 TEveCaloLegoGL.cxx:468
 TEveCaloLegoGL.cxx:469
 TEveCaloLegoGL.cxx:470
 TEveCaloLegoGL.cxx:471
 TEveCaloLegoGL.cxx:472
 TEveCaloLegoGL.cxx:473
 TEveCaloLegoGL.cxx:474
 TEveCaloLegoGL.cxx:475
 TEveCaloLegoGL.cxx:476
 TEveCaloLegoGL.cxx:477
 TEveCaloLegoGL.cxx:478
 TEveCaloLegoGL.cxx:479
 TEveCaloLegoGL.cxx:480
 TEveCaloLegoGL.cxx:481
 TEveCaloLegoGL.cxx:482
 TEveCaloLegoGL.cxx:483
 TEveCaloLegoGL.cxx:484
 TEveCaloLegoGL.cxx:485
 TEveCaloLegoGL.cxx:486
 TEveCaloLegoGL.cxx:487
 TEveCaloLegoGL.cxx:488
 TEveCaloLegoGL.cxx:489
 TEveCaloLegoGL.cxx:490
 TEveCaloLegoGL.cxx:491
 TEveCaloLegoGL.cxx:492
 TEveCaloLegoGL.cxx:493
 TEveCaloLegoGL.cxx:494
 TEveCaloLegoGL.cxx:495
 TEveCaloLegoGL.cxx:496
 TEveCaloLegoGL.cxx:497
 TEveCaloLegoGL.cxx:498
 TEveCaloLegoGL.cxx:499
 TEveCaloLegoGL.cxx:500
 TEveCaloLegoGL.cxx:501
 TEveCaloLegoGL.cxx:502
 TEveCaloLegoGL.cxx:503
 TEveCaloLegoGL.cxx:504
 TEveCaloLegoGL.cxx:505
 TEveCaloLegoGL.cxx:506
 TEveCaloLegoGL.cxx:507
 TEveCaloLegoGL.cxx:508
 TEveCaloLegoGL.cxx:509
 TEveCaloLegoGL.cxx:510
 TEveCaloLegoGL.cxx:511
 TEveCaloLegoGL.cxx:512
 TEveCaloLegoGL.cxx:513
 TEveCaloLegoGL.cxx:514
 TEveCaloLegoGL.cxx:515
 TEveCaloLegoGL.cxx:516
 TEveCaloLegoGL.cxx:517
 TEveCaloLegoGL.cxx:518
 TEveCaloLegoGL.cxx:519
 TEveCaloLegoGL.cxx:520
 TEveCaloLegoGL.cxx:521
 TEveCaloLegoGL.cxx:522
 TEveCaloLegoGL.cxx:523
 TEveCaloLegoGL.cxx:524
 TEveCaloLegoGL.cxx:525
 TEveCaloLegoGL.cxx:526
 TEveCaloLegoGL.cxx:527
 TEveCaloLegoGL.cxx:528
 TEveCaloLegoGL.cxx:529
 TEveCaloLegoGL.cxx:530
 TEveCaloLegoGL.cxx:531
 TEveCaloLegoGL.cxx:532
 TEveCaloLegoGL.cxx:533
 TEveCaloLegoGL.cxx:534
 TEveCaloLegoGL.cxx:535
 TEveCaloLegoGL.cxx:536
 TEveCaloLegoGL.cxx:537
 TEveCaloLegoGL.cxx:538
 TEveCaloLegoGL.cxx:539
 TEveCaloLegoGL.cxx:540
 TEveCaloLegoGL.cxx:541
 TEveCaloLegoGL.cxx:542
 TEveCaloLegoGL.cxx:543
 TEveCaloLegoGL.cxx:544
 TEveCaloLegoGL.cxx:545
 TEveCaloLegoGL.cxx:546
 TEveCaloLegoGL.cxx:547
 TEveCaloLegoGL.cxx:548
 TEveCaloLegoGL.cxx:549
 TEveCaloLegoGL.cxx:550
 TEveCaloLegoGL.cxx:551
 TEveCaloLegoGL.cxx:552
 TEveCaloLegoGL.cxx:553
 TEveCaloLegoGL.cxx:554
 TEveCaloLegoGL.cxx:555
 TEveCaloLegoGL.cxx:556
 TEveCaloLegoGL.cxx:557
 TEveCaloLegoGL.cxx:558
 TEveCaloLegoGL.cxx:559
 TEveCaloLegoGL.cxx:560
 TEveCaloLegoGL.cxx:561
 TEveCaloLegoGL.cxx:562
 TEveCaloLegoGL.cxx:563
 TEveCaloLegoGL.cxx:564
 TEveCaloLegoGL.cxx:565
 TEveCaloLegoGL.cxx:566
 TEveCaloLegoGL.cxx:567
 TEveCaloLegoGL.cxx:568
 TEveCaloLegoGL.cxx:569
 TEveCaloLegoGL.cxx:570
 TEveCaloLegoGL.cxx:571
 TEveCaloLegoGL.cxx:572
 TEveCaloLegoGL.cxx:573
 TEveCaloLegoGL.cxx:574
 TEveCaloLegoGL.cxx:575
 TEveCaloLegoGL.cxx:576
 TEveCaloLegoGL.cxx:577
 TEveCaloLegoGL.cxx:578
 TEveCaloLegoGL.cxx:579
 TEveCaloLegoGL.cxx:580
 TEveCaloLegoGL.cxx:581
 TEveCaloLegoGL.cxx:582
 TEveCaloLegoGL.cxx:583
 TEveCaloLegoGL.cxx:584
 TEveCaloLegoGL.cxx:585
 TEveCaloLegoGL.cxx:586
 TEveCaloLegoGL.cxx:587
 TEveCaloLegoGL.cxx:588
 TEveCaloLegoGL.cxx:589
 TEveCaloLegoGL.cxx:590
 TEveCaloLegoGL.cxx:591
 TEveCaloLegoGL.cxx:592
 TEveCaloLegoGL.cxx:593
 TEveCaloLegoGL.cxx:594
 TEveCaloLegoGL.cxx:595
 TEveCaloLegoGL.cxx:596
 TEveCaloLegoGL.cxx:597
 TEveCaloLegoGL.cxx:598
 TEveCaloLegoGL.cxx:599
 TEveCaloLegoGL.cxx:600
 TEveCaloLegoGL.cxx:601
 TEveCaloLegoGL.cxx:602
 TEveCaloLegoGL.cxx:603
 TEveCaloLegoGL.cxx:604
 TEveCaloLegoGL.cxx:605
 TEveCaloLegoGL.cxx:606
 TEveCaloLegoGL.cxx:607
 TEveCaloLegoGL.cxx:608
 TEveCaloLegoGL.cxx:609
 TEveCaloLegoGL.cxx:610
 TEveCaloLegoGL.cxx:611
 TEveCaloLegoGL.cxx:612
 TEveCaloLegoGL.cxx:613
 TEveCaloLegoGL.cxx:614
 TEveCaloLegoGL.cxx:615
 TEveCaloLegoGL.cxx:616
 TEveCaloLegoGL.cxx:617
 TEveCaloLegoGL.cxx:618
 TEveCaloLegoGL.cxx:619
 TEveCaloLegoGL.cxx:620
 TEveCaloLegoGL.cxx:621
 TEveCaloLegoGL.cxx:622
 TEveCaloLegoGL.cxx:623
 TEveCaloLegoGL.cxx:624
 TEveCaloLegoGL.cxx:625
 TEveCaloLegoGL.cxx:626
 TEveCaloLegoGL.cxx:627
 TEveCaloLegoGL.cxx:628
 TEveCaloLegoGL.cxx:629
 TEveCaloLegoGL.cxx:630
 TEveCaloLegoGL.cxx:631
 TEveCaloLegoGL.cxx:632
 TEveCaloLegoGL.cxx:633
 TEveCaloLegoGL.cxx:634
 TEveCaloLegoGL.cxx:635
 TEveCaloLegoGL.cxx:636
 TEveCaloLegoGL.cxx:637
 TEveCaloLegoGL.cxx:638
 TEveCaloLegoGL.cxx:639
 TEveCaloLegoGL.cxx:640
 TEveCaloLegoGL.cxx:641
 TEveCaloLegoGL.cxx:642
 TEveCaloLegoGL.cxx:643
 TEveCaloLegoGL.cxx:644
 TEveCaloLegoGL.cxx:645
 TEveCaloLegoGL.cxx:646
 TEveCaloLegoGL.cxx:647
 TEveCaloLegoGL.cxx:648
 TEveCaloLegoGL.cxx:649
 TEveCaloLegoGL.cxx:650
 TEveCaloLegoGL.cxx:651
 TEveCaloLegoGL.cxx:652
 TEveCaloLegoGL.cxx:653
 TEveCaloLegoGL.cxx:654
 TEveCaloLegoGL.cxx:655
 TEveCaloLegoGL.cxx:656
 TEveCaloLegoGL.cxx:657
 TEveCaloLegoGL.cxx:658
 TEveCaloLegoGL.cxx:659
 TEveCaloLegoGL.cxx:660
 TEveCaloLegoGL.cxx:661
 TEveCaloLegoGL.cxx:662
 TEveCaloLegoGL.cxx:663
 TEveCaloLegoGL.cxx:664
 TEveCaloLegoGL.cxx:665
 TEveCaloLegoGL.cxx:666
 TEveCaloLegoGL.cxx:667
 TEveCaloLegoGL.cxx:668
 TEveCaloLegoGL.cxx:669
 TEveCaloLegoGL.cxx:670
 TEveCaloLegoGL.cxx:671
 TEveCaloLegoGL.cxx:672
 TEveCaloLegoGL.cxx:673
 TEveCaloLegoGL.cxx:674
 TEveCaloLegoGL.cxx:675
 TEveCaloLegoGL.cxx:676
 TEveCaloLegoGL.cxx:677
 TEveCaloLegoGL.cxx:678
 TEveCaloLegoGL.cxx:679
 TEveCaloLegoGL.cxx:680
 TEveCaloLegoGL.cxx:681
 TEveCaloLegoGL.cxx:682
 TEveCaloLegoGL.cxx:683
 TEveCaloLegoGL.cxx:684
 TEveCaloLegoGL.cxx:685
 TEveCaloLegoGL.cxx:686
 TEveCaloLegoGL.cxx:687
 TEveCaloLegoGL.cxx:688
 TEveCaloLegoGL.cxx:689
 TEveCaloLegoGL.cxx:690
 TEveCaloLegoGL.cxx:691
 TEveCaloLegoGL.cxx:692
 TEveCaloLegoGL.cxx:693
 TEveCaloLegoGL.cxx:694
 TEveCaloLegoGL.cxx:695
 TEveCaloLegoGL.cxx:696
 TEveCaloLegoGL.cxx:697
 TEveCaloLegoGL.cxx:698
 TEveCaloLegoGL.cxx:699
 TEveCaloLegoGL.cxx:700
 TEveCaloLegoGL.cxx:701
 TEveCaloLegoGL.cxx:702
 TEveCaloLegoGL.cxx:703
 TEveCaloLegoGL.cxx:704
 TEveCaloLegoGL.cxx:705
 TEveCaloLegoGL.cxx:706
 TEveCaloLegoGL.cxx:707
 TEveCaloLegoGL.cxx:708
 TEveCaloLegoGL.cxx:709
 TEveCaloLegoGL.cxx:710
 TEveCaloLegoGL.cxx:711
 TEveCaloLegoGL.cxx:712
 TEveCaloLegoGL.cxx:713
 TEveCaloLegoGL.cxx:714
 TEveCaloLegoGL.cxx:715
 TEveCaloLegoGL.cxx:716
 TEveCaloLegoGL.cxx:717
 TEveCaloLegoGL.cxx:718
 TEveCaloLegoGL.cxx:719
 TEveCaloLegoGL.cxx:720
 TEveCaloLegoGL.cxx:721
 TEveCaloLegoGL.cxx:722
 TEveCaloLegoGL.cxx:723
 TEveCaloLegoGL.cxx:724
 TEveCaloLegoGL.cxx:725
 TEveCaloLegoGL.cxx:726
 TEveCaloLegoGL.cxx:727
 TEveCaloLegoGL.cxx:728
 TEveCaloLegoGL.cxx:729
 TEveCaloLegoGL.cxx:730
 TEveCaloLegoGL.cxx:731
 TEveCaloLegoGL.cxx:732
 TEveCaloLegoGL.cxx:733
 TEveCaloLegoGL.cxx:734
 TEveCaloLegoGL.cxx:735
 TEveCaloLegoGL.cxx:736
 TEveCaloLegoGL.cxx:737
 TEveCaloLegoGL.cxx:738
 TEveCaloLegoGL.cxx:739
 TEveCaloLegoGL.cxx:740
 TEveCaloLegoGL.cxx:741
 TEveCaloLegoGL.cxx:742
 TEveCaloLegoGL.cxx:743
 TEveCaloLegoGL.cxx:744
 TEveCaloLegoGL.cxx:745
 TEveCaloLegoGL.cxx:746
 TEveCaloLegoGL.cxx:747
 TEveCaloLegoGL.cxx:748
 TEveCaloLegoGL.cxx:749
 TEveCaloLegoGL.cxx:750
 TEveCaloLegoGL.cxx:751
 TEveCaloLegoGL.cxx:752
 TEveCaloLegoGL.cxx:753
 TEveCaloLegoGL.cxx:754
 TEveCaloLegoGL.cxx:755
 TEveCaloLegoGL.cxx:756
 TEveCaloLegoGL.cxx:757
 TEveCaloLegoGL.cxx:758
 TEveCaloLegoGL.cxx:759
 TEveCaloLegoGL.cxx:760
 TEveCaloLegoGL.cxx:761
 TEveCaloLegoGL.cxx:762
 TEveCaloLegoGL.cxx:763
 TEveCaloLegoGL.cxx:764
 TEveCaloLegoGL.cxx:765
 TEveCaloLegoGL.cxx:766
 TEveCaloLegoGL.cxx:767
 TEveCaloLegoGL.cxx:768
 TEveCaloLegoGL.cxx:769
 TEveCaloLegoGL.cxx:770
 TEveCaloLegoGL.cxx:771
 TEveCaloLegoGL.cxx:772
 TEveCaloLegoGL.cxx:773
 TEveCaloLegoGL.cxx:774
 TEveCaloLegoGL.cxx:775
 TEveCaloLegoGL.cxx:776
 TEveCaloLegoGL.cxx:777
 TEveCaloLegoGL.cxx:778
 TEveCaloLegoGL.cxx:779
 TEveCaloLegoGL.cxx:780
 TEveCaloLegoGL.cxx:781
 TEveCaloLegoGL.cxx:782
 TEveCaloLegoGL.cxx:783
 TEveCaloLegoGL.cxx:784
 TEveCaloLegoGL.cxx:785
 TEveCaloLegoGL.cxx:786
 TEveCaloLegoGL.cxx:787
 TEveCaloLegoGL.cxx:788
 TEveCaloLegoGL.cxx:789
 TEveCaloLegoGL.cxx:790
 TEveCaloLegoGL.cxx:791
 TEveCaloLegoGL.cxx:792
 TEveCaloLegoGL.cxx:793
 TEveCaloLegoGL.cxx:794
 TEveCaloLegoGL.cxx:795
 TEveCaloLegoGL.cxx:796
 TEveCaloLegoGL.cxx:797
 TEveCaloLegoGL.cxx:798
 TEveCaloLegoGL.cxx:799
 TEveCaloLegoGL.cxx:800
 TEveCaloLegoGL.cxx:801
 TEveCaloLegoGL.cxx:802
 TEveCaloLegoGL.cxx:803
 TEveCaloLegoGL.cxx:804
 TEveCaloLegoGL.cxx:805
 TEveCaloLegoGL.cxx:806
 TEveCaloLegoGL.cxx:807
 TEveCaloLegoGL.cxx:808
 TEveCaloLegoGL.cxx:809
 TEveCaloLegoGL.cxx:810
 TEveCaloLegoGL.cxx:811
 TEveCaloLegoGL.cxx:812
 TEveCaloLegoGL.cxx:813
 TEveCaloLegoGL.cxx:814
 TEveCaloLegoGL.cxx:815
 TEveCaloLegoGL.cxx:816
 TEveCaloLegoGL.cxx:817
 TEveCaloLegoGL.cxx:818
 TEveCaloLegoGL.cxx:819
 TEveCaloLegoGL.cxx:820
 TEveCaloLegoGL.cxx:821
 TEveCaloLegoGL.cxx:822
 TEveCaloLegoGL.cxx:823
 TEveCaloLegoGL.cxx:824
 TEveCaloLegoGL.cxx:825
 TEveCaloLegoGL.cxx:826
 TEveCaloLegoGL.cxx:827
 TEveCaloLegoGL.cxx:828
 TEveCaloLegoGL.cxx:829
 TEveCaloLegoGL.cxx:830
 TEveCaloLegoGL.cxx:831
 TEveCaloLegoGL.cxx:832
 TEveCaloLegoGL.cxx:833
 TEveCaloLegoGL.cxx:834
 TEveCaloLegoGL.cxx:835
 TEveCaloLegoGL.cxx:836
 TEveCaloLegoGL.cxx:837
 TEveCaloLegoGL.cxx:838
 TEveCaloLegoGL.cxx:839
 TEveCaloLegoGL.cxx:840
 TEveCaloLegoGL.cxx:841
 TEveCaloLegoGL.cxx:842
 TEveCaloLegoGL.cxx:843
 TEveCaloLegoGL.cxx:844
 TEveCaloLegoGL.cxx:845
 TEveCaloLegoGL.cxx:846
 TEveCaloLegoGL.cxx:847
 TEveCaloLegoGL.cxx:848
 TEveCaloLegoGL.cxx:849
 TEveCaloLegoGL.cxx:850
 TEveCaloLegoGL.cxx:851
 TEveCaloLegoGL.cxx:852
 TEveCaloLegoGL.cxx:853
 TEveCaloLegoGL.cxx:854
 TEveCaloLegoGL.cxx:855
 TEveCaloLegoGL.cxx:856
 TEveCaloLegoGL.cxx:857
 TEveCaloLegoGL.cxx:858
 TEveCaloLegoGL.cxx:859
 TEveCaloLegoGL.cxx:860
 TEveCaloLegoGL.cxx:861
 TEveCaloLegoGL.cxx:862
 TEveCaloLegoGL.cxx:863
 TEveCaloLegoGL.cxx:864
 TEveCaloLegoGL.cxx:865
 TEveCaloLegoGL.cxx:866
 TEveCaloLegoGL.cxx:867
 TEveCaloLegoGL.cxx:868
 TEveCaloLegoGL.cxx:869
 TEveCaloLegoGL.cxx:870
 TEveCaloLegoGL.cxx:871
 TEveCaloLegoGL.cxx:872
 TEveCaloLegoGL.cxx:873
 TEveCaloLegoGL.cxx:874
 TEveCaloLegoGL.cxx:875
 TEveCaloLegoGL.cxx:876
 TEveCaloLegoGL.cxx:877
 TEveCaloLegoGL.cxx:878
 TEveCaloLegoGL.cxx:879
 TEveCaloLegoGL.cxx:880
 TEveCaloLegoGL.cxx:881
 TEveCaloLegoGL.cxx:882
 TEveCaloLegoGL.cxx:883
 TEveCaloLegoGL.cxx:884
 TEveCaloLegoGL.cxx:885
 TEveCaloLegoGL.cxx:886
 TEveCaloLegoGL.cxx:887
 TEveCaloLegoGL.cxx:888
 TEveCaloLegoGL.cxx:889
 TEveCaloLegoGL.cxx:890
 TEveCaloLegoGL.cxx:891
 TEveCaloLegoGL.cxx:892
 TEveCaloLegoGL.cxx:893
 TEveCaloLegoGL.cxx:894
 TEveCaloLegoGL.cxx:895
 TEveCaloLegoGL.cxx:896
 TEveCaloLegoGL.cxx:897
 TEveCaloLegoGL.cxx:898
 TEveCaloLegoGL.cxx:899
 TEveCaloLegoGL.cxx:900
 TEveCaloLegoGL.cxx:901
 TEveCaloLegoGL.cxx:902
 TEveCaloLegoGL.cxx:903
 TEveCaloLegoGL.cxx:904
 TEveCaloLegoGL.cxx:905
 TEveCaloLegoGL.cxx:906
 TEveCaloLegoGL.cxx:907
 TEveCaloLegoGL.cxx:908
 TEveCaloLegoGL.cxx:909
 TEveCaloLegoGL.cxx:910
 TEveCaloLegoGL.cxx:911
 TEveCaloLegoGL.cxx:912
 TEveCaloLegoGL.cxx:913
 TEveCaloLegoGL.cxx:914
 TEveCaloLegoGL.cxx:915
 TEveCaloLegoGL.cxx:916
 TEveCaloLegoGL.cxx:917
 TEveCaloLegoGL.cxx:918
 TEveCaloLegoGL.cxx:919
 TEveCaloLegoGL.cxx:920
 TEveCaloLegoGL.cxx:921
 TEveCaloLegoGL.cxx:922
 TEveCaloLegoGL.cxx:923
 TEveCaloLegoGL.cxx:924
 TEveCaloLegoGL.cxx:925
 TEveCaloLegoGL.cxx:926
 TEveCaloLegoGL.cxx:927
 TEveCaloLegoGL.cxx:928
 TEveCaloLegoGL.cxx:929
 TEveCaloLegoGL.cxx:930
 TEveCaloLegoGL.cxx:931
 TEveCaloLegoGL.cxx:932
 TEveCaloLegoGL.cxx:933
 TEveCaloLegoGL.cxx:934
 TEveCaloLegoGL.cxx:935
 TEveCaloLegoGL.cxx:936
 TEveCaloLegoGL.cxx:937
 TEveCaloLegoGL.cxx:938
 TEveCaloLegoGL.cxx:939
 TEveCaloLegoGL.cxx:940
 TEveCaloLegoGL.cxx:941
 TEveCaloLegoGL.cxx:942
 TEveCaloLegoGL.cxx:943
 TEveCaloLegoGL.cxx:944
 TEveCaloLegoGL.cxx:945
 TEveCaloLegoGL.cxx:946
 TEveCaloLegoGL.cxx:947
 TEveCaloLegoGL.cxx:948
 TEveCaloLegoGL.cxx:949
 TEveCaloLegoGL.cxx:950
 TEveCaloLegoGL.cxx:951
 TEveCaloLegoGL.cxx:952
 TEveCaloLegoGL.cxx:953
 TEveCaloLegoGL.cxx:954
 TEveCaloLegoGL.cxx:955
 TEveCaloLegoGL.cxx:956
 TEveCaloLegoGL.cxx:957
 TEveCaloLegoGL.cxx:958
 TEveCaloLegoGL.cxx:959
 TEveCaloLegoGL.cxx:960
 TEveCaloLegoGL.cxx:961
 TEveCaloLegoGL.cxx:962
 TEveCaloLegoGL.cxx:963
 TEveCaloLegoGL.cxx:964
 TEveCaloLegoGL.cxx:965
 TEveCaloLegoGL.cxx:966
 TEveCaloLegoGL.cxx:967
 TEveCaloLegoGL.cxx:968
 TEveCaloLegoGL.cxx:969
 TEveCaloLegoGL.cxx:970
 TEveCaloLegoGL.cxx:971
 TEveCaloLegoGL.cxx:972
 TEveCaloLegoGL.cxx:973
 TEveCaloLegoGL.cxx:974
 TEveCaloLegoGL.cxx:975
 TEveCaloLegoGL.cxx:976
 TEveCaloLegoGL.cxx:977
 TEveCaloLegoGL.cxx:978
 TEveCaloLegoGL.cxx:979
 TEveCaloLegoGL.cxx:980
 TEveCaloLegoGL.cxx:981
 TEveCaloLegoGL.cxx:982
 TEveCaloLegoGL.cxx:983
 TEveCaloLegoGL.cxx:984
 TEveCaloLegoGL.cxx:985
 TEveCaloLegoGL.cxx:986
 TEveCaloLegoGL.cxx:987
 TEveCaloLegoGL.cxx:988
 TEveCaloLegoGL.cxx:989
 TEveCaloLegoGL.cxx:990
 TEveCaloLegoGL.cxx:991
 TEveCaloLegoGL.cxx:992
 TEveCaloLegoGL.cxx:993
 TEveCaloLegoGL.cxx:994
 TEveCaloLegoGL.cxx:995
 TEveCaloLegoGL.cxx:996
 TEveCaloLegoGL.cxx:997
 TEveCaloLegoGL.cxx:998
 TEveCaloLegoGL.cxx:999
 TEveCaloLegoGL.cxx:1000
 TEveCaloLegoGL.cxx:1001
 TEveCaloLegoGL.cxx:1002
 TEveCaloLegoGL.cxx:1003
 TEveCaloLegoGL.cxx:1004
 TEveCaloLegoGL.cxx:1005
 TEveCaloLegoGL.cxx:1006
 TEveCaloLegoGL.cxx:1007
 TEveCaloLegoGL.cxx:1008
 TEveCaloLegoGL.cxx:1009
 TEveCaloLegoGL.cxx:1010
 TEveCaloLegoGL.cxx:1011
 TEveCaloLegoGL.cxx:1012
 TEveCaloLegoGL.cxx:1013
 TEveCaloLegoGL.cxx:1014
 TEveCaloLegoGL.cxx:1015
 TEveCaloLegoGL.cxx:1016
 TEveCaloLegoGL.cxx:1017
 TEveCaloLegoGL.cxx:1018
 TEveCaloLegoGL.cxx:1019
 TEveCaloLegoGL.cxx:1020
 TEveCaloLegoGL.cxx:1021
 TEveCaloLegoGL.cxx:1022
 TEveCaloLegoGL.cxx:1023
 TEveCaloLegoGL.cxx:1024
 TEveCaloLegoGL.cxx:1025
 TEveCaloLegoGL.cxx:1026
 TEveCaloLegoGL.cxx:1027
 TEveCaloLegoGL.cxx:1028
 TEveCaloLegoGL.cxx:1029
 TEveCaloLegoGL.cxx:1030
 TEveCaloLegoGL.cxx:1031
 TEveCaloLegoGL.cxx:1032
 TEveCaloLegoGL.cxx:1033
 TEveCaloLegoGL.cxx:1034
 TEveCaloLegoGL.cxx:1035
 TEveCaloLegoGL.cxx:1036
 TEveCaloLegoGL.cxx:1037
 TEveCaloLegoGL.cxx:1038
 TEveCaloLegoGL.cxx:1039
 TEveCaloLegoGL.cxx:1040
 TEveCaloLegoGL.cxx:1041
 TEveCaloLegoGL.cxx:1042
 TEveCaloLegoGL.cxx:1043
 TEveCaloLegoGL.cxx:1044
 TEveCaloLegoGL.cxx:1045
 TEveCaloLegoGL.cxx:1046
 TEveCaloLegoGL.cxx:1047
 TEveCaloLegoGL.cxx:1048
 TEveCaloLegoGL.cxx:1049
 TEveCaloLegoGL.cxx:1050
 TEveCaloLegoGL.cxx:1051
 TEveCaloLegoGL.cxx:1052
 TEveCaloLegoGL.cxx:1053
 TEveCaloLegoGL.cxx:1054
 TEveCaloLegoGL.cxx:1055
 TEveCaloLegoGL.cxx:1056
 TEveCaloLegoGL.cxx:1057
 TEveCaloLegoGL.cxx:1058
 TEveCaloLegoGL.cxx:1059
 TEveCaloLegoGL.cxx:1060
 TEveCaloLegoGL.cxx:1061
 TEveCaloLegoGL.cxx:1062
 TEveCaloLegoGL.cxx:1063
 TEveCaloLegoGL.cxx:1064
 TEveCaloLegoGL.cxx:1065
 TEveCaloLegoGL.cxx:1066
 TEveCaloLegoGL.cxx:1067
 TEveCaloLegoGL.cxx:1068
 TEveCaloLegoGL.cxx:1069
 TEveCaloLegoGL.cxx:1070
 TEveCaloLegoGL.cxx:1071
 TEveCaloLegoGL.cxx:1072
 TEveCaloLegoGL.cxx:1073
 TEveCaloLegoGL.cxx:1074
 TEveCaloLegoGL.cxx:1075
 TEveCaloLegoGL.cxx:1076
 TEveCaloLegoGL.cxx:1077
 TEveCaloLegoGL.cxx:1078
 TEveCaloLegoGL.cxx:1079
 TEveCaloLegoGL.cxx:1080
 TEveCaloLegoGL.cxx:1081
 TEveCaloLegoGL.cxx:1082
 TEveCaloLegoGL.cxx:1083
 TEveCaloLegoGL.cxx:1084
 TEveCaloLegoGL.cxx:1085
 TEveCaloLegoGL.cxx:1086
 TEveCaloLegoGL.cxx:1087
 TEveCaloLegoGL.cxx:1088
 TEveCaloLegoGL.cxx:1089
 TEveCaloLegoGL.cxx:1090
 TEveCaloLegoGL.cxx:1091
 TEveCaloLegoGL.cxx:1092
 TEveCaloLegoGL.cxx:1093
 TEveCaloLegoGL.cxx:1094
 TEveCaloLegoGL.cxx:1095
 TEveCaloLegoGL.cxx:1096
 TEveCaloLegoGL.cxx:1097
 TEveCaloLegoGL.cxx:1098
 TEveCaloLegoGL.cxx:1099
 TEveCaloLegoGL.cxx:1100
 TEveCaloLegoGL.cxx:1101
 TEveCaloLegoGL.cxx:1102
 TEveCaloLegoGL.cxx:1103
 TEveCaloLegoGL.cxx:1104
 TEveCaloLegoGL.cxx:1105
 TEveCaloLegoGL.cxx:1106
 TEveCaloLegoGL.cxx:1107
 TEveCaloLegoGL.cxx:1108
 TEveCaloLegoGL.cxx:1109
 TEveCaloLegoGL.cxx:1110
 TEveCaloLegoGL.cxx:1111
 TEveCaloLegoGL.cxx:1112
 TEveCaloLegoGL.cxx:1113
 TEveCaloLegoGL.cxx:1114
 TEveCaloLegoGL.cxx:1115
 TEveCaloLegoGL.cxx:1116
 TEveCaloLegoGL.cxx:1117
 TEveCaloLegoGL.cxx:1118
 TEveCaloLegoGL.cxx:1119
 TEveCaloLegoGL.cxx:1120
 TEveCaloLegoGL.cxx:1121
 TEveCaloLegoGL.cxx:1122
 TEveCaloLegoGL.cxx:1123
 TEveCaloLegoGL.cxx:1124
 TEveCaloLegoGL.cxx:1125
 TEveCaloLegoGL.cxx:1126
 TEveCaloLegoGL.cxx:1127
 TEveCaloLegoGL.cxx:1128
 TEveCaloLegoGL.cxx:1129
 TEveCaloLegoGL.cxx:1130
 TEveCaloLegoGL.cxx:1131
 TEveCaloLegoGL.cxx:1132
 TEveCaloLegoGL.cxx:1133
 TEveCaloLegoGL.cxx:1134
 TEveCaloLegoGL.cxx:1135
 TEveCaloLegoGL.cxx:1136
 TEveCaloLegoGL.cxx:1137
 TEveCaloLegoGL.cxx:1138
 TEveCaloLegoGL.cxx:1139
 TEveCaloLegoGL.cxx:1140
 TEveCaloLegoGL.cxx:1141
 TEveCaloLegoGL.cxx:1142
 TEveCaloLegoGL.cxx:1143
 TEveCaloLegoGL.cxx:1144
 TEveCaloLegoGL.cxx:1145
 TEveCaloLegoGL.cxx:1146
 TEveCaloLegoGL.cxx:1147
 TEveCaloLegoGL.cxx:1148
 TEveCaloLegoGL.cxx:1149
 TEveCaloLegoGL.cxx:1150
 TEveCaloLegoGL.cxx:1151
 TEveCaloLegoGL.cxx:1152
 TEveCaloLegoGL.cxx:1153
 TEveCaloLegoGL.cxx:1154
 TEveCaloLegoGL.cxx:1155
 TEveCaloLegoGL.cxx:1156
 TEveCaloLegoGL.cxx:1157
 TEveCaloLegoGL.cxx:1158
 TEveCaloLegoGL.cxx:1159
 TEveCaloLegoGL.cxx:1160
 TEveCaloLegoGL.cxx:1161
 TEveCaloLegoGL.cxx:1162
 TEveCaloLegoGL.cxx:1163
 TEveCaloLegoGL.cxx:1164
 TEveCaloLegoGL.cxx:1165
 TEveCaloLegoGL.cxx:1166
 TEveCaloLegoGL.cxx:1167
 TEveCaloLegoGL.cxx:1168
 TEveCaloLegoGL.cxx:1169
 TEveCaloLegoGL.cxx:1170
 TEveCaloLegoGL.cxx:1171
 TEveCaloLegoGL.cxx:1172
 TEveCaloLegoGL.cxx:1173
 TEveCaloLegoGL.cxx:1174
 TEveCaloLegoGL.cxx:1175
 TEveCaloLegoGL.cxx:1176
 TEveCaloLegoGL.cxx:1177
 TEveCaloLegoGL.cxx:1178
 TEveCaloLegoGL.cxx:1179
 TEveCaloLegoGL.cxx:1180
 TEveCaloLegoGL.cxx:1181
 TEveCaloLegoGL.cxx:1182
 TEveCaloLegoGL.cxx:1183
 TEveCaloLegoGL.cxx:1184
 TEveCaloLegoGL.cxx:1185
 TEveCaloLegoGL.cxx:1186
 TEveCaloLegoGL.cxx:1187
 TEveCaloLegoGL.cxx:1188
 TEveCaloLegoGL.cxx:1189
 TEveCaloLegoGL.cxx:1190
 TEveCaloLegoGL.cxx:1191
 TEveCaloLegoGL.cxx:1192
 TEveCaloLegoGL.cxx:1193
 TEveCaloLegoGL.cxx:1194
 TEveCaloLegoGL.cxx:1195
 TEveCaloLegoGL.cxx:1196
 TEveCaloLegoGL.cxx:1197
 TEveCaloLegoGL.cxx:1198
 TEveCaloLegoGL.cxx:1199
 TEveCaloLegoGL.cxx:1200
 TEveCaloLegoGL.cxx:1201
 TEveCaloLegoGL.cxx:1202
 TEveCaloLegoGL.cxx:1203
 TEveCaloLegoGL.cxx:1204
 TEveCaloLegoGL.cxx:1205
 TEveCaloLegoGL.cxx:1206
 TEveCaloLegoGL.cxx:1207
 TEveCaloLegoGL.cxx:1208
 TEveCaloLegoGL.cxx:1209
 TEveCaloLegoGL.cxx:1210
 TEveCaloLegoGL.cxx:1211
 TEveCaloLegoGL.cxx:1212
 TEveCaloLegoGL.cxx:1213
 TEveCaloLegoGL.cxx:1214
 TEveCaloLegoGL.cxx:1215
 TEveCaloLegoGL.cxx:1216
 TEveCaloLegoGL.cxx:1217
 TEveCaloLegoGL.cxx:1218
 TEveCaloLegoGL.cxx:1219
 TEveCaloLegoGL.cxx:1220
 TEveCaloLegoGL.cxx:1221
 TEveCaloLegoGL.cxx:1222
 TEveCaloLegoGL.cxx:1223
 TEveCaloLegoGL.cxx:1224
 TEveCaloLegoGL.cxx:1225
 TEveCaloLegoGL.cxx:1226
 TEveCaloLegoGL.cxx:1227
 TEveCaloLegoGL.cxx:1228
 TEveCaloLegoGL.cxx:1229
 TEveCaloLegoGL.cxx:1230
 TEveCaloLegoGL.cxx:1231
 TEveCaloLegoGL.cxx:1232
 TEveCaloLegoGL.cxx:1233
 TEveCaloLegoGL.cxx:1234
 TEveCaloLegoGL.cxx:1235
 TEveCaloLegoGL.cxx:1236
 TEveCaloLegoGL.cxx:1237
 TEveCaloLegoGL.cxx:1238
 TEveCaloLegoGL.cxx:1239
 TEveCaloLegoGL.cxx:1240
 TEveCaloLegoGL.cxx:1241
 TEveCaloLegoGL.cxx:1242
 TEveCaloLegoGL.cxx:1243
 TEveCaloLegoGL.cxx:1244
 TEveCaloLegoGL.cxx:1245
 TEveCaloLegoGL.cxx:1246
 TEveCaloLegoGL.cxx:1247
 TEveCaloLegoGL.cxx:1248
 TEveCaloLegoGL.cxx:1249
 TEveCaloLegoGL.cxx:1250
 TEveCaloLegoGL.cxx:1251
 TEveCaloLegoGL.cxx:1252
 TEveCaloLegoGL.cxx:1253
 TEveCaloLegoGL.cxx:1254
 TEveCaloLegoGL.cxx:1255
 TEveCaloLegoGL.cxx:1256
 TEveCaloLegoGL.cxx:1257
 TEveCaloLegoGL.cxx:1258
 TEveCaloLegoGL.cxx:1259
 TEveCaloLegoGL.cxx:1260
 TEveCaloLegoGL.cxx:1261
 TEveCaloLegoGL.cxx:1262
 TEveCaloLegoGL.cxx:1263
 TEveCaloLegoGL.cxx:1264
 TEveCaloLegoGL.cxx:1265
 TEveCaloLegoGL.cxx:1266
 TEveCaloLegoGL.cxx:1267
 TEveCaloLegoGL.cxx:1268
 TEveCaloLegoGL.cxx:1269
 TEveCaloLegoGL.cxx:1270
 TEveCaloLegoGL.cxx:1271
 TEveCaloLegoGL.cxx:1272
 TEveCaloLegoGL.cxx:1273
 TEveCaloLegoGL.cxx:1274
 TEveCaloLegoGL.cxx:1275
 TEveCaloLegoGL.cxx:1276
 TEveCaloLegoGL.cxx:1277
 TEveCaloLegoGL.cxx:1278
 TEveCaloLegoGL.cxx:1279
 TEveCaloLegoGL.cxx:1280
 TEveCaloLegoGL.cxx:1281
 TEveCaloLegoGL.cxx:1282
 TEveCaloLegoGL.cxx:1283
 TEveCaloLegoGL.cxx:1284
 TEveCaloLegoGL.cxx:1285
 TEveCaloLegoGL.cxx:1286
 TEveCaloLegoGL.cxx:1287
 TEveCaloLegoGL.cxx:1288
 TEveCaloLegoGL.cxx:1289
 TEveCaloLegoGL.cxx:1290
 TEveCaloLegoGL.cxx:1291
 TEveCaloLegoGL.cxx:1292
 TEveCaloLegoGL.cxx:1293
 TEveCaloLegoGL.cxx:1294
 TEveCaloLegoGL.cxx:1295
 TEveCaloLegoGL.cxx:1296
 TEveCaloLegoGL.cxx:1297
 TEveCaloLegoGL.cxx:1298
 TEveCaloLegoGL.cxx:1299
 TEveCaloLegoGL.cxx:1300
 TEveCaloLegoGL.cxx:1301
 TEveCaloLegoGL.cxx:1302
 TEveCaloLegoGL.cxx:1303
 TEveCaloLegoGL.cxx:1304
 TEveCaloLegoGL.cxx:1305
 TEveCaloLegoGL.cxx:1306
 TEveCaloLegoGL.cxx:1307
 TEveCaloLegoGL.cxx:1308
 TEveCaloLegoGL.cxx:1309
 TEveCaloLegoGL.cxx:1310
 TEveCaloLegoGL.cxx:1311
 TEveCaloLegoGL.cxx:1312
 TEveCaloLegoGL.cxx:1313
 TEveCaloLegoGL.cxx:1314
 TEveCaloLegoGL.cxx:1315
 TEveCaloLegoGL.cxx:1316
 TEveCaloLegoGL.cxx:1317
 TEveCaloLegoGL.cxx:1318
 TEveCaloLegoGL.cxx:1319
 TEveCaloLegoGL.cxx:1320
 TEveCaloLegoGL.cxx:1321
 TEveCaloLegoGL.cxx:1322
 TEveCaloLegoGL.cxx:1323
 TEveCaloLegoGL.cxx:1324
 TEveCaloLegoGL.cxx:1325
 TEveCaloLegoGL.cxx:1326
 TEveCaloLegoGL.cxx:1327
 TEveCaloLegoGL.cxx:1328
 TEveCaloLegoGL.cxx:1329
 TEveCaloLegoGL.cxx:1330
 TEveCaloLegoGL.cxx:1331
 TEveCaloLegoGL.cxx:1332
 TEveCaloLegoGL.cxx:1333
 TEveCaloLegoGL.cxx:1334
 TEveCaloLegoGL.cxx:1335
 TEveCaloLegoGL.cxx:1336
 TEveCaloLegoGL.cxx:1337
 TEveCaloLegoGL.cxx:1338
 TEveCaloLegoGL.cxx:1339
 TEveCaloLegoGL.cxx:1340
 TEveCaloLegoGL.cxx:1341
 TEveCaloLegoGL.cxx:1342
 TEveCaloLegoGL.cxx:1343
 TEveCaloLegoGL.cxx:1344
 TEveCaloLegoGL.cxx:1345
 TEveCaloLegoGL.cxx:1346
 TEveCaloLegoGL.cxx:1347
 TEveCaloLegoGL.cxx:1348
 TEveCaloLegoGL.cxx:1349
 TEveCaloLegoGL.cxx:1350
 TEveCaloLegoGL.cxx:1351
 TEveCaloLegoGL.cxx:1352
 TEveCaloLegoGL.cxx:1353
 TEveCaloLegoGL.cxx:1354
 TEveCaloLegoGL.cxx:1355
 TEveCaloLegoGL.cxx:1356
 TEveCaloLegoGL.cxx:1357
 TEveCaloLegoGL.cxx:1358
 TEveCaloLegoGL.cxx:1359
 TEveCaloLegoGL.cxx:1360
 TEveCaloLegoGL.cxx:1361
 TEveCaloLegoGL.cxx:1362
 TEveCaloLegoGL.cxx:1363
 TEveCaloLegoGL.cxx:1364
 TEveCaloLegoGL.cxx:1365
 TEveCaloLegoGL.cxx:1366
 TEveCaloLegoGL.cxx:1367
 TEveCaloLegoGL.cxx:1368
 TEveCaloLegoGL.cxx:1369
 TEveCaloLegoGL.cxx:1370
 TEveCaloLegoGL.cxx:1371
 TEveCaloLegoGL.cxx:1372
 TEveCaloLegoGL.cxx:1373
 TEveCaloLegoGL.cxx:1374
 TEveCaloLegoGL.cxx:1375
 TEveCaloLegoGL.cxx:1376
 TEveCaloLegoGL.cxx:1377
 TEveCaloLegoGL.cxx:1378
 TEveCaloLegoGL.cxx:1379
 TEveCaloLegoGL.cxx:1380
 TEveCaloLegoGL.cxx:1381
 TEveCaloLegoGL.cxx:1382
 TEveCaloLegoGL.cxx:1383
 TEveCaloLegoGL.cxx:1384
 TEveCaloLegoGL.cxx:1385
 TEveCaloLegoGL.cxx:1386
 TEveCaloLegoGL.cxx:1387
 TEveCaloLegoGL.cxx:1388
 TEveCaloLegoGL.cxx:1389
 TEveCaloLegoGL.cxx:1390
 TEveCaloLegoGL.cxx:1391
 TEveCaloLegoGL.cxx:1392
 TEveCaloLegoGL.cxx:1393
 TEveCaloLegoGL.cxx:1394
 TEveCaloLegoGL.cxx:1395
 TEveCaloLegoGL.cxx:1396
 TEveCaloLegoGL.cxx:1397
 TEveCaloLegoGL.cxx:1398
 TEveCaloLegoGL.cxx:1399
 TEveCaloLegoGL.cxx:1400
 TEveCaloLegoGL.cxx:1401
 TEveCaloLegoGL.cxx:1402
 TEveCaloLegoGL.cxx:1403
 TEveCaloLegoGL.cxx:1404
 TEveCaloLegoGL.cxx:1405
 TEveCaloLegoGL.cxx:1406
 TEveCaloLegoGL.cxx:1407
 TEveCaloLegoGL.cxx:1408
 TEveCaloLegoGL.cxx:1409
 TEveCaloLegoGL.cxx:1410
 TEveCaloLegoGL.cxx:1411
 TEveCaloLegoGL.cxx:1412
 TEveCaloLegoGL.cxx:1413
 TEveCaloLegoGL.cxx:1414
 TEveCaloLegoGL.cxx:1415
 TEveCaloLegoGL.cxx:1416
 TEveCaloLegoGL.cxx:1417
 TEveCaloLegoGL.cxx:1418
 TEveCaloLegoGL.cxx:1419
 TEveCaloLegoGL.cxx:1420
 TEveCaloLegoGL.cxx:1421
 TEveCaloLegoGL.cxx:1422
 TEveCaloLegoGL.cxx:1423
 TEveCaloLegoGL.cxx:1424
 TEveCaloLegoGL.cxx:1425
 TEveCaloLegoGL.cxx:1426
 TEveCaloLegoGL.cxx:1427
 TEveCaloLegoGL.cxx:1428
 TEveCaloLegoGL.cxx:1429
 TEveCaloLegoGL.cxx:1430
 TEveCaloLegoGL.cxx:1431
 TEveCaloLegoGL.cxx:1432
 TEveCaloLegoGL.cxx:1433
 TEveCaloLegoGL.cxx:1434
 TEveCaloLegoGL.cxx:1435
 TEveCaloLegoGL.cxx:1436
 TEveCaloLegoGL.cxx:1437
 TEveCaloLegoGL.cxx:1438
 TEveCaloLegoGL.cxx:1439
 TEveCaloLegoGL.cxx:1440
 TEveCaloLegoGL.cxx:1441
 TEveCaloLegoGL.cxx:1442
 TEveCaloLegoGL.cxx:1443
 TEveCaloLegoGL.cxx:1444