ROOT logo
// @(#)root/geompainter:$Id: TGeoPainter.cxx 31454 2009-11-30 07:39:14Z brun $
// Author: Andrei Gheata   05/03/02
/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//______________________________________________________________________________
// TGeoPainter - class implementing all draw interfaces for a generic 3D viewer
// using TBuffer3D mechanism.
//______________________________________________________________________________

#include "TROOT.h"
#include "TClass.h"
#include "TColor.h"
#include "TPoint.h"
#include "TView.h"
#include "TAttLine.h"
#include "TAttFill.h"
#include "TPad.h"
#include "TCanvas.h"
#include "TH2F.h"
#include "TF1.h"
#include "TPluginManager.h"
#include "TVirtualPadEditor.h"
#include "TStopwatch.h"

#include "TPolyMarker3D.h"
#include "TVirtualGL.h"

#include "TGeoAtt.h"
#include "TGeoVolume.h"
#include "TGeoNode.h"
#include "TGeoManager.h"
#include "TGeoTrack.h"
#include "TGeoOverlap.h"
#include "TGeoChecker.h"
#include "TGeoPhysicalNode.h"
#include "TGeoCompositeShape.h"
#include "TGeoShapeAssembly.h"
#include "TGeoPainter.h"
#include "TMath.h"

#include "X3DBuffer.h"

#include "TBuffer3D.h"
#include "TBuffer3DTypes.h"
#include "TVirtualViewer3D.h"

ClassImp(TGeoPainter)

//______________________________________________________________________________
TGeoPainter::TGeoPainter(TGeoManager *manager) : TVirtualGeoPainter(manager)
{
//*-*-*-*-*-*-*-*-*-*-*Geometry painter default constructor*-*-*-*-*-*-*-*-*
//*-*                  ====================================
   TVirtualGeoPainter::SetPainter(this);
   if (manager) fGeoManager = manager;
   else {
      Error("ctor", "No geometry loaded");
      return;
   }   
   fNsegments = fGeoManager->GetNsegments();
   fNVisNodes = 0;
   fBombX = 1.3;
   fBombY = 1.3;
   fBombZ = 1.3;
   fBombR = 1.3;
   fVisLevel = fGeoManager->GetVisLevel();
   fVisOption = fGeoManager->GetVisOption();
   fExplodedView = fGeoManager->GetBombMode();
   fVisBranch = "";
   fVolInfo = "";
   fVisLock = kFALSE;
   fIsRaytracing = kFALSE;
   fTopVisible = kFALSE;
   fPaintingOverlaps = kFALSE;
   fPlugin = 0;
   fVisVolumes = new TObjArray();
   fOverlap = 0;
   fGlobal = new TGeoHMatrix();
   fBuffer = new TBuffer3D(TBuffer3DTypes::kGeneric,20,3*20,0,0,0,0);
   fClippingShape = 0;
   fLastVolume = 0;
   fTopVolume = 0;
   fIsPaintingShape = kFALSE;
   memset(&fCheckedBox[0], 0, 6*sizeof(Double_t));
   
   fCheckedNode = fGeoManager->GetTopNode();
   fChecker = new TGeoChecker(fGeoManager);
   fIsEditable = kFALSE;
   DefineColors();
}
//______________________________________________________________________________
TGeoPainter::~TGeoPainter()
{
//*-*-*-*-*-*-*-*-*-*-*Geometry painter default destructor*-*-*-*-*-*-*-*-*
//*-*                  ===================================
   if (fChecker) delete fChecker;
   delete fVisVolumes;
   delete fGlobal;
   delete fBuffer;
   if (fPlugin) delete fPlugin;
}
//______________________________________________________________________________
void TGeoPainter::AddSize3D(Int_t numpoints, Int_t numsegs, Int_t numpolys)
{
//--- Add numpoints, numsegs, numpolys to the global 3D size.
   gSize3D.numPoints += numpoints;
   gSize3D.numSegs   += numsegs;
   gSize3D.numPolys  += numpolys;
}      
//______________________________________________________________________________
TVirtualGeoTrack *TGeoPainter::AddTrack(Int_t id, Int_t pdgcode, TObject *particle)
{
// Create a primary TGeoTrack.
   return (TVirtualGeoTrack*)(new TGeoTrack(id,pdgcode,0,particle));
}

//______________________________________________________________________________
void TGeoPainter::AddTrackPoint(Double_t *point, Double_t *box, Bool_t reset) 
{
// Average center of view of all painted tracklets and compute view box.
   static Int_t npoints = 0;
   static Double_t xmin[3] = {0,0,0};
   static Double_t xmax[3] = {0,0,0};
   Int_t i;
   if (reset) {
      memset(box, 0, 6*sizeof(Double_t));
      memset(xmin, 0, 3*sizeof(Double_t));
      memset(xmax, 0, 3*sizeof(Double_t));
      npoints = 0;
      return;
   }      
   if (npoints==0) {
      for (i=0; i<3; i++) xmin[i]=xmax[i]=0;
      npoints++;
   }
   npoints++;
   Double_t  ninv = 1./Double_t(npoints); 
   for (i=0; i<3; i++) {
      box[i] += ninv*(point[i]-box[i]);
      if (point[i]<xmin[i]) xmin[i]=point[i];
      if (point[i]>xmax[i]) xmax[i]=point[i];
      box[i+3] = 0.5*(xmax[i]-xmin[i]);
   } 
}
   
//______________________________________________________________________________
void TGeoPainter::BombTranslation(const Double_t *tr, Double_t *bombtr)
{
// get the new 'bombed' translation vector according current exploded view mode
   memcpy(bombtr, tr, 3*sizeof(Double_t));
   switch (fExplodedView) {
      case kGeoNoBomb:
         return;
      case kGeoBombXYZ:
         bombtr[0] *= fBombX;
         bombtr[1] *= fBombY;
         bombtr[2] *= fBombZ;
         return;
      case kGeoBombCyl:
         bombtr[0] *= fBombR;
         bombtr[1] *= fBombR;
         bombtr[2] *= fBombZ;
         return;
      case kGeoBombSph:
         bombtr[0] *= fBombR;
         bombtr[1] *= fBombR;
         bombtr[2] *= fBombR;
         return;
      default:
         return;
   }   
}

//_____________________________________________________________________________
void TGeoPainter::CheckBoundaryErrors(Int_t ntracks, Double_t radius)
{
// Check pushes and pulls needed to cross the next boundary with respect to the
// position given by FindNextBoundary. If radius is not mentioned the full bounding
// box will be sampled.
   fChecker->CheckBoundaryErrors(ntracks, radius);
}   

//_____________________________________________________________________________
void TGeoPainter::CheckBoundaryReference(Int_t icheck)
{
// Check the boundary errors reference file created by CheckBoundaryErrors method.
// The shape for which the crossing failed is drawn with the starting point in red
// and the extrapolated point to boundary (+/- failing push/pull) in yellow.
   fChecker->CheckBoundaryReference(icheck);
}   

//______________________________________________________________________________
void TGeoPainter::CheckGeometryFull(Bool_t checkoverlaps, Bool_t checkcrossings, Int_t ntracks, const Double_t *vertex)
{
// Geometry checking method (see: TGeoManager::CheckGeometry())
   fChecker->CheckGeometryFull(checkoverlaps,checkcrossings,ntracks,vertex);
}   

//______________________________________________________________________________
void TGeoPainter::CheckGeometry(Int_t nrays, Double_t startx, Double_t starty, Double_t startz) const
{
// Geometry checking method (see TGeoChecker).
   fChecker->CheckGeometry(nrays, startx, starty, startz);
}   

//______________________________________________________________________________
void TGeoPainter::CheckOverlaps(const TGeoVolume *vol, Double_t ovlp, Option_t *option) const
{
// Check overlaps for the top volume of the geometry, within a limit OVLP. 
   fChecker->CheckOverlaps(vol, ovlp, option);
}

//______________________________________________________________________________
void TGeoPainter::CheckPoint(Double_t x, Double_t y, Double_t z, Option_t *option)
{
// check current point in the geometry
   fChecker->CheckPoint(x,y,z,option);
}   

//______________________________________________________________________________
void TGeoPainter::ClearVisibleVolumes()
{
   //Clear the list of visible volumes
   //reset the kVisOnScreen bit for volumes previously in the list
   
   if (!fVisVolumes) return;
   TIter next(fVisVolumes);
   TGeoVolume *vol;
   while ((vol = (TGeoVolume*)next())) {
      vol->ResetAttBit(TGeoAtt::kVisOnScreen);
   }
   fVisVolumes->Clear();
}
      
      
//______________________________________________________________________________
void TGeoPainter::DefineColors() const
{
// Define 100 colors with increasing light intensities for each basic color (1-7)
// Register these colors at indexes starting with 1000.
   TColor::InitializeColors();
   TColor *color = gROOT->GetColor(1000);
   if (color) return;
   Int_t i,j;
   Float_t r,g,b,h,l,s;
   
   for (i=1; i<8; i++) {
      color = (TColor*)gROOT->GetListOfColors()->At(i);
      if (!color) {
         Warning("DefineColors", "No colors defined");
         return;
      }         
      color->GetHLS(h,l,s);
      for (j=0; j<100; j++) {
         l = 0.25+0.5*j/99.;
         TColor::HLS2RGB(h,l,s,r,g,b);
         new TColor(1000+(i-1)*100+j, r,g,b);
      }
   }           
}

