ROOT logo
// @(#)root/eve:$Id: TEveCaloLegoOverlay.cxx 27643 2009-02-27 16:13:24Z matevz $
// 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 "TEveCaloLegoOverlay.h"

#include "TAxis.h"

#include "TGLRnrCtx.h"
#include "TGLIncludes.h"
#include "TGLSelectRecord.h"
#include "TGLUtil.h"
#include "TGLCamera.h"
#include "TGLAxisPainter.h"

#include "TEveCalo.h"
#include "TEveCaloData.h"


//______________________________________________________________________________
//
//
// GL-overaly control GUI for TEveCaloLego.
//
//

ClassImp(TEveCaloLegoOverlay);

//______________________________________________________________________________
TEveCaloLegoOverlay::TEveCaloLegoOverlay() :
   TGLCameraOverlay(),
   TEveElementList("Lego Menu", "TEveCaloLegoOverlay", kTRUE),
   fHeaderSelected(kFALSE),

   fCalo(0),
   fSliderAxis(0),
   fMainColor(kGray),

   fShowCamera(kTRUE),
   fShowPlane(kFALSE),

   fMenuW(0.08),
   fButtonW(0.5),
   fSliderH(0.6),
   fSliderPosY(0.15),

   fShowSlider(kFALSE),
   fSliderVal(0),

   fActiveID(-1),
   fActiveCol(kRed-4)
{
   // Constructor.
  fMainColorPtr = &fMainColor;
  fSliderAxis = new TAxis();

}


/******************************************************************************/
void TEveCaloLegoOverlay::DrawSlider(TGLRnrCtx& rnrCtx)
{
   // Draw slider and calorimeter Z scale on left side of screen.

   glTranslatef(0, fSliderPosY, 0.5);

   // event handler
   if (rnrCtx.Selection())
   {
      glLoadName(2);
      Float_t w = fButtonW*fMenuW*0.5f;
      glBegin(GL_QUADS);
      glVertex2f(-w, 0);
      glVertex2f( w, 0);
      glVertex2f( w, fSliderH);
      glVertex2f(-w, fSliderH);
      glEnd();
   }

   // render
   if ( fCalo->GetData() && fCalo->GetData()->Empty() == kFALSE)
   {
      // slider axis
      Double_t maxVal = fCalo->GetMaxVal();
      fAxisPainter->SetLabelPixelFontSize(TMath::CeilNint(rnrCtx.GetCamera()->RefViewport().Height()*0.06));
      fAxisPainter->RefDir().Set(0, 1, 0);
      fAxisPainter->RefTMOff(0).Set(1, 0, 0);
      fAxisPainter->SetLabelAlign(TGLFont::kLeft);
      fSliderAxis->SetRangeUser(0, maxVal);
      fSliderAxis->SetLimits(0, maxVal);
      fSliderAxis->SetNdivisions(710);
      fSliderAxis->SetTickLength(0.02*maxVal);
      fSliderAxis->SetLabelOffset(0.02*maxVal);
      fSliderAxis->SetLabelSize(0.05);
      fSliderAxis->SetAxisColor(fMainColor);
      fSliderAxis->SetLabelColor(fMainColor);

      glPushMatrix();
      glScalef(fSliderH/maxVal, fSliderH/maxVal, 1.);
      fAxisPainter->PaintAxis(rnrCtx, fSliderAxis);
      glPopMatrix();

      // marker
      TGLUtil::Color((fActiveID == 2) ? fActiveCol : 3);
      glPointSize(8);
      glBegin(GL_POINTS);
      glVertex3f(0, fSliderVal*fSliderH, -0.1);
      glEnd();
   }
}