//______________________________________________________________________________
Int_t TGeoPainter::GetColor(Int_t base, Float_t light) const
{
// Get index of a base color with given light intensity (0,1)
   const Int_t kBCols[8] = {1,2,3,5,4,6,7,1};
   TColor *tcolor = gROOT->GetColor(base);
   if (!tcolor) tcolor = new TColor(base, 0.5,0.5,0.5);
   Float_t r,g,b;
   tcolor->GetRGB(r,g,b);
   Int_t code = 0;
   if (r>0.5) code += 1;
   if (g>0.5) code += 2;
   if (b>0.5) code += 4;
   Int_t color, j;
   
   if (light<0.25) {
      j=0;
   } else {
      if (light>0.8) j=99;
      else j = Int_t(99*(light-0.25)/0.5);
   }   
   color = 1000 + (kBCols[code]-1)*100+j;
   return color;
}

//______________________________________________________________________________
TGeoVolume *TGeoPainter::GetDrawnVolume() const
{
// Get currently drawn volume.
   if (!gPad) return 0;
   return fTopVolume;
}         
 
//______________________________________________________________________________
Int_t TGeoPainter::DistanceToPrimitiveVol(TGeoVolume *volume, Int_t px, Int_t py)
{
// compute the closest distance of approach from point px,py to a volume 
   const Int_t big = 9999;
   const Int_t inaxis = 7;
   const Int_t maxdist = 5;

   if (fTopVolume != volume) fTopVolume = volume;
   TView *view = gPad->GetView();
   if (!view) return big;   
   TGeoBBox *box;
   fGlobal->Clear();
   TGeoShape::SetTransform(fGlobal);

   Int_t puxmin = gPad->XtoAbsPixel(gPad->GetUxmin());
   Int_t puymin = gPad->YtoAbsPixel(gPad->GetUymin());
   Int_t puxmax = gPad->XtoAbsPixel(gPad->GetUxmax());
   Int_t puymax = gPad->YtoAbsPixel(gPad->GetUymax());
   // return if point not in user area
   if (px < puxmin - inaxis) return big;
   if (py > puymin + inaxis) return big;
   if (px > puxmax + inaxis) return big;
   if (py < puymax - inaxis) return big;
   
   fCheckedNode = fGeoManager->GetTopNode();         
   gPad->SetSelected(view);
   Int_t dist = big;
//   Int_t id;
   
   if (fPaintingOverlaps) {
      TGeoVolume *crt;
      crt = fOverlap->GetFirstVolume();
      *fGlobal = fOverlap->GetFirstMatrix();
      dist = crt->GetShape()->DistancetoPrimitive(px,py);
      if (dist<maxdist) {
         gPad->SetSelected(crt);
         box = (TGeoBBox*)crt->GetShape();
         fGlobal->LocalToMaster(box->GetOrigin(), &fCheckedBox[0]);
         fCheckedBox[3] = box->GetDX();
         fCheckedBox[4] = box->GetDY();
         fCheckedBox[5] = box->GetDZ();
         return 0;
      }
      crt = fOverlap->GetSecondVolume();
      *fGlobal = fOverlap->GetSecondMatrix();
      dist = crt->GetShape()->DistancetoPrimitive(px,py);
      if (dist<maxdist) {
         gPad->SetSelected(crt);
         box = (TGeoBBox*)crt->GetShape();
         fGlobal->LocalToMaster(box->GetOrigin(), &fCheckedBox[0]);
         fCheckedBox[3] = box->GetDX();
         fCheckedBox[4] = box->GetDY();
         fCheckedBox[5] = box->GetDZ();
         return 0;
      }      
      return big;
   }
      // Compute distance to the right edge
   if ((puxmax+inaxis-px) < 40) {
      if ((py-puymax+inaxis) < 40) {
         // when the mouse points to the (40x40) right corner of the pad, the manager class is selected
         gPad->SetSelected(fGeoManager);
         fVolInfo = fGeoManager->GetName();
         box = (TGeoBBox*)volume->GetShape();
         memcpy(fCheckedBox, box->GetOrigin(), 3*sizeof(Double_t));
         fCheckedBox[3] = box->GetDX();
         fCheckedBox[4] = box->GetDY();
         fCheckedBox[5] = box->GetDZ();
         return 0;
      }
      // when the mouse points to the (40 pix) right edge of the pad, the top volume is selected
      gPad->SetSelected(volume);
      fVolInfo = volume->GetName();
      box = (TGeoBBox*)volume->GetShape();
      memcpy(fCheckedBox, box->GetOrigin(), 3*sizeof(Double_t));
      fCheckedBox[3] = box->GetDX();
      fCheckedBox[4] = box->GetDY();
      fCheckedBox[5] = box->GetDZ();
      return 0;
   }   

   TGeoVolume *vol = volume;
   Bool_t vis = vol->IsVisible();
//   Bool_t drawDaughters = kTRUE;
   // Do we need to check a branch only?
   if (volume->IsVisBranch()) {
      if (!fGeoManager->IsClosed()) return big;
      fGeoManager->PushPath();
      fGeoManager->cd(fVisBranch.Data());
      while (fGeoManager->GetLevel()) {
         vol = fGeoManager->GetCurrentVolume();
         *fGlobal = gGeoManager->GetCurrentMatrix();
         dist = vol->GetShape()->DistancetoPrimitive(px,py);
         if (dist<maxdist) {
            fVolInfo = fVisBranch;
            box = (TGeoBBox*)vol->GetShape();
            fGeoManager->LocalToMaster(box->GetOrigin(), &fCheckedBox[0]);
            fCheckedNode = gGeoManager->GetCurrentNode();
            if (fGeoManager->IsNodeSelectable()) gPad->SetSelected(fCheckedNode);
            else gPad->SetSelected(vol);
            fCheckedBox[3] = box->GetDX();
            fCheckedBox[4] = box->GetDY();
            fCheckedBox[5] = box->GetDZ();
            fGeoManager->PopPath();
            return 0;
         }
         fGeoManager->CdUp();
      }
      fGeoManager->PopPath();
      return dist;
   }      

   // Do I need to look for the top volume ?
   if ((fTopVisible && vis) || !vol->GetNdaughters() || !vol->IsVisDaughters() || vol->IsVisOnly()) {
      dist = vol->GetShape()->DistancetoPrimitive(px,py);
      if (dist<maxdist) {
         fVolInfo = vol->GetName();
         gPad->SetSelected(vol);
         box = (TGeoBBox*)vol->GetShape();
         memcpy(fCheckedBox, box->GetOrigin(), 3*sizeof(Double_t));
         fCheckedBox[3] = box->GetDX();
         fCheckedBox[4] = box->GetDY();
         fCheckedBox[5] = box->GetDZ();
         return 0;
      }
      if (vol->IsVisOnly() || !vol->GetNdaughters() || !vol->IsVisDaughters())
         return dist;
   }      

   // Iterate the volume content
   TGeoIterator next(vol);
   next.SetTopName(Form("%s_1",vol->GetName()));
   TGeoNode *daughter;

   Int_t level, nd;
   Bool_t last;

   while ((daughter=next())) {
      vol = daughter->GetVolume();
      level = next.GetLevel();
      nd = daughter->GetNdaughters();
      vis = daughter->IsVisible();
      if (volume->IsVisContainers()) {
         if (vis && level<=fVisLevel) {
            *fGlobal = next.GetCurrentMatrix();
            dist = vol->GetShape()->DistancetoPrimitive(px,py);
            if (dist<maxdist) {
               next.GetPath(fVolInfo);
               box = (TGeoBBox*)vol->GetShape();
               fGlobal->LocalToMaster(box->GetOrigin(), &fCheckedBox[0]);
               fCheckedNode = daughter;
               if (fGeoManager->IsNodeSelectable()) gPad->SetSelected(fCheckedNode);
               else gPad->SetSelected(vol);
               fCheckedBox[3] = box->GetDX();
               fCheckedBox[4] = box->GetDY();
               fCheckedBox[5] = box->GetDZ();
               fGeoManager->PopPath();
               return 0;
            }
         }   
         // Check if we have to skip this branch
         if (level==fVisLevel || !daughter->IsVisDaughters()) {
            next.Skip();
            continue;
         }   
      } else if (volume->IsVisLeaves()) {
         last = ((nd==0) || (level==fVisLevel) || (!daughter->IsVisDaughters()))?kTRUE:kFALSE;
         if (vis && last) {
            *fGlobal = next.GetCurrentMatrix();
            dist = vol->GetShape()->DistancetoPrimitive(px,py);
            if (dist<maxdist) {
               next.GetPath(fVolInfo);
               box = (TGeoBBox*)vol->GetShape();
               fGlobal->LocalToMaster(box->GetOrigin(), &fCheckedBox[0]);
               fCheckedNode = daughter;
               if (fGeoManager->IsNodeSelectable()) gPad->SetSelected(fCheckedNode);
               else gPad->SetSelected(vol);
               fCheckedBox[3] = box->GetDX();
               fCheckedBox[4] = box->GetDY();
               fCheckedBox[5] = box->GetDZ();
               fGeoManager->PopPath();
               return 0;
            }
         }
         // Check if we have to skip the branch
         if (last || !daughter->IsVisDaughters()) next.Skip();
      }
   }
   return dist;
}

//______________________________________________________________________________
void TGeoPainter::DefaultAngles()
{   
// Set default angles for the current view.
   if (gPad) {
      Int_t irep;
      TView *view = gPad->GetView();
      if (!view) return;
      view->SetView(-206,126,75,irep);
      ModifiedPad();
   }
}   

//______________________________________________________________________________
void TGeoPainter::DefaultColors()
{   
// Set default volume colors according to tracking media
   TIter next(fGeoManager->GetListOfVolumes());
   TGeoVolume *vol;
   while ((vol=(TGeoVolume*)next()))
      vol->SetLineColor(vol->GetMaterial()->GetDefaultColor());
   ModifiedPad();
}   

//______________________________________________________________________________
Int_t TGeoPainter::CountNodes(TGeoVolume *volume, Int_t rlevel) const
{
// Count number of visible nodes down to a given level.
   TGeoVolume *vol = volume;
   Int_t count = 0;
   Bool_t vis = vol->IsVisible();
   // Do I need to look for the top volume ?
   if ((fTopVisible && vis) || !vol->GetNdaughters() || !vol->IsVisDaughters() || vol->IsVisOnly()) 
      count++;
   // Is this the only volume?
   if (volume->IsVisOnly()) return count;

   // Do we need to check a branch only?
   if (volume->IsVisBranch()) {
      fGeoManager->PushPath();
      fGeoManager->cd(fVisBranch.Data());
      count = fGeoManager->GetLevel() + 1;
      fGeoManager->PopPath();
      return count;
   }
   // Iterate the volume content
   TGeoIterator next(vol);
   TGeoNode *daughter;
   Int_t level, nd;
   Bool_t last;
      
   while ((daughter=next())) {
      vol = daughter->GetVolume();
      level = next.GetLevel();
      nd = daughter->GetNdaughters();
      vis = daughter->IsVisible();
      if (volume->IsVisContainers()) {
         if (vis && level<=rlevel) count++;
         // Check if we have to skip this branch
         if (level==rlevel || !daughter->IsVisDaughters()) {
            next.Skip();
            continue;
         }   
      } else if (volume->IsVisLeaves()) {
         last = ((nd==0) || (level==rlevel) || (!daughter->IsVisDaughters()))?kTRUE:kFALSE;
         if (vis && last) count++;
         // Check if we have to skip the branch
         if (last) next.Skip();
      }
   }      
   return count;    
}   

//______________________________________________________________________________
Int_t TGeoPainter::CountVisibleNodes()
{
// Count total number of visible nodes.
   Int_t maxnodes = fGeoManager->GetMaxVisNodes(); 
   Int_t vislevel = fGeoManager->GetVisLevel();
//   TGeoVolume *top = fGeoManager->GetTopVolume();
   TGeoVolume *top = fTopVolume;
   if (maxnodes <= 0  && top) {
      fNVisNodes = CountNodes(top, vislevel);
      SetVisLevel(vislevel);
      return fNVisNodes;
   }   
   //if (the total number of nodes of the top volume is less than maxnodes
   // we can visualize everything.
   //recompute the best visibility level
   if (!top) {
      SetVisLevel(vislevel);
      return 0;
   }   
   fNVisNodes = -1;
   Bool_t again = kFALSE;
   for (Int_t level = 1;level<20;level++) {
      vislevel = level;
      Int_t nnodes = CountNodes(top, level);
      if (top->IsVisOnly() || top->IsVisBranch()) {
         vislevel = fVisLevel;
         fNVisNodes = nnodes;
         break;
      }   
      if (nnodes > maxnodes) {
         vislevel--;
         break;
      }
      if (nnodes == fNVisNodes) {
         if (again) break;
         again = kTRUE;
      }   
      fNVisNodes = nnodes;
   }
   SetVisLevel(vislevel);
   return fNVisNodes;
}

//______________________________________________________________________________
void TGeoPainter::CheckEdit()
{
// Check if Ged library is loaded and load geometry editor classe.
   if (fIsEditable) return;
   if (!TClass::GetClass("TGedEditor")) return;
   TPluginHandler *h;
   if ((h = gROOT->GetPluginManager()->FindHandler("TGeoManagerEditor"))) {
      if (h->LoadPlugin() == -1) return;
      h->ExecPlugin(0);
   }
   fIsEditable = kTRUE;
}      

//______________________________________________________________________________
void TGeoPainter::EditGeometry(Option_t *option)
{
// Start the geometry editor.
   if (!gPad) return;
   if (!fIsEditable) {
      if (!strlen(option)) gPad->GetCanvas()->GetCanvasImp()->ShowEditor();
      else TVirtualPadEditor::ShowEditor();
      CheckEdit();
   }   
   gPad->SetSelected(fGeoManager);
   gPad->GetCanvas()->Selected(gPad,fGeoManager,kButton1Down);   
}

//______________________________________________________________________________
void TGeoPainter::Draw(Option_t *option)
{
// Draw method.
   DrawVolume(fGeoManager->GetTopVolume(), option);
}

//______________________________________________________________________________
void TGeoPainter::DrawBatemanSol(TGeoBatemanSol *sol, Option_t *option)
{
// Draw the time evolution of a radionuclide.
   Int_t ncoeff = sol->GetNcoeff();
   if (!ncoeff) return;
   Double_t tlo=0., thi=0.;
   Double_t cn=0., lambda=0.;
   Int_t i;
   sol->GetRange(tlo, thi);
   Bool_t autorange = (thi==0.)?kTRUE:kFALSE;
   
   // Try to find the optimum range in time.
   if (autorange) tlo = 0.;
   sol->GetCoeff(0, cn, lambda);
   Double_t lambdamin = lambda;
   TString formula = "";
   for (i=0; i<ncoeff; i++) {
      sol->GetCoeff(i, cn, lambda);
      formula += Form("%g*exp(-%g*x)",cn, lambda);
      if (i < ncoeff-1) formula += "+";
      if (lambda < lambdamin &&
          lambda > 0.) lambdamin = lambda;
   }
   if (autorange) thi = 10./lambdamin;
   formula += ";time[s]";
   formula += Form(";Concentration_of_%s",sol->GetElement()->GetName());
   // Create a function
   TF1 *func = new TF1(Form("conc%s",sol->GetElement()->GetName()), formula.Data(), tlo,thi);
   func->SetMinimum(1.e-3);
   func->SetMaximum(1.25*TMath::Max(sol->Concentration(tlo), sol->Concentration(thi)));
   func->SetLineColor(sol->GetLineColor());
   func->SetLineStyle(sol->GetLineStyle());
   func->SetLineWidth(sol->GetLineWidth());
   func->SetMarkerColor(sol->GetMarkerColor());
   func->SetMarkerStyle(sol->GetMarkerStyle());
   func->SetMarkerSize(sol->GetMarkerSize());
   func->Draw(option);
}   

//______________________________________________________________________________
void TGeoPainter::DrawVolume(TGeoVolume *vol, Option_t *option)
{
// Draw method.
   fTopVolume = vol;
   fLastVolume = 0;
   fIsPaintingShape = kFALSE;
//   if (fVisOption==kGeoVisOnly ||
//       fVisOption==kGeoVisBranch) fGeoManager->SetVisOption(kGeoVisLeaves);
   CountVisibleNodes();         
   TString opt = option;
   opt.ToLower();
   fPaintingOverlaps = kFALSE;
   fOverlap = 0;
   
   if (fVisLock) {
      ClearVisibleVolumes();
      fVisLock = kFALSE;
   }   
   Bool_t has_pad = (gPad==0)?kFALSE:kTRUE;
   // Clear pad if option "same" not given
   if (!gPad) {
      gROOT->MakeDefCanvas();
   }
   if (!opt.Contains("same")) gPad->Clear();
   // append this volume to pad
   fTopVolume->AppendPad(option);

   // Create a 3-D view
   TView *view = gPad->GetView();
   if (!view) {
      view = TView::CreateView(11,0,0);
      // Set the view to perform a first autorange (frame) draw. 
      // TViewer3DPad will revert view to normal painting after this
      view->SetAutoRange(kTRUE);
      if (has_pad) gPad->Update();
   }
   Paint("range"); 
   view->SetAutoRange(kFALSE);    
   // If we are drawing into the pad, then the view needs to be
   // set to perspective
//   if (!view->IsPerspective()) view->SetPerspective();
   
   fLastVolume = fTopVolume;
 
         // Create a 3D viewer to paint us
   gPad->GetViewer3D(option);
}