//______________________________________________________________________________
void TEveCaloLegoOverlay::RenderPlaneInterface(TGLRnrCtx &rnrCtx)
{
   // Render menu for plane-value and the plane if marked.

   TGLCapabilitySwitch lights_off(GL_LIGHTING, kFALSE);
   glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT | GL_LINE_BIT | GL_POINT_BIT);
   glEnable(GL_POINT_SMOOTH);
   glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
   glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
   glEnable(GL_POLYGON_OFFSET_FILL);
   glPolygonOffset(0.1, 1);
   glDisable(GL_CULL_FACE);
   glEnable(GL_BLEND);
   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
   glPushName(0);


   // move to the center of menu
   glPushMatrix();
   glTranslatef(1 -fMenuW, 0, 0); // translate to lower left corner

   // button
   glPushMatrix();
   glTranslatef(0, (1-fButtonW )*fMenuW*0.8, 0);
   glLoadName(1);
   Float_t a=0.6;
   (fActiveID == 1) ? TGLUtil::Color(fActiveCol):TGLUtil::Color4f(0, 1, 0, a);
   Float_t bw = fButtonW*fMenuW*0.5;
   Float_t bwt = bw*0.8;
   Float_t bh = fButtonW*fMenuW;
   glBegin(GL_QUADS);
   glVertex2f(-bw, 0);
   glVertex2f( bw, 0);
   glVertex2f( bwt, bh);
   glVertex2f(-bwt, bh);
   glEnd();

   TGLUtil::Color(4);

   glLineWidth(1);
   glBegin(GL_LINES);
   glVertex2f(0, 0); glVertex2f(0, bh);
   glVertex2f((bw+bwt)*0.5, bh*0.5); glVertex2f(-(bw+bwt)*0.5, bh*0.5);
   glEnd();

   glLineWidth(2);
   glBegin(GL_LINE_LOOP);
   glVertex2f(-bw, 0);
   glVertex2f( bw, 0);
   glVertex2f( bwt, bh);
   glVertex2f(-bwt, bh);
   glEnd();
   glLineWidth(1);

   glPopMatrix();
   if (fShowSlider) DrawSlider(rnrCtx);

   glPopName();
   glPopAttrib();

   glPopMatrix();

}

/******************************************************************************/
void TEveCaloLegoOverlay::RenderHeader(TGLRnrCtx& rnrCtx)
{
   // Render text on top right corner of the screen.

   TGLRect &vp = rnrCtx.GetCamera()->RefViewport();

   TGLFont font;
   Int_t fs = TGLFontManager::GetFontSize(vp.Height()*0.035, 12, 36);
   rnrCtx.RegisterFont(fs, "arial", TGLFont::kPixmap, font);
   Float_t off = fs*0.2;
   Float_t bb[6];
   font.BBox(fHeaderTxt.Data(), bb[0], bb[1], bb[2], bb[3], bb[4], bb[5]);
   Float_t x = vp.Width() -bb[3] -off;
   Float_t y = vp.Height() -bb[4] -off;
   if (rnrCtx.Selection())
   {
      glPushName(0);
      glLoadName(3);
      glBegin(GL_QUADS);
      glVertex2f(x/vp.Width(), y/ vp.Height());
      glVertex2f(1,  y/ vp.Height());
      glVertex2f(1, 1);
      glVertex2f(x/vp.Width(), 1);
      glEnd();
      glPopName();
   }
   else
   {
      TGLUtil::Color(fHeaderSelected ? fActiveCol : fCalo->GetFontColor());
      glRasterPos2i(0, 0);
      glBitmap(0, 0, 0, 0, x, y, 0);
      font.Render(fHeaderTxt.Data());
   }
}