//______________________________________________________________________________
void TGeoPainter::DrawShape(TGeoShape *shape, Option_t *option)
{
// Draw a shape.
   TString opt = option;
   opt.ToLower();
   fPaintingOverlaps = kFALSE;
   fOverlap = 0;
   fIsPaintingShape = kTRUE;
   
   Bool_t has_pad = (gPad==0)?kFALSE:kTRUE;
   // Clear pad if option "same" not given
   if (!gPad) {
      gROOT->MakeDefCanvas();
   }
   if (!opt.Contains("same")) gPad->Clear();
   // append this shape to pad
   shape->AppendPad(option);

   // Create a 3-D view
   TView *view = gPad->GetView();
   if (!view) {
      view = TView::CreateView(11,0,0);
      // Set the view to perform a first autorange (frame) draw. 
      // TViewer3DPad will revert view to normal painting after this
      view->SetAutoRange(kTRUE);
      if (has_pad) gPad->Update();
   }
   PaintShape(shape,"range");   
   view->SetAutoRange(kTRUE);   
   // Create a 3D viewer to paint us
   gPad->GetViewer3D(option);
}

//______________________________________________________________________________
void TGeoPainter::DrawOverlap(void *ovlp, Option_t *option)
{
// Draw an overlap.
   TString opt = option;
   fIsPaintingShape = kFALSE;
   TGeoOverlap *overlap = (TGeoOverlap*)ovlp;
   if (!overlap) return;
   
   fPaintingOverlaps = kTRUE;
   fOverlap = overlap;
   opt.ToLower();
   if (fVisLock) {
      ClearVisibleVolumes();
      fVisLock = kFALSE;
   }   
   Bool_t has_pad = (gPad==0)?kFALSE:kTRUE;
   // Clear pad if option "same" not given
   if (!gPad) {
      gROOT->MakeDefCanvas();
   }
   if (!opt.Contains("same")) gPad->Clear();
   // append this volume to pad
   overlap->AppendPad(option);

   // Create a 3-D view
         // Create a 3D viewer to paint us
   gPad->GetViewer3D(option);
   TView *view = gPad->GetView();
   if (!view) {
      view = TView::CreateView(11,0,0);
      // Set the view to perform a first autorange (frame) draw. 
      // TViewer3DPad will revert view to normal painting after this
      view->SetAutoRange(kTRUE);
      PaintOverlap(ovlp, "range");
      overlap->GetPolyMarker()->Draw("SAME");
      if (has_pad) gPad->Update();
   }

   // If we are drawing into the pad, then the view needs to be
   // set to perspective
//   if (!view->IsPerspective()) view->SetPerspective();
   fVisLock = kTRUE;
}


//______________________________________________________________________________
void TGeoPainter::DrawOnly(Option_t *option)
{
// Draw only one volume.
   TString opt = option;
   opt.ToLower();
   if (fVisLock) {
      ClearVisibleVolumes();
      fVisLock = kFALSE;
   }   
   fPaintingOverlaps = kFALSE;
   fIsPaintingShape = kFALSE;
   Bool_t has_pad = (gPad==0)?kFALSE:kTRUE;
   // Clear pad if option "same" not given
   if (!gPad) {
      gROOT->MakeDefCanvas();
   }
   if (!opt.Contains("same")) gPad->Clear();
   // append this volume to pad
   fTopVolume = fGeoManager->GetCurrentVolume();
   fTopVolume->AppendPad(option);

   // Create a 3-D view
   TView *view = gPad->GetView();
   if (!view) {
      view = TView::CreateView(11,0,0);
      // Set the view to perform a first autorange (frame) draw. 
      // TViewer3DPad will revert view to normal painting after this
      view->SetAutoRange(kTRUE);
      fVisOption = kGeoVisOnly;
      if (has_pad) gPad->Update();
   }

   // If we are drawing into the pad, then the view needs to be
   // set to perspective
//   if (!view->IsPerspective()) view->SetPerspective();
   fVisLock = kTRUE;
}

//______________________________________________________________________________
void TGeoPainter::DrawCurrentPoint(Int_t color)
{
// Draw current point in the same view.
   if (!gPad) return;
   if (!gPad->GetView()) return;
   TPolyMarker3D *pm = new TPolyMarker3D();
   pm->SetMarkerColor(color);
   const Double_t *point = fGeoManager->GetCurrentPoint();
   pm->SetNextPoint(point[0], point[1], point[2]);
   pm->SetMarkerStyle(8);
   pm->SetMarkerSize(0.5);
   pm->Draw("SAME");
}

//______________________________________________________________________________
void TGeoPainter::DrawPanel()
{
}

//______________________________________________________________________________
void TGeoPainter::DrawPath(const char *path)
{
// Draw all volumes for a given path.
   fVisOption=kGeoVisBranch;
   fVisBranch=path; 
   fIsPaintingShape = kFALSE;
   fTopVolume = fGeoManager->GetTopVolume();
   fTopVolume->SetVisRaytrace(kFALSE);
   DrawVolume(fTopVolume,"");   
}

//______________________________________________________________________________
void TGeoPainter::EstimateCameraMove(Double_t tmin, Double_t tmax, Double_t *start, Double_t *end)
{
// Estimate camera movement between tmin and tmax for best track display
   if (!gPad) return;
   TIter next(gPad->GetListOfPrimitives());
   TVirtualGeoTrack *track;
   TObject *obj;
   Int_t ntracks = 0;
   Double_t *point = 0;
   AddTrackPoint(point, start, kTRUE);
   while ((obj=next())) {
      if (strcmp(obj->ClassName(), "TGeoTrack")) continue;
      track = (TVirtualGeoTrack*)obj;
      if (!track) continue;
      ntracks++;
      track->PaintCollect(tmin, start);
   }
   
   if (!ntracks) return;
   next.Reset();
   AddTrackPoint(point, end, kTRUE);
   while ((obj=next())) {
      if (strcmp(obj->ClassName(), "TGeoTrack")) continue;
      track = (TVirtualGeoTrack*)obj;
      if (!track) continue;
      track->PaintCollect(tmax, end);
   }   
}

//______________________________________________________________________________
void TGeoPainter::ExecuteManagerEvent(TGeoManager * /*geom*/, Int_t event, Int_t /*px*/, Int_t /*py*/)
{
// Execute mouse actions on a given volume.
   if (!gPad) return;
   gPad->SetCursor(kPointer);
   switch (event) {
      case kButton1Down:
         if (!fIsEditable) CheckEdit();
   }          
}
   
//______________________________________________________________________________
void TGeoPainter::ExecuteShapeEvent(TGeoShape * /*shape*/, Int_t event, Int_t /*px*/, Int_t /*py*/)
{
// Execute mouse actions on a given shape.
   if (!gPad) return;
   gPad->SetCursor(kHand);
   switch (event) {
      case kButton1Down:
         if (!fIsEditable) CheckEdit();
   }      
}

//______________________________________________________________________________
void TGeoPainter::ExecuteVolumeEvent(TGeoVolume * /*volume*/, Int_t event, Int_t /*px*/, Int_t /*py*/)
{
// Execute mouse actions on a given volume.
   if (!gPad) return;
   if (!fIsEditable) CheckEdit();
//   if (fIsRaytracing) return;
//   Bool_t istop = (volume==fTopVolume)?kTRUE:kFALSE;
//   if (istop) gPad->SetCursor(kHand);
//   else gPad->SetCursor(kPointer);
   gPad->SetCursor(kHand);
//   static Int_t width, color;
   switch (event) {
   case kMouseEnter:
//      width = volume->GetLineWidth();
//      color = volume->GetLineColor();
      break;
   
   case kMouseLeave:
//      volume->SetLineWidth(width);
//      volume->SetLineColor(color);
      break;

   case kButton1Down:
//      volume->SetLineWidth(3);
//      volume->SetLineColor(2);
//      gPad->Modified();
//      gPad->Update();
      break;
   
   case kButton1Up:
//      volume->SetLineWidth(width);
//      volume->SetLineColor(color);
//      gPad->Modified();
//      gPad->Update();
      break;
      
   case kButton1Double:
      gPad->SetCursor(kWatch);
      GrabFocus();
      break;
   }
}

//______________________________________________________________________________
char *TGeoPainter::GetVolumeInfo(const TGeoVolume *volume, Int_t /*px*/, Int_t /*py*/) const
{
// Get some info about the current selected volume.
   const char *snull = "";
   if (!gPad) return (char*)snull;
   static char info[128];
   if (fPaintingOverlaps) {
      if (!fOverlap) {
         sprintf(info, "wrong overlapping flag");
         return info;
      }   
      TString ovtype, name;
      if (fOverlap->IsExtrusion()) ovtype="EXTRUSION";
      else ovtype = "OVERLAP";
      if (volume==fOverlap->GetFirstVolume()) name=volume->GetName();
      else name=fOverlap->GetSecondVolume()->GetName();
      sprintf(info, "%s: %s of %g", name.Data(), ovtype.Data(), fOverlap->GetOverlap());
      return info;
   }   
   else sprintf(info,"%s, shape=%s", fVolInfo.Data(), volume->GetShape()->ClassName());
   return info;
}

//______________________________________________________________________________
TGeoChecker *TGeoPainter::GetChecker()
{
// Create/return geometry checker.
   if (!fChecker) fChecker = new TGeoChecker(fGeoManager);
   return fChecker;
}
 
//______________________________________________________________________________
void TGeoPainter::GetViewAngles(Double_t &longitude, Double_t &latitude, Double_t &psi) 
{
// Get the current view angles.
   if (!gPad) return;
   TView *view = gPad->GetView();
   if (!view) return;
   longitude = view->GetLongitude();
   latitude = view->GetLatitude();
   psi = view->GetPsi();
}   

//______________________________________________________________________________
void TGeoPainter::GrabFocus(Int_t nfr, Double_t dlong, Double_t dlat, Double_t dpsi)
{
// Move focus to current volume
   if (!gPad) return;
   TView *view = gPad->GetView();
   if (!view) return;
   if (!fCheckedNode && !fPaintingOverlaps) {
      printf("Woops!!!\n");
      TGeoBBox *box = (TGeoBBox*)fGeoManager->GetTopVolume()->GetShape();
      memcpy(&fCheckedBox[0], box->GetOrigin(), 3*sizeof(Double_t));
      fCheckedBox[3] = box->GetDX();
      fCheckedBox[4] = box->GetDY();
      fCheckedBox[5] = box->GetDZ();
   }      
   view->SetPerspective();
   Int_t nvols = fVisVolumes->GetEntriesFast();
   Int_t nframes = nfr;
   if (nfr==0) {
      nframes = 1;
      if (nvols<1500) nframes=10;
      if (nvols<1000) nframes=20;
      if (nvols<200) nframes = 50;
      if (nvols<100) nframes = 100;
   }   
   view->MoveFocus(&fCheckedBox[0], fCheckedBox[3], fCheckedBox[4], fCheckedBox[5], nframes, dlong, dlat, dpsi);
}

//______________________________________________________________________________
TH2F *TGeoPainter::LegoPlot(Int_t ntheta, Double_t themin, Double_t themax,
                            Int_t nphi,   Double_t phimin, Double_t phimax,
                            Double_t rmin, Double_t rmax, Option_t *option)
{
// Generate a lego plot fot the top volume, according to option.
   return fChecker->LegoPlot(ntheta, themin, themax, nphi, phimin, phimax, rmin, rmax, option);   
}
//______________________________________________________________________________
void TGeoPainter::LocalToMasterVect(const Double_t *local, Double_t *master) const
{
// Convert a local vector according view rotation matrix
   for (Int_t i=0; i<3; i++)
      master[i] = -local[0]*fMat[i]-local[1]*fMat[i+3]-local[2]*fMat[i+6];
}

//______________________________________________________________________________
void TGeoPainter::ModifiedPad(Bool_t update) const
{
// Check if a pad and view are present and send signal "Modified" to pad.
   if (!gPad) return;
   if (update) {
      gPad->Update();
      return;
   }   
   TView *view = gPad->GetView();
   if (!view) return;
   view->SetViewChanged();
   gPad->Modified();
   if (gROOT->FromPopUp()) gPad->Update();
}   

//______________________________________________________________________________
void TGeoPainter::Paint(Option_t *option)
{
// Paint current geometry according to option.
   if (!fGeoManager || !fTopVolume) return;
   Bool_t is_padviewer = kTRUE;
   if (gPad) is_padviewer = (!strcmp(gPad->GetViewer3D()->ClassName(),"TViewer3DPad"))?kTRUE:kFALSE;
   
   fIsRaytracing = fTopVolume->IsRaytracing();
   if (fTopVolume->IsVisContainers()) fVisOption = kGeoVisDefault;
   else if (fTopVolume->IsVisLeaves()) fVisOption = kGeoVisLeaves;
   else if (fTopVolume->IsVisOnly()) fVisOption = kGeoVisOnly;
   else if (fTopVolume->IsVisBranch()) fVisOption = kGeoVisBranch;
   
   
   if (!fIsRaytracing || !is_padviewer) {
      if (fGeoManager->IsDrawingExtra()) {
         // loop the list of physical volumes
         fGeoManager->CdTop();
         TObjArray *nodeList = fGeoManager->GetListOfPhysicalNodes();
         Int_t nnodes = nodeList->GetEntriesFast();
         Int_t inode;
         TGeoPhysicalNode *node;
         for (inode=0; inode<nnodes; inode++) {
            node = (TGeoPhysicalNode*)nodeList->UncheckedAt(inode);
            PaintPhysicalNode(node, option);
         }
      } else {
         PaintVolume(fTopVolume,option);
      }                      
      fVisLock = kTRUE;
   } 
   // Check if we have to raytrace (only in pad)  
   if (fIsRaytracing && is_padviewer) Raytrace();
}

//______________________________________________________________________________
void TGeoPainter::PaintOverlap(void *ovlp, Option_t *option)
{
// Paint an overlap.
   if (!fGeoManager) return;
   TGeoOverlap *overlap = (TGeoOverlap *)ovlp;
   if (!overlap) return;
   Int_t color, transparency;
   if (fOverlap != overlap) fOverlap = overlap;
   TGeoShape::SetTransform(fGlobal);
   TGeoHMatrix *hmat = fGlobal;
   TGeoVolume *vol;
   TGeoVolume *vol1 = overlap->GetFirstVolume();
   TGeoVolume *vol2 = overlap->GetSecondVolume();
   TGeoHMatrix *matrix1 = overlap->GetFirstMatrix();
   TGeoHMatrix *matrix2 = overlap->GetSecondMatrix();
   //
   vol = vol1;
   *hmat = matrix1;
   fGeoManager->SetMatrixReflection(matrix1->IsReflection());
   if (!fVisLock) fVisVolumes->Add(vol);
   fGeoManager->SetPaintVolume(vol);
   color = vol->GetLineColor();
   transparency = vol->GetTransparency();
   vol->SetLineColor(kGreen);
   vol->SetTransparency(40);
   if (!strstr(option,"range")) ((TAttLine*)vol)->Modify();
   PaintShape(*(vol->GetShape()),option);
   vol->SetLineColor(color);
   vol->SetTransparency(transparency);
   vol = vol2;
   *hmat = matrix2;
   fGeoManager->SetMatrixReflection(matrix2->IsReflection());
   if (!fVisLock) fVisVolumes->Add(vol);
   fGeoManager->SetPaintVolume(vol);
   color = vol->GetLineColor();
   transparency = vol->GetTransparency();
   vol->SetLineColor(kBlue);
   vol->SetTransparency(40);
   if (!strstr(option,"range")) ((TAttLine*)vol)->Modify();
   PaintShape(*(vol->GetShape()),option);
   vol->SetLineColor(color);
   vol->SetTransparency(transparency);
   fGeoManager->SetMatrixReflection(kFALSE);
   fVisLock = kTRUE;
}

//______________________________________________________________________________
void TGeoPainter::PaintNode(TGeoNode *node, Option_t *option, TGeoMatrix* global)
{
// Paint recursively a node and its content accordind to visualization options.
   PaintVolume(node->GetVolume(), option, global);
} 