/******************************************************************************/
void TEveCaloLegoOverlay::Render(TGLRnrCtx& rnrCtx)
{
   // Render the overlay elements.

   if (fShowPlane || fHeaderTxt.Length())
   {
      // go to normalised coordinates
      glMatrixMode(GL_PROJECTION);
      glPushMatrix();
      glLoadIdentity();
      if (rnrCtx.Selection())
      {
         TGLRect rect(*rnrCtx.GetPickRectangle());
         rnrCtx.GetCamera()->WindowToViewport(rect);
         gluPickMatrix(rect.X(), rect.Y(), rect.Width(), rect.Height(), rnrCtx.RefCamera().RefViewport().CArr());
      }
      glMatrixMode(GL_MODELVIEW);
      glPushMatrix();
      glLoadIdentity();

      glTranslatef(-1, -1, 0);

      glScalef(2, 2, 1);
      if (fShowPlane) RenderPlaneInterface(rnrCtx);
      RenderHeader(rnrCtx);

      glPopMatrix();
      glMatrixMode(GL_PROJECTION);
      glPopMatrix();
      glMatrixMode(GL_MODELVIEW);
   }


   // call TGLCamera overlay render
   if (fShowCamera)
   {
      TGLCamera& cam = rnrCtx.RefCamera();
      TGLRect& vp = cam.RefViewport();
      Bool_t skip = kFALSE;
      // check if lego axis are already visible
      if (cam.IsOrthographic())
      {
         using namespace TMath;

         Float_t x0 = fCalo->GetEtaMin();
         Float_t y0 = fCalo->GetPhiMin();

         const GLdouble *pm = rnrCtx.RefCamera().RefLastNoPickProjM().CArr();
         GLdouble mm[16];
         glGetDoublev(GL_MODELVIEW_MATRIX,  mm);

         GLdouble x, y, z;
         gluProject(x0, y0, 0, mm, pm, (Int_t*)vp.CArr(), &x, &y, &z);
         // viewport height goes from top to bottom
         if ( x > vp.Left() && y > vp.Top())
            skip = kTRUE;
      }

      if (!skip) TGLCameraOverlay::Render(rnrCtx);
   }
}

/******************************************************************************/
// Virtual event handlers from TGLOverlayElement
/******************************************************************************/