//______________________________________________________________________________
void TGeoPainter::PaintVolume(TGeoVolume *top, Option_t *option, TGeoMatrix* global)
{
// Paint recursively a node and its content accordind to visualization options.
   if (fTopVolume != top) {
      ClearVisibleVolumes();
      fVisLock = kFALSE;
   }   
   fTopVolume = top;
   if (!fVisLevel) return;
   TGeoVolume *vol = top;
   if(global)
      *fGlobal = *global;
   else
      fGlobal->Clear();
   TGeoShape::SetTransform(fGlobal);
   Bool_t drawDaughters = kTRUE;
   Bool_t vis = (top->IsVisible() && !top->IsAssembly());

   // Update pad attributes in case we need to paint VOL
   if (!strstr(option,"range")) ((TAttLine*)vol)->Modify();

   // Do we need to draw a branch ?
   if (top->IsVisBranch()) {
      fGeoManager->PushPath();
      fGeoManager->cd(fVisBranch.Data());
      Int_t transparency;
      while (fGeoManager->GetLevel()) {
         vol = fGeoManager->GetCurrentVolume();
         if (!fVisLock) {
            fVisVolumes->Add(vol);
            vol->SetAttBit(TGeoAtt::kVisOnScreen);
         }   
         fGeoManager->SetPaintVolume(vol);
         transparency = vol->GetTransparency();
         vol->SetTransparency(40);
         if (!strstr(option,"range")) ((TAttLine*)vol)->Modify();
         if (global) {
            *fGlobal  = *global;
            *fGlobal *= *fGeoManager->GetCurrentMatrix();
         } else {
            *fGlobal = fGeoManager->GetCurrentMatrix();
         }
         fGeoManager->SetMatrixReflection(fGlobal->IsReflection());
         PaintShape(*(vol->GetShape()),option);
         vol->SetTransparency(transparency);
         fGeoManager->CdUp();
      }
      fVisLock = kTRUE;   
      fGeoManager->PopPath();
      fGeoManager->SetMatrixReflection(kFALSE);
      return;
   }   
      
   // Do I need to draw the top volume ?
   if ((fTopVisible && vis) || !top->GetNdaughters() || !top->IsVisDaughters() || top->IsVisOnly()) {
      fGeoManager->SetPaintVolume(vol);
      fGeoManager->SetMatrixReflection(fGlobal->IsReflection());
      drawDaughters = PaintShape(*(vol->GetShape()),option);
      if (!fVisLock && !vol->TestAttBit(TGeoAtt::kVisOnScreen)) {
         fVisVolumes->Add(vol);
         vol->SetAttBit(TGeoAtt::kVisOnScreen);
      } 
      if (top->IsVisOnly() || !top->GetNdaughters() || !top->IsVisDaughters()) {
         fVisLock = kTRUE;
         return;
      }    
   }   

   // Iterate the volume content
   TGeoIterator next(vol);
   if (fPlugin) next.SetUserPlugin(fPlugin);
   TGeoNode *daughter;
//   TGeoMatrix *glmat;
   Int_t level, nd;
   Bool_t last;
   Int_t line_color=0, line_width=0, line_style=0;
   while ((daughter=next())) {
      vol = daughter->GetVolume();
      fGeoManager->SetPaintVolume(vol);
      level = next.GetLevel();
      nd = daughter->GetNdaughters();
      vis = daughter->IsVisible();
      drawDaughters = kTRUE;
      if (top->IsVisContainers()) {
         if (vis && level<=fVisLevel) {
            if (fPlugin) {
               line_color = vol->GetLineColor();
               line_width = vol->GetLineWidth();
               line_style = vol->GetLineStyle();
               fPlugin->ProcessNode();
            }   
            if (!strstr(option,"range")) ((TAttLine*)vol)->Modify();
            if (global) {
               *fGlobal  = *global;
               *fGlobal *= *next.GetCurrentMatrix();
            } else {
               *fGlobal = next.GetCurrentMatrix();
            }
            fGeoManager->SetMatrixReflection(fGlobal->IsReflection());
            drawDaughters = PaintShape(*(vol->GetShape()),option);
            if (fPlugin) {
               vol->SetLineColor(line_color);
               vol->SetLineWidth(line_width);
               vol->SetLineStyle(line_style);
            }   
            if (!fVisLock && !daughter->IsOnScreen()) {
               fVisVolumes->Add(vol);
               vol->SetAttBit(TGeoAtt::kVisOnScreen);
            }   
         }   
         // Check if we have to skip this branch
         if (!drawDaughters || level==fVisLevel || !daughter->IsVisDaughters()) {
            next.Skip();
            continue;
         }   
      } else if (top->IsVisLeaves()) {
         last = ((nd==0) || (level==fVisLevel) || (!daughter->IsVisDaughters()))?kTRUE:kFALSE;
         if (vis && last) {
            if (fPlugin) {
               line_color = vol->GetLineColor();
               line_width = vol->GetLineWidth();
               line_style = vol->GetLineStyle();
               fPlugin->ProcessNode();
            }   
            if (!strstr(option,"range")) ((TAttLine*)vol)->Modify();
            if (global) {
               *fGlobal  = *global;
               *fGlobal *= *next.GetCurrentMatrix();
            } else {
               *fGlobal = next.GetCurrentMatrix();
            }
            fGeoManager->SetMatrixReflection(fGlobal->IsReflection());
            drawDaughters = PaintShape(*(vol->GetShape()),option);
            if (fPlugin) {
               vol->SetLineColor(line_color);
               vol->SetLineWidth(line_width);
               vol->SetLineStyle(line_style);
            }   
            if (!fVisLock && !daughter->IsOnScreen()) {
               fVisVolumes->Add(vol);
               vol->SetAttBit(TGeoAtt::kVisOnScreen);
            }   
         }
         // Check if we have to skip the branch
         if (!drawDaughters || last || !daughter->IsVisDaughters()) next.Skip();
      }
   }
   if (fPlugin) fPlugin->SetIterator(0);
   fGeoManager->SetMatrixReflection(kFALSE);
   fVisLock = kTRUE;
}

//______________________________________________________________________________
Bool_t TGeoPainter::PaintShape(const TGeoShape & shape, Option_t *  option ) const
{
   // Paint the supplied shape into the current 3D viewer
   Bool_t addDaughters = kTRUE;

   TVirtualViewer3D * viewer = gPad->GetViewer3D();

   if (!viewer || shape.IsA()==TGeoShapeAssembly::Class()) {
      return addDaughters;
   }

   // For non-composite shapes we are the main paint method & perform the negotation 
   // with the viewer here
   if (!shape.IsComposite()) {
      // Does viewer prefer local frame positions?
      Bool_t localFrame = viewer->PreferLocalFrame();
      // Perform first fetch of buffer from the shape and try adding it
      // to the viewer
      const TBuffer3D & buffer = 
         shape.GetBuffer3D(TBuffer3D::kCore|TBuffer3D::kBoundingBox|TBuffer3D::kShapeSpecific, localFrame);
      Int_t reqSections = viewer->AddObject(buffer, &addDaughters);

      // If the viewer requires additional sections fetch from the shape (if possible)
      // and add again
      if (reqSections != TBuffer3D::kNone) {
         shape.GetBuffer3D(reqSections, localFrame);
         viewer->AddObject(buffer, &addDaughters);
      }
   }
   // Composite shapes have their own internal hierarchy of shapes, each
   // of which generate a filled TBuffer3D. Therefore we can't pass up a 
   // single buffer to here. So as a special case the TGeoCompositeShape
   // performs it's own painting & negotiation with the viewer.
   else {
      const TGeoCompositeShape * composite = static_cast<const TGeoCompositeShape *>(&shape);

      // We need the addDaughters flag returned from the viewer from paint
      // so can't use the normal TObject::Paint()
//      TGeoHMatrix *matrix = (TGeoHMatrix*)TGeoShape::GetTransform();
//      if (viewer->PreferLocalFrame()) matrix->Clear();
      addDaughters = composite->PaintComposite(option);
   }

   return addDaughters;
}

//______________________________________________________________________________
void TGeoPainter::PaintShape(TGeoShape *shape, Option_t *option)
{
// Paint an overlap.
   TGeoShape::SetTransform(fGlobal);
   fGlobal->Clear();
   fGeoManager->SetPaintVolume(0);
   PaintShape(*shape,option);
}

//______________________________________________________________________________
void TGeoPainter::PaintPhysicalNode(TGeoPhysicalNode *node, Option_t *option)
{
// Paints a physical node associated with a path.
   if (!node->IsVisible()) return;
   Int_t level = node->GetLevel();
   Int_t i, col, wid, sty;
   TGeoShape *shape;
   TGeoShape::SetTransform(fGlobal);
   TGeoHMatrix *matrix = fGlobal;
   TGeoVolume *vcrt;
   if (!node->IsVisibleFull()) {
      // Paint only last node in the branch
      vcrt  = node->GetVolume();
      if (!strstr(option,"range")) ((TAttLine*)vcrt)->Modify(); 
      shape = vcrt->GetShape();
      *matrix = node->GetMatrix();
      fGeoManager->SetMatrixReflection(matrix->IsReflection());
      fGeoManager->SetPaintVolume(vcrt);
      if (!node->IsVolAttributes() && !strstr(option,"range")) {
         col = vcrt->GetLineColor();
         wid = vcrt->GetLineWidth();
         sty = vcrt->GetLineStyle();
         vcrt->SetLineColor(node->GetLineColor());
         vcrt->SetLineWidth(node->GetLineWidth());
         vcrt->SetLineStyle(node->GetLineStyle());
         ((TAttLine*)vcrt)->Modify(); 
         PaintShape(*shape,option);
         vcrt->SetLineColor(col);
         vcrt->SetLineWidth(wid);
         vcrt->SetLineStyle(sty);
      } else {    
         PaintShape(*shape,option);
      }
   } else {
      // Paint full branch, except top node
      for (i=1;i<=level; i++) {
         vcrt  = node->GetVolume(i);
         if (!strstr(option,"range")) ((TAttLine*)vcrt)->Modify(); 
         shape = vcrt->GetShape();
         *matrix = node->GetMatrix(i);
         fGeoManager->SetMatrixReflection(matrix->IsReflection());
         fGeoManager->SetPaintVolume(vcrt);
         if (!node->IsVolAttributes() && !strstr(option,"range")) {
            col = vcrt->GetLineColor();
            wid = vcrt->GetLineWidth();
            sty = vcrt->GetLineStyle();
            vcrt->SetLineColor(node->GetLineColor());
            vcrt->SetLineWidth(node->GetLineWidth());
            vcrt->SetLineStyle(node->GetLineStyle());
            ((TAttLine*)vcrt)->Modify();
            PaintShape(*shape,option);
            vcrt->SetLineColor(col);
            vcrt->SetLineWidth(wid);
            vcrt->SetLineStyle(sty);
         } else {  
            PaintShape(*shape,option);
         }   
      }
   }
   fGeoManager->SetMatrixReflection(kFALSE);      
}   

//______________________________________________________________________________
void TGeoPainter::PrintOverlaps() const
{
// Print overlaps (see TGeoChecker::PrintOverlaps())
   fChecker->PrintOverlaps();
}   

//______________________________________________________________________________
void TGeoPainter::OpProgress(const char *opname, Long64_t current, Long64_t size, TStopwatch *watch, Bool_t last, Bool_t refresh)
{
// Text progress bar.
   fChecker->OpProgress(opname,current,size,watch,last,refresh);
}   
   
//______________________________________________________________________________
void TGeoPainter::RandomPoints(const TGeoVolume *vol, Int_t npoints, Option_t *option)
{
// Draw random points in the bounding box of a volume.
   fChecker->RandomPoints((TGeoVolume*)vol, npoints, option);
}   

//______________________________________________________________________________
void TGeoPainter::RandomRays(Int_t nrays, Double_t startx, Double_t starty, Double_t startz)
{
// Shoot nrays in the current drawn geometry
   fChecker->RandomRays(nrays, startx, starty, startz);
}   

//______________________________________________________________________________
void TGeoPainter::Raytrace(Option_t * /*option*/)
{
// Raytrace current drawn geometry
   if (!gPad || gPad->IsBatch()) return;   
   TView *view = gPad->GetView();
   if (!view) return;
   TGeoVolume *top = fGeoManager->GetTopVolume();
   if (top != fTopVolume) fGeoManager->SetTopVolume(fTopVolume);
   if (!view->IsPerspective()) view->SetPerspective();
   gVirtualX->SetMarkerSize(1);
   gVirtualX->SetMarkerStyle(1);
   Int_t i;
   Bool_t inclipst=kFALSE, inclip=kFALSE;
   Double_t krad = TMath::DegToRad();
   Double_t lat = view->GetLatitude();
   Double_t longit = view->GetLongitude();
   Double_t psi = view->GetPsi();
   Double_t c1 = TMath::Cos(psi*krad);
   Double_t s1 = TMath::Sin(psi*krad);
   Double_t c2 = TMath::Cos(lat*krad);
   Double_t s2 = TMath::Sin(lat*krad);
   Double_t s3 = TMath::Cos(longit*krad);
   Double_t c3 = -TMath::Sin(longit*krad);
   fMat[0] =  c1*c3 - s1*c2*s3;
   fMat[1] =  c1*s3 + s1*c2*c3;
   fMat[2] =  s1*s2;
      
   fMat[3] =  -s1*c3 - c1*c2*s3;
   fMat[4] = -s1*s3 + c1*c2*c3;
   fMat[5] =  c1*s2;
   
   fMat[6] =  s2*s3;
   fMat[7] =  -s2*c3;
   fMat[8] = c2; 
   Double_t u0, v0, du, dv;
   view->GetWindow(u0,v0,du,dv);
   Double_t dview = view->GetDview();
   Double_t dproj = view->GetDproj();
   Double_t local[3] = {0,0,1};
   Double_t dir[3], normal[3];   
   LocalToMasterVect(local,dir);
   Double_t min[3], max[3];
   view->GetRange(min, max);
   Double_t cov[3];
   for (i=0; i<3; i++) cov[i] = 0.5*(min[i]+max[i]);
   Double_t cop[3]; 
   for (i=0; i<3; i++) cop[i] = cov[i] - dir[i]*dview;
   fGeoManager->InitTrack(cop, dir);
   Bool_t outside = fGeoManager->IsOutside();
   fGeoManager->DoBackupState();
   if (fClippingShape) inclipst = inclip = fClippingShape->Contains(cop);
   Int_t px, py;
   Double_t xloc, yloc, modloc;
   Int_t pxmin,pxmax, pymin,pymax;
   pxmin = gPad->UtoAbsPixel(0);
   pxmax = gPad->UtoAbsPixel(1);
   pymin = gPad->VtoAbsPixel(1);
   pymax = gPad->VtoAbsPixel(0);
   TGeoNode *next, *nextnode;
   Double_t step,steptot;
   Double_t *norm;
   const Double_t *point = fGeoManager->GetCurrentPoint();
   Double_t *ppoint = (Double_t*)point;
   Double_t tosource[3];
   Double_t calf;
   Double_t phi = 0*krad;
   tosource[0] = -dir[0]*TMath::Cos(phi)+dir[1]*TMath::Sin(phi);
   tosource[1] = -dir[0]*TMath::Sin(phi)-dir[1]*TMath::Cos(phi);
   tosource[2] = -dir[2];
   
   Bool_t done;
//   Int_t istep;
   Int_t base_color, color;
   Double_t light;
   Double_t stemin=0, stemax=TGeoShape::Big();
   TPoint *pxy = new TPoint[1];
   TGeoVolume *nextvol;
   Int_t up;
   Int_t ntotal = pxmax*pymax;
   Int_t nrays = 0;
   TStopwatch *timer = new TStopwatch();
   timer->Start();
   for (px=pxmin; px<pxmax; px++) {
      for (py=pymin; py<pymax; py++) {
         if ((nrays%100)==0) OpProgress("Raytracing",nrays,ntotal,timer,kFALSE);
         nrays++;
         base_color = 1;
         steptot = 0;
         inclip = inclipst;
         xloc = gPad->AbsPixeltoX(pxmin+pxmax-px);
         xloc = xloc*du-u0;
         yloc = gPad->AbsPixeltoY(pymin+pymax-py);
         yloc = yloc*dv-v0;
         modloc = TMath::Sqrt(xloc*xloc+yloc*yloc+dproj*dproj);  
         local[0] = xloc/modloc;
         local[1] = yloc/modloc;
         local[2] = dproj/modloc;
         LocalToMasterVect(local,dir);
         fGeoManager->DoRestoreState();
         fGeoManager->SetOutside(outside);
         fGeoManager->SetCurrentPoint(cop);
         fGeoManager->SetCurrentDirection(dir);
//         fGeoManager->InitTrack(cop,dir);
         // current ray pointing to pixel (px,py)
         done = kFALSE;
         norm = 0;
         // propagate to the clipping shape if any
         if (fClippingShape) {
            if (inclip) {
               stemin = fClippingShape->DistFromInside(cop,dir,3);
               stemax = TGeoShape::Big();
            } else {
               stemax = fClippingShape->DistFromOutside(cop,dir,3);
               stemin = 0;
            }
         }         
               
         while (!done) {
            if (fClippingShape) {
               if (stemin>1E10) break;
               if (stemin>0) {
                  // we are inside clipping shape
                  fGeoManager->SetStep(stemin);
                  next = fGeoManager->Step();
                  steptot = 0;
                  stemin = 0;
                  up = 0;
                  while (next) {
                     // we found something after clipping region
                     nextvol = next->GetVolume();
                     if (nextvol->TestAttBit(TGeoAtt::kVisOnScreen)) {
                        done = kTRUE;
                        base_color = nextvol->GetLineColor();
                        fClippingShape->ComputeNormal(ppoint, dir, normal);
                        norm = normal;
                        break;
                     }
                     up++;
                     next = fGeoManager->GetMother(up);
                  }
                  if (done) break;
                  inclip = fClippingShape->Contains(ppoint);
                  fGeoManager->SetStep(1E-3);
                  while (inclip) {
                     fGeoManager->Step();
                     inclip = fClippingShape->Contains(ppoint);
                  }   
                  stemax = fClippingShape->DistFromOutside(ppoint,dir,3);
               }
            }              
            nextnode = fGeoManager->FindNextBoundaryAndStep();
            step = fGeoManager->GetStep();
            if (step>1E10) break;
            steptot += step;
            next = nextnode;
            // Check the step
            if (fClippingShape) {
               if (steptot>stemax) {
                  steptot = 0;
                  inclip = fClippingShape->Contains(ppoint);
                  if (inclip) {
                     stemin = fClippingShape->DistFromInside(ppoint,dir,3);
                     stemax = TGeoShape::Big();
                     continue;
                  } else {
                     stemin = 0;
                     stemax = fClippingShape->DistFromOutside(ppoint,dir,3);  
                  }
               }
            }      
            // Check if next node is visible
            if (!nextnode) continue;
            nextvol = nextnode->GetVolume();
            if (nextvol->TestAttBit(TGeoAtt::kVisOnScreen)) {
               done = kTRUE;
               base_color = nextvol->GetLineColor();
               next = nextnode;
               break;
            }
         }
         if (!done) continue;
         // current ray intersect a visible volume having color=base_color
//         if (!norm) norm = fGeoManager->FindNormal(kFALSE);
         if (!norm) norm = fGeoManager->FindNormalFast();
         if (!norm) continue;
         calf = norm[0]*tosource[0]+norm[1]*tosource[1]+norm[2]*tosource[2];
         light = 0.25+0.5*TMath::Abs(calf);
         color = GetColor(base_color, light);
         // Now we know the color of the pixel, just draw it
         gVirtualX->SetMarkerColor(color);         
         pxy[0].fX = px;
         pxy[0].fY = py;
         gVirtualX->DrawPolyMarker(1,pxy);
      }
   } 
   delete [] pxy;      
   timer->Stop();
   fChecker->OpProgress("Raytracing",nrays,ntotal,timer,kTRUE);
   delete timer;
}