Bool_t TEveCaloLegoOverlay::SetSliderVal(Event_t* event, TGLRnrCtx &rnrCtx)
{
   // Set height of horizontal plane in the calorimeter.

   TGLRect& wprt = rnrCtx.RefCamera().RefViewport();
   fSliderVal = (1 -event->fY*1./wprt.Height() -fSliderPosY)/fSliderH;

   if (fSliderVal < 0 )
      fSliderVal = 0;
   else if (fSliderVal > 1)
      fSliderVal = 1;

   fCalo->SetHPlaneVal(fSliderVal);

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TEveCaloLegoOverlay::Handle(TGLRnrCtx          & rnrCtx,
                               TGLOvlSelectRecord & rec,
                               Event_t            * event)
{
   // Handle overlay event.
   // Return TRUE if event was handled.

   switch (event->fType)
   {
      case kMotionNotify:
      {
         Int_t item = rec.GetN() < 2 ? -1 : (Int_t)rec.GetItem(1);
         if (fActiveID != item) {
            fActiveID = item;
            return kTRUE;
         } else {
            if (fActiveID == 2 && event->fState == 256)
               return SetSliderVal(event, rnrCtx);

            return kFALSE;
         }
         break;
      }
      case kButtonPress:
      {
         if (event->fCode != kButton1) {
            return kFALSE;
         }
         switch (rec.GetItem(1))
         {
            case 1:
               fShowSlider = !fShowSlider;
               fCalo->SetDrawHPlane(fShowSlider);
               break;
            case 2:
               return SetSliderVal(event, rnrCtx);
            case 3:
               fHeaderSelected = !fHeaderSelected;
            default:
               break;
         }
      }
      default:
         break;
   }
   return kFALSE;
}

//______________________________________________________________________________
Bool_t TEveCaloLegoOverlay::MouseEnter(TGLOvlSelectRecord& /*rec*/)
{
   // Mouse has entered overlay area.

   return kTRUE;
}

//______________________________________________________________________________
void TEveCaloLegoOverlay::MouseLeave()
{
   // Mouse has left overlay area.

   fActiveID = -1;
}
 TEveCaloLegoOverlay.cxx:1
 TEveCaloLegoOverlay.cxx:2
 TEveCaloLegoOverlay.cxx:3
 TEveCaloLegoOverlay.cxx:4
 TEveCaloLegoOverlay.cxx:5
 TEveCaloLegoOverlay.cxx:6
 TEveCaloLegoOverlay.cxx:7
 TEveCaloLegoOverlay.cxx:8
 TEveCaloLegoOverlay.cxx:9
 TEveCaloLegoOverlay.cxx:10
 TEveCaloLegoOverlay.cxx:11
 TEveCaloLegoOverlay.cxx:12
 TEveCaloLegoOverlay.cxx:13
 TEveCaloLegoOverlay.cxx:14
 TEveCaloLegoOverlay.cxx:15
 TEveCaloLegoOverlay.cxx:16
 TEveCaloLegoOverlay.cxx:17
 TEveCaloLegoOverlay.cxx:18
 TEveCaloLegoOverlay.cxx:19
 TEveCaloLegoOverlay.cxx:20
 TEveCaloLegoOverlay.cxx:21
 TEveCaloLegoOverlay.cxx:22
 TEveCaloLegoOverlay.cxx:23
 TEveCaloLegoOverlay.cxx:24
 TEveCaloLegoOverlay.cxx:25
 TEveCaloLegoOverlay.cxx:26
 TEveCaloLegoOverlay.cxx:27
 TEveCaloLegoOverlay.cxx:28
 TEveCaloLegoOverlay.cxx:29
 TEveCaloLegoOverlay.cxx:30
 TEveCaloLegoOverlay.cxx:31
 TEveCaloLegoOverlay.cxx:32
 TEveCaloLegoOverlay.cxx:33
 TEveCaloLegoOverlay.cxx:34
 TEveCaloLegoOverlay.cxx:35
 TEveCaloLegoOverlay.cxx:36
 TEveCaloLegoOverlay.cxx:37
 TEveCaloLegoOverlay.cxx:38
 TEveCaloLegoOverlay.cxx:39
 TEveCaloLegoOverlay.cxx:40
 TEveCaloLegoOverlay.cxx:41
 TEveCaloLegoOverlay.cxx:42
 TEveCaloLegoOverlay.cxx:43
 TEveCaloLegoOverlay.cxx:44
 TEveCaloLegoOverlay.cxx:45
 TEveCaloLegoOverlay.cxx:46
 TEveCaloLegoOverlay.cxx:47
 TEveCaloLegoOverlay.cxx:48
 TEveCaloLegoOverlay.cxx:49
 TEveCaloLegoOverlay.cxx:50
 TEveCaloLegoOverlay.cxx:51
 TEveCaloLegoOverlay.cxx:52
 TEveCaloLegoOverlay.cxx:53
 TEveCaloLegoOverlay.cxx:54
 TEveCaloLegoOverlay.cxx:55
 TEveCaloLegoOverlay.cxx:56
 TEveCaloLegoOverlay.cxx:57
 TEveCaloLegoOverlay.cxx:58
 TEveCaloLegoOverlay.cxx:59
 TEveCaloLegoOverlay.cxx:60
 TEveCaloLegoOverlay.cxx:61
 TEveCaloLegoOverlay.cxx:62
 TEveCaloLegoOverlay.cxx:63
 TEveCaloLegoOverlay.cxx:64
 TEveCaloLegoOverlay.cxx:65
 TEveCaloLegoOverlay.cxx:66
 TEveCaloLegoOverlay.cxx:67
 TEveCaloLegoOverlay.cxx:68
 TEveCaloLegoOverlay.cxx:69
 TEveCaloLegoOverlay.cxx:70
 TEveCaloLegoOverlay.cxx:71
 TEveCaloLegoOverlay.cxx:72
 TEveCaloLegoOverlay.cxx:73
 TEveCaloLegoOverlay.cxx:74
 TEveCaloLegoOverlay.cxx:75
 TEveCaloLegoOverlay.cxx:76
 TEveCaloLegoOverlay.cxx:77
 TEveCaloLegoOverlay.cxx:78
 TEveCaloLegoOverlay.cxx:79
 TEveCaloLegoOverlay.cxx:80
 TEveCaloLegoOverlay.cxx:81
 TEveCaloLegoOverlay.cxx:82
 TEveCaloLegoOverlay.cxx:83
 TEveCaloLegoOverlay.cxx:84
 TEveCaloLegoOverlay.cxx:85
 TEveCaloLegoOverlay.cxx:86
 TEveCaloLegoOverlay.cxx:87
 TEveCaloLegoOverlay.cxx:88
 TEveCaloLegoOverlay.cxx:89
 TEveCaloLegoOverlay.cxx:90
 TEveCaloLegoOverlay.cxx:91
 TEveCaloLegoOverlay.cxx:92
 TEveCaloLegoOverlay.cxx:93
 TEveCaloLegoOverlay.cxx:94
 TEveCaloLegoOverlay.cxx:95
 TEveCaloLegoOverlay.cxx:96
 TEveCaloLegoOverlay.cxx:97
 TEveCaloLegoOverlay.cxx:98
 TEveCaloLegoOverlay.cxx:99
 TEveCaloLegoOverlay.cxx:100
 TEveCaloLegoOverlay.cxx:101
 TEveCaloLegoOverlay.cxx:102
 TEveCaloLegoOverlay.cxx:103
 TEveCaloLegoOverlay.cxx:104
 TEveCaloLegoOverlay.cxx:105
 TEveCaloLegoOverlay.cxx:106
 TEveCaloLegoOverlay.cxx:107
 TEveCaloLegoOverlay.cxx:108
 TEveCaloLegoOverlay.cxx:109
 TEveCaloLegoOverlay.cxx:110
 TEveCaloLegoOverlay.cxx:111
 TEveCaloLegoOverlay.cxx:112
 TEveCaloLegoOverlay.cxx:113
 TEveCaloLegoOverlay.cxx:114
 TEveCaloLegoOverlay.cxx:115
 TEveCaloLegoOverlay.cxx:116
 TEveCaloLegoOverlay.cxx:117
 TEveCaloLegoOverlay.cxx:118
 TEveCaloLegoOverlay.cxx:119
 TEveCaloLegoOverlay.cxx:120
 TEveCaloLegoOverlay.cxx:121
 TEveCaloLegoOverlay.cxx:122
 TEveCaloLegoOverlay.cxx:123
 TEveCaloLegoOverlay.cxx:124
 TEveCaloLegoOverlay.cxx:125
 TEveCaloLegoOverlay.cxx:126
 TEveCaloLegoOverlay.cxx:127
 TEveCaloLegoOverlay.cxx:128
 TEveCaloLegoOverlay.cxx:129
 TEveCaloLegoOverlay.cxx:130
 TEveCaloLegoOverlay.cxx:131
 TEveCaloLegoOverlay.cxx:132
 TEveCaloLegoOverlay.cxx:133
 TEveCaloLegoOverlay.cxx:134
 TEveCaloLegoOverlay.cxx:135
 TEveCaloLegoOverlay.cxx:136
 TEveCaloLegoOverlay.cxx:137
 TEveCaloLegoOverlay.cxx:138
 TEveCaloLegoOverlay.cxx:139
 TEveCaloLegoOverlay.cxx:140
 TEveCaloLegoOverlay.cxx:141
 TEveCaloLegoOverlay.cxx:142
 TEveCaloLegoOverlay.cxx:143
 TEveCaloLegoOverlay.cxx:144
 TEveCaloLegoOverlay.cxx:145
 TEveCaloLegoOverlay.cxx:146
 TEveCaloLegoOverlay.cxx:147
 TEveCaloLegoOverlay.cxx:148
 TEveCaloLegoOverlay.cxx:149
 TEveCaloLegoOverlay.cxx:150
 TEveCaloLegoOverlay.cxx:151
 TEveCaloLegoOverlay.cxx:152
 TEveCaloLegoOverlay.cxx:153
 TEveCaloLegoOverlay.cxx:154
 TEveCaloLegoOverlay.cxx:155
 TEveCaloLegoOverlay.cxx:156
 TEveCaloLegoOverlay.cxx:157
 TEveCaloLegoOverlay.cxx:158
 TEveCaloLegoOverlay.cxx:159
 TEveCaloLegoOverlay.cxx:160
 TEveCaloLegoOverlay.cxx:161
 TEveCaloLegoOverlay.cxx:162
 TEveCaloLegoOverlay.cxx:163
 TEveCaloLegoOverlay.cxx:164
 TEveCaloLegoOverlay.cxx:165
 TEveCaloLegoOverlay.cxx:166
 TEveCaloLegoOverlay.cxx:167
 TEveCaloLegoOverlay.cxx:168
 TEveCaloLegoOverlay.cxx:169
 TEveCaloLegoOverlay.cxx:170
 TEveCaloLegoOverlay.cxx:171
 TEveCaloLegoOverlay.cxx:172
 TEveCaloLegoOverlay.cxx:173
 TEveCaloLegoOverlay.cxx:174
 TEveCaloLegoOverlay.cxx:175
 TEveCaloLegoOverlay.cxx:176
 TEveCaloLegoOverlay.cxx:177
 TEveCaloLegoOverlay.cxx:178
 TEveCaloLegoOverlay.cxx:179
 TEveCaloLegoOverlay.cxx:180
 TEveCaloLegoOverlay.cxx:181
 TEveCaloLegoOverlay.cxx:182
 TEveCaloLegoOverlay.cxx:183
 TEveCaloLegoOverlay.cxx:184
 TEveCaloLegoOverlay.cxx:185
 TEveCaloLegoOverlay.cxx:186
 TEveCaloLegoOverlay.cxx:187
 TEveCaloLegoOverlay.cxx:188
 TEveCaloLegoOverlay.cxx:189
 TEveCaloLegoOverlay.cxx:190
 TEveCaloLegoOverlay.cxx:191
 TEveCaloLegoOverlay.cxx:192
 TEveCaloLegoOverlay.cxx:193
 TEveCaloLegoOverlay.cxx:194
 TEveCaloLegoOverlay.cxx:195
 TEveCaloLegoOverlay.cxx:196
 TEveCaloLegoOverlay.cxx:197
 TEveCaloLegoOverlay.cxx:198
 TEveCaloLegoOverlay.cxx:199
 TEveCaloLegoOverlay.cxx:200
 TEveCaloLegoOverlay.cxx:201
 TEveCaloLegoOverlay.cxx:202
 TEveCaloLegoOverlay.cxx:203
 TEveCaloLegoOverlay.cxx:204
 TEveCaloLegoOverlay.cxx:205
 TEveCaloLegoOverlay.cxx:206
 TEveCaloLegoOverlay.cxx:207
 TEveCaloLegoOverlay.cxx:208
 TEveCaloLegoOverlay.cxx:209
 TEveCaloLegoOverlay.cxx:210
 TEveCaloLegoOverlay.cxx:211
 TEveCaloLegoOverlay.cxx:212
 TEveCaloLegoOverlay.cxx:213
 TEveCaloLegoOverlay.cxx:214
 TEveCaloLegoOverlay.cxx:215
 TEveCaloLegoOverlay.cxx:216
 TEveCaloLegoOverlay.cxx:217
 TEveCaloLegoOverlay.cxx:218
 TEveCaloLegoOverlay.cxx:219
 TEveCaloLegoOverlay.cxx:220
 TEveCaloLegoOverlay.cxx:221
 TEveCaloLegoOverlay.cxx:222
 TEveCaloLegoOverlay.cxx:223
 TEveCaloLegoOverlay.cxx:224
 TEveCaloLegoOverlay.cxx:225
 TEveCaloLegoOverlay.cxx:226
 TEveCaloLegoOverlay.cxx:227
 TEveCaloLegoOverlay.cxx:228
 TEveCaloLegoOverlay.cxx:229
 TEveCaloLegoOverlay.cxx:230
 TEveCaloLegoOverlay.cxx:231
 TEveCaloLegoOverlay.cxx:232
 TEveCaloLegoOverlay.cxx:233
 TEveCaloLegoOverlay.cxx:234
 TEveCaloLegoOverlay.cxx:235
 TEveCaloLegoOverlay.cxx:236
 TEveCaloLegoOverlay.cxx:237
 TEveCaloLegoOverlay.cxx:238
 TEveCaloLegoOverlay.cxx:239
 TEveCaloLegoOverlay.cxx:240
 TEveCaloLegoOverlay.cxx:241
 TEveCaloLegoOverlay.cxx:242
 TEveCaloLegoOverlay.cxx:243
 TEveCaloLegoOverlay.cxx:244
 TEveCaloLegoOverlay.cxx:245
 TEveCaloLegoOverlay.cxx:246
 TEveCaloLegoOverlay.cxx:247
 TEveCaloLegoOverlay.cxx:248
 TEveCaloLegoOverlay.cxx:249
 TEveCaloLegoOverlay.cxx:250
 TEveCaloLegoOverlay.cxx:251
 TEveCaloLegoOverlay.cxx:252
 TEveCaloLegoOverlay.cxx:253
 TEveCaloLegoOverlay.cxx:254
 TEveCaloLegoOverlay.cxx:255
 TEveCaloLegoOverlay.cxx:256
 TEveCaloLegoOverlay.cxx:257
 TEveCaloLegoOverlay.cxx:258
 TEveCaloLegoOverlay.cxx:259
 TEveCaloLegoOverlay.cxx:260
 TEveCaloLegoOverlay.cxx:261
 TEveCaloLegoOverlay.cxx:262
 TEveCaloLegoOverlay.cxx:263
 TEveCaloLegoOverlay.cxx:264
 TEveCaloLegoOverlay.cxx:265
 TEveCaloLegoOverlay.cxx:266
 TEveCaloLegoOverlay.cxx:267
 TEveCaloLegoOverlay.cxx:268
 TEveCaloLegoOverlay.cxx:269
 TEveCaloLegoOverlay.cxx:270
 TEveCaloLegoOverlay.cxx:271
 TEveCaloLegoOverlay.cxx:272
 TEveCaloLegoOverlay.cxx:273
 TEveCaloLegoOverlay.cxx:274
 TEveCaloLegoOverlay.cxx:275
 TEveCaloLegoOverlay.cxx:276
 TEveCaloLegoOverlay.cxx:277
 TEveCaloLegoOverlay.cxx:278
 TEveCaloLegoOverlay.cxx:279
 TEveCaloLegoOverlay.cxx:280
 TEveCaloLegoOverlay.cxx:281
 TEveCaloLegoOverlay.cxx:282
 TEveCaloLegoOverlay.cxx:283
 TEveCaloLegoOverlay.cxx:284
 TEveCaloLegoOverlay.cxx:285
 TEveCaloLegoOverlay.cxx:286
 TEveCaloLegoOverlay.cxx:287
 TEveCaloLegoOverlay.cxx:288
 TEveCaloLegoOverlay.cxx:289
 TEveCaloLegoOverlay.cxx:290
 TEveCaloLegoOverlay.cxx:291
 TEveCaloLegoOverlay.cxx:292
 TEveCaloLegoOverlay.cxx:293
 TEveCaloLegoOverlay.cxx:294
 TEveCaloLegoOverlay.cxx:295
 TEveCaloLegoOverlay.cxx:296
 TEveCaloLegoOverlay.cxx:297
 TEveCaloLegoOverlay.cxx:298
 TEveCaloLegoOverlay.cxx:299
 TEveCaloLegoOverlay.cxx:300
 TEveCaloLegoOverlay.cxx:301
 TEveCaloLegoOverlay.cxx:302
 TEveCaloLegoOverlay.cxx:303
 TEveCaloLegoOverlay.cxx:304
 TEveCaloLegoOverlay.cxx:305
 TEveCaloLegoOverlay.cxx:306
 TEveCaloLegoOverlay.cxx:307
 TEveCaloLegoOverlay.cxx:308
 TEveCaloLegoOverlay.cxx:309
 TEveCaloLegoOverlay.cxx:310
 TEveCaloLegoOverlay.cxx:311
 TEveCaloLegoOverlay.cxx:312
 TEveCaloLegoOverlay.cxx:313
 TEveCaloLegoOverlay.cxx:314
 TEveCaloLegoOverlay.cxx:315
 TEveCaloLegoOverlay.cxx:316
 TEveCaloLegoOverlay.cxx:317
 TEveCaloLegoOverlay.cxx:318
 TEveCaloLegoOverlay.cxx:319
 TEveCaloLegoOverlay.cxx:320
 TEveCaloLegoOverlay.cxx:321
 TEveCaloLegoOverlay.cxx:322
 TEveCaloLegoOverlay.cxx:323
 TEveCaloLegoOverlay.cxx:324
 TEveCaloLegoOverlay.cxx:325
 TEveCaloLegoOverlay.cxx:326
 TEveCaloLegoOverlay.cxx:327
 TEveCaloLegoOverlay.cxx:328
 TEveCaloLegoOverlay.cxx:329
 TEveCaloLegoOverlay.cxx:330
 TEveCaloLegoOverlay.cxx:331
 TEveCaloLegoOverlay.cxx:332
 TEveCaloLegoOverlay.cxx:333
 TEveCaloLegoOverlay.cxx:334
 TEveCaloLegoOverlay.cxx:335
 TEveCaloLegoOverlay.cxx:336
 TEveCaloLegoOverlay.cxx:337
 TEveCaloLegoOverlay.cxx:338
 TEveCaloLegoOverlay.cxx:339
 TEveCaloLegoOverlay.cxx:340
 TEveCaloLegoOverlay.cxx:341
 TEveCaloLegoOverlay.cxx:342
 TEveCaloLegoOverlay.cxx:343
 TEveCaloLegoOverlay.cxx:344
 TEveCaloLegoOverlay.cxx:345
 TEveCaloLegoOverlay.cxx:346
 TEveCaloLegoOverlay.cxx:347
 TEveCaloLegoOverlay.cxx:348
 TEveCaloLegoOverlay.cxx:349
 TEveCaloLegoOverlay.cxx:350
 TEveCaloLegoOverlay.cxx:351
 TEveCaloLegoOverlay.cxx:352
 TEveCaloLegoOverlay.cxx:353
 TEveCaloLegoOverlay.cxx:354
 TEveCaloLegoOverlay.cxx:355
 TEveCaloLegoOverlay.cxx:356
 TEveCaloLegoOverlay.cxx:357
 TEveCaloLegoOverlay.cxx:358
 TEveCaloLegoOverlay.cxx:359
 TEveCaloLegoOverlay.cxx:360
 TEveCaloLegoOverlay.cxx:361
 TEveCaloLegoOverlay.cxx:362
 TEveCaloLegoOverlay.cxx:363
 TEveCaloLegoOverlay.cxx:364
 TEveCaloLegoOverlay.cxx:365
 TEveCaloLegoOverlay.cxx:366
 TEveCaloLegoOverlay.cxx:367