//______________________________________________________________________________
TGeoNode *TGeoPainter::SamplePoints(Int_t npoints, Double_t &dist, Double_t epsil,
                                    const char* g3path)
{
// shoot npoints randomly in a box of 1E-5 arround current point.
// return minimum distance to points outside
   return fChecker->SamplePoints(npoints, dist, epsil, g3path);
}

//______________________________________________________________________________
void TGeoPainter::SetBombFactors(Double_t bombx, Double_t bomby, Double_t bombz, Double_t bombr)
{
//--- Set cartesian and radial bomb factors for translations
   fBombX = bombx;
   fBombY = bomby;
   fBombZ = bombz;
   fBombR = bombr;
   if (IsExplodedView()) ModifiedPad();
}          

//______________________________________________________________________________
void TGeoPainter::SetExplodedView(Int_t ibomb)    
{
   // set type of exploding view
   if ((ibomb<0) || (ibomb>3)) {
      Warning("SetExplodedView", "exploded view can be 0-3");
      return;
   }
   if ((Int_t)ibomb==fExplodedView) return;   
   Bool_t change = (gPad==0)?kFALSE:kTRUE;

   if (ibomb==kGeoNoBomb) {
      change &= ((fExplodedView==kGeoNoBomb)?kFALSE:kTRUE);
   }
   if (ibomb==kGeoBombXYZ) {
      change &= ((fExplodedView==kGeoBombXYZ)?kFALSE:kTRUE);
   }
   if (ibomb==kGeoBombCyl) {
      change &= ((fExplodedView==kGeoBombCyl)?kFALSE:kTRUE);
   }
   if (ibomb==kGeoBombSph) {
      change &= ((fExplodedView==kGeoBombSph)?kFALSE:kTRUE);
   }
   fExplodedView = ibomb;
   if (change) ModifiedPad(); 
}

//______________________________________________________________________________
void TGeoPainter::SetNsegments(Int_t nseg)    
{
// Set number of segments to approximate circles
   if (nseg<3) {
      Warning("SetNsegments", "number of segments should be > 2");
      return;
   }
   if (fNsegments==nseg) return;
   fNsegments = nseg;
   ModifiedPad();
}

//______________________________________________________________________________
void TGeoPainter::SetNmeshPoints(Int_t npoints) {
// Set number of points to be generated on the shape outline when checking for overlaps.
   fChecker->SetNmeshPoints(npoints);
}   

//______________________________________________________________________________
void TGeoPainter::SetCheckedNode(TGeoNode *node) {
// Select a node to be checked for overlaps. All overlaps not involving it will
// be ignored.
   fChecker->SetSelectedNode(node);
}   

//______________________________________________________________________________
void TGeoPainter::SetVisLevel(Int_t level) {
// Set default level down to which visualization is performed
   if (level==fVisLevel && fLastVolume==fTopVolume) return;
   fVisLevel=level;
   if (!fTopVolume) return;
   if (fVisLock) {
      ClearVisibleVolumes();
      fVisLock = kFALSE;
   }   
   if (!fLastVolume) {
//      printf("--- Drawing   %6d nodes with %d visible levels\n",fNVisNodes,fVisLevel);
      return;
   }   
   if (!gPad) return;
   if (gPad->GetView()) {
//      printf("--- Drawing   %6d nodes with %d visible levels\n",fNVisNodes,fVisLevel);
      ModifiedPad();
   }
}

//______________________________________________________________________________
void TGeoPainter::SetTopVisible(Bool_t vis)
{
// Set top geometry volume as visible.
   if (fTopVisible==vis) return;
   fTopVisible = vis;
   ModifiedPad();
}
   
//-----------------------------------------------------------------------------
void TGeoPainter::SetVisOption(Int_t option) {
// set drawing mode :
// option=0 (default) all nodes drawn down to vislevel
// option=1           leaves and nodes at vislevel drawn
// option=2           path is drawn
   if ((fVisOption<0) || (fVisOption>4)) {
      Warning("SetVisOption", "wrong visualization option");
      return;
   }
   
   if (option == kGeoVisChanged) {
      if (fVisLock) {
         ClearVisibleVolumes();
         fVisLock = kFALSE;
      }   
      ModifiedPad();
      return;
   }
   
   if (fTopVolume) {
      TGeoAtt *att = (TGeoAtt*)fTopVolume;
      att->SetAttBit(TGeoAtt::kVisBranch,kFALSE);
      att->SetAttBit(TGeoAtt::kVisContainers,kFALSE);
      att->SetAttBit(TGeoAtt::kVisOnly,kFALSE);
      switch (option) {
         case kGeoVisDefault:
            att->SetAttBit(TGeoAtt::kVisContainers,kTRUE);
            break;
         case kGeoVisLeaves:
            break;
         case kGeoVisOnly:   
            att->SetAttBit(TGeoAtt::kVisOnly,kTRUE);
            break;
      } 
   }            

   if (fVisOption==option) return;   
   fVisOption=option;
   if (fVisLock) {
      ClearVisibleVolumes();
      fVisLock = kFALSE;
   }   
   ModifiedPad();
}

//______________________________________________________________________________
Int_t TGeoPainter::ShapeDistancetoPrimitive(const TGeoShape *shape, Int_t numpoints, Int_t px, Int_t py) const   
{   
//  Returns distance between point px,py on the pad an a shape.
   const Int_t inaxis = 7;
   const Int_t maxdist = 5;
   const Int_t big = 9999;
   Int_t dist = big;
   if (!gPad) return dist;
   TView *view = gPad->GetView();
   if (!(numpoints && view)) return dist;
   if (shape->IsA()==TGeoShapeAssembly::Class()) return dist;

   if (fIsPaintingShape) {
      Int_t puxmin = gPad->XtoAbsPixel(gPad->GetUxmin());
      Int_t puymin = gPad->YtoAbsPixel(gPad->GetUymin());
      Int_t puxmax = gPad->XtoAbsPixel(gPad->GetUxmax());
      Int_t puymax = gPad->YtoAbsPixel(gPad->GetUymax());
      // return if point not in user area
      if (px < puxmin - inaxis) return big;
      if (py > puymin + inaxis) return big;
      if (px > puxmax + inaxis) return big;
      if (py < puymax - inaxis) return big;
      if ((puxmax+inaxis-px) < 40) {
         // when the mouse points to the (40 pix) right edge of the pad, the manager class is selected
         gPad->SetSelected(fGeoManager);
         return 0;
      }
   }

   fBuffer->SetRawSizes(numpoints, 3*numpoints, 0, 0, 0, 0);
   Double_t *points = fBuffer->fPnts;
   shape->SetPoints(points);
   Double_t dpoint2, x1, y1, xndc[3];
   Double_t dmaster[3];
   Int_t j;
   for (Int_t i=0; i<numpoints; i++) {
      j = 3*i;
      TGeoShape::GetTransform()->LocalToMaster(&points[j], dmaster); 
      points[j]=dmaster[0]; points[j+1]=dmaster[1]; points[j+2]=dmaster[2];
      view->WCtoNDC(&points[j], xndc);
      x1 = gPad->XtoAbsPixel(xndc[0]);
      y1 = gPad->YtoAbsPixel(xndc[1]);
      dpoint2 = (px-x1)*(px-x1) + (py-y1)*(py-y1);
      if (dpoint2 < dist) dist=(Int_t)dpoint2;
   }
   if (dist > 100) return dist;
   dist = Int_t(TMath::Sqrt(Double_t(dist)));
   if (dist<maxdist && fIsPaintingShape) gPad->SetSelected((TObject*)shape);
   return dist;
}

//______________________________________________________________________________
void TGeoPainter::Test(Int_t npoints, Option_t *option)
{
// Check time of finding "Where am I" for n points.
   fChecker->Test(npoints, option);
}   

//______________________________________________________________________________
void TGeoPainter::TestOverlaps(const char* path)
{
//--- Geometry overlap checker based on sampling. 
   fChecker->TestOverlaps(path);
}   

//______________________________________________________________________________
Bool_t TGeoPainter::TestVoxels(TGeoVolume *vol)
{
// Check voxels efficiency per volume.
   return fChecker->TestVoxels(vol);
}   

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