ROOT logo
// @(#)root/geom:$Id: TGeoChecker.cxx 31612 2009-12-08 07:02:08Z brun $
// Author: Andrei Gheata   01/11/01
// CheckGeometry(), CheckOverlaps() by Mihaela Gheata

/*************************************************************************
 * 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.             *
 *************************************************************************/

//______________________________________________________________________________
//   TGeoChecker - Geometry checking package.
//===============
//
// TGeoChecker class provides several geometry checking methods. There are two
// types of tests that can be performed. One is based on random sampling or
// ray-tracing and provides a visual check on how navigation methods work for
// a given geometry. The second actually checks the validity of the geometry
// definition in terms of overlapping/extruding objects. Both types of checks
// can be done for a given branch (starting with a given volume) as well as for 
// the geometry as a whole.
//
// 1. TGeoChecker::CheckPoint(Double_t x, Double_t y, Double_t z)
//
// This method can be called direcly from the TGeoManager class and print a
// report on how a given point is classified by the modeller: which is the
// full path to the deepest node containing it, and the (under)estimation 
// of the distance to the closest boundary (safety).
//
// 2. TGeoChecker::RandomPoints(Int_t npoints)
//
// Can be called from TGeoVolume class. It first draws the volume and its
// content with the current visualization settings. Then randomly samples points
// in its bounding box, plotting in the geometry display only the points 
// classified as belonging to visible volumes. 
//
// 3. TGeoChecker::RandomRays(Int_t nrays, Double_t startx, starty, startz)
//
// Can be called and acts in the same way as the previous, but instead of points,
// rays having random isotropic directions are generated from the given point.
// A raytracing algorithm propagates all rays untill they exit geometry, plotting
// all segments crossing visible nodes in the same color as these.
//
// 4. TGeoChecker::Test(Int_t npoints)
//
// Implementation of TGeoManager::Test(). Computes the time for the modeller
// to find out "Where am I?" for a given number of random points.
//
// 5. TGeoChecker::LegoPlot(ntheta, themin, themax, nphi, phimin, phimax,...)
// 
// Implementation of TGeoVolume::LegoPlot(). Draws a spherical radiation length 
// lego plot for a given volume, in a given theta/phi range.
//
// 6. TGeoChecker::Weigth(Double_t precision)
//
// Implementation of TGeoVolume::Weigth(). Estimates the total weigth of a given 
// volume by matrial sampling. Accepts as input the desired precision.
//
// Overlap checker
//-----------------
//
//  -> add it from the doc.
/*
<img src="gif/t_checker.jpg">
*/
//End_HtmlEnd_Html

#include "TVirtualPad.h"
#include "TCanvas.h"
#include "TStyle.h"
#include "TFile.h"
#include "TNtuple.h"
#include "TH2.h"
#include "TRandom3.h"
#include "TPolyMarker3D.h"
#include "TPolyLine3D.h"
#include "TStopwatch.h"

#include "TGeoVoxelFinder.h"
#include "TGeoBBox.h"
#include "TGeoPcon.h"
#include "TGeoManager.h"
#include "TGeoOverlap.h"
#include "TGeoPainter.h"
#include "TGeoChecker.h"

#include "TBuffer3D.h"
#include "TBuffer3DTypes.h"
#include "TMath.h"

#include <stdlib.h>

// statics and globals

ClassImp(TGeoChecker)

//______________________________________________________________________________
TGeoChecker::TGeoChecker()
            :TObject(),
             fGeoManager(NULL),
             fVsafe(NULL),
             fBuff1(NULL),
             fBuff2(NULL),
             fFullCheck(kFALSE),
             fVal1(NULL),
             fVal2(NULL),
             fFlags(NULL),
             fTimer(NULL),
             fSelectedNode(NULL),
             fNchecks(0),
             fNmeshPoints(1000)
{
// Default constructor
}

//______________________________________________________________________________
TGeoChecker::TGeoChecker(TGeoManager *geom)
            :TObject(),
             fGeoManager(geom),
             fVsafe(NULL),
             fBuff1(NULL),
             fBuff2(NULL),
             fFullCheck(kFALSE),
             fVal1(NULL),
             fVal2(NULL),
             fFlags(NULL),
             fTimer(NULL),
             fSelectedNode(NULL),
             fNchecks(0),
             fNmeshPoints(1000)
{
// Constructor for a given geometry
   fBuff1 = new TBuffer3D(TBuffer3DTypes::kGeneric,500,3*500,0,0,0,0);
   fBuff2 = new TBuffer3D(TBuffer3DTypes::kGeneric,500,3*500,0,0,0,0);   
}

//______________________________________________________________________________
TGeoChecker::~TGeoChecker()
{
// Destructor
   if (fBuff1) delete fBuff1;
   if (fBuff2) delete fBuff2;
   if (fTimer) delete fTimer;
}

//______________________________________________________________________________
void TGeoChecker::OpProgress(const char *opname, Long64_t current, Long64_t size, TStopwatch *watch, Bool_t last, Bool_t refresh)
{
// Print current operation progress.
   static Long64_t icount = 0;
   static TString oname;
   static TString nname;
   static Long64_t ocurrent = 0;
   static Long64_t osize = 0;
   static Int_t oseconds = 0;
   static TStopwatch *owatch = 0;
   static Bool_t oneoftwo = kFALSE;
   static Int_t nrefresh = 0;
   const char symbol[4] = {'=','\\','|','/'}; 
   char progress[11] = "          ";
   Int_t ichar = icount%4;
   
   if (!refresh) {
      nrefresh = 0;
      if (!size) return;
      owatch = watch;
      oname = opname;
      ocurrent = TMath::Abs(current);
      osize = TMath::Abs(size);
      if (ocurrent > osize) ocurrent=osize;
   } else {
      nrefresh++;
      if (!osize) return;
   }     
   icount++;
   Double_t time = 0.;
   Int_t hours = 0;
   Int_t minutes = 0;
   Int_t seconds = 0;
   if (owatch && !last) {
      owatch->Stop();
      time = owatch->RealTime();
      hours = (Int_t)(time/3600.);
      time -= 3600*hours;
      minutes = (Int_t)(time/60.);
      time -= 60*minutes;
      seconds = (Int_t)time;
      if (refresh)  {
         if (oseconds==seconds) {
            owatch->Continue();
            return;
         }
         oneoftwo = !oneoftwo;   
      }
      oseconds = seconds;   
   }
   if (refresh && oneoftwo) {
      nname = oname;
      if (fNchecks <= 0) fNchecks = nrefresh+1;
      Int_t pctdone = (Int_t)(100.*nrefresh/fNchecks);
      oname = Form("     == %d%% ==", pctdone);
   }         
   Double_t percent = 100.0*ocurrent/osize;
   Int_t nchar = Int_t(percent/10);
   if (nchar>10) nchar=10;
   Int_t i;
   for (i=0; i<nchar; i++)  progress[i] = '=';
   progress[nchar] = symbol[ichar];
   for (i=nchar+1; i<10; i++) progress[i] = ' ';
   progress[10] = '\0';
   oname += "                    ";
   oname.Remove(20);
   if(size<10000) fprintf(stderr, "%s [%10s] %4lld ", oname.Data(), progress, ocurrent);
   else if(size<100000) fprintf(stderr, "%s [%10s] %5lld ",oname.Data(), progress, ocurrent);
   else fprintf(stderr, "%s [%10s] %7lld ",oname.Data(), progress, ocurrent);
   if (time>0.) fprintf(stderr, "[%6.2f %%]   TIME %.2d:%.2d:%.2d             \r", percent, hours, minutes, seconds);
   else fprintf(stderr, "[%6.2f %%]\r", percent);
   if (refresh && oneoftwo) oname = nname;
   if (owatch) owatch->Continue();
   if (last) {
      icount = 0;
      owatch = 0;
      ocurrent = 0;
      osize = 0;
      oseconds = 0;
      oneoftwo = kFALSE;
      nrefresh = 0;
      fprintf(stderr, "\n");
   }   
}   

//_____________________________________________________________________________
void TGeoChecker::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.
   gRandom = new TRandom3();
   TGeoVolume *tvol = fGeoManager->GetTopVolume();
   Info("CheckBoundaryErrors", "Top volume is %s",tvol->GetName());  
   const TGeoShape *shape = tvol->GetShape();
   TGeoBBox *box = (TGeoBBox *)shape;
   Double_t dl[3];
   Double_t ori[3];
   Double_t xyz[3];
   Double_t nxyz[3];
   Double_t dir[3];
   Double_t relp;
   Char_t path[1024];
   Char_t cdir[10];

   // Tree part
   TFile *f=new TFile("geobugs.root","recreate");
   TTree *bug=new TTree("bug","Geometrical problems");
   bug->Branch("pos",xyz,"xyz[3]/D");
   bug->Branch("dir",dir,"dir[3]/D");
   bug->Branch("push",&relp,"push/D");
   bug->Branch("path",&path,"path/C");
   bug->Branch("cdir",&cdir,"cdir/C");
  
   dl[0] = box->GetDX();
   dl[1] = box->GetDY();
   dl[2] = box->GetDZ();
   ori[0] = (box->GetOrigin())[0];
   ori[1] = (box->GetOrigin())[1];
   ori[2] = (box->GetOrigin())[2];
   if (radius>0)
      dl[0] = dl[1] = dl[2] = radius;
  
   TH1::AddDirectory(kFALSE);
   TH1F *hnew = new TH1F("hnew","Precision pushing",30,-20.,10.);
   TH1F *hold = new TH1F("hold","Precision pulling", 30,-20.,10.);
   TH2F *hplotS = new TH2F("hplotS","Problematic points",100,-dl[0],dl[0],100,-dl[1],dl[1]);
   gStyle->SetOptStat(111111);

   TGeoNode *node = 0;
   Long_t igen=0;
   Long_t itry=0;
   Long_t n100 = ntracks/100;
   Double_t rad = TMath::Sqrt(dl[0]*dl[0]+dl[1]*dl[1]);
   printf("Random box : %f, %f, %f, %f, %f, %f\n", ori[0], ori[1], ori[2], dl[0], dl[1], dl[2]);
   printf("Start... %i points\n", ntracks);
   if (!fTimer) fTimer = new TStopwatch();
   fTimer->Reset();
   fTimer->Start();
   while (igen<ntracks) {
      Double_t phi1  = TMath::TwoPi()*gRandom->Rndm();
      Double_t r     = rad*gRandom->Rndm();
      xyz[0] = ori[0] + r*TMath::Cos(phi1);
      xyz[1] = ori[1] + r*TMath::Sin(phi1);
      Double_t z = (1.-2.*gRandom->Rndm());
      xyz[2] = ori[2]+dl[2]*z*TMath::Abs(z);
      ++itry;
      fGeoManager->SetCurrentPoint(xyz);
      node = fGeoManager->FindNode();
      if (!node || node==fGeoManager->GetTopNode()) continue;
      ++igen;
      if (n100 && !(igen%n100)) 
         OpProgress("Sampling progress:",igen, ntracks, fTimer);
      Double_t cost = 1.-2.*gRandom->Rndm();
      Double_t sint = TMath::Sqrt((1.+cost)*(1.-cost));
      Double_t phi  = TMath::TwoPi()*gRandom->Rndm();
      dir[0] = sint * TMath::Cos(phi);
      dir[1] = sint * TMath::Sin(phi);
      dir[2] = cost;
      fGeoManager->SetCurrentDirection(dir);
      fGeoManager->FindNextBoundary();
      Double_t step = fGeoManager->GetStep();

      relp = 1.e-21;
      for(Int_t i=0; i<30; ++i) {
         relp *=10.;
         for(Int_t j=0; j<3; ++j) nxyz[j]=xyz[j]+step*(1.+relp)*dir[j];
         if(!fGeoManager->IsSameLocation(nxyz[0],nxyz[1],nxyz[2])) {
            hnew->Fill(i-20.);
            if(i>15) {
               const Double_t* norm = fGeoManager->FindNormal();
               strcpy(path,fGeoManager->GetPath());
               Double_t dotp = norm[0]*dir[0]+norm[1]*dir[1]+norm[2]*dir[2];
               printf("Forward error i=%d p=%5.4f %5.4f %5.4f s=%5.4f dot=%5.4f path=%s\n",
                       i,xyz[0],xyz[1],xyz[2],step,dotp,path);
               hplotS->Fill(xyz[0],xyz[1],(Double_t)i);
               strcpy(cdir,"Forward");
               bug->Fill();
            }
	         break;
         }
      }
      
      relp = -1.e-21;
      for(Int_t i=0; i<30; ++i) {
         relp *=10.;
         for(Int_t j=0; j<3; ++j) nxyz[j]=xyz[j]+step*(1.+relp)*dir[j];
         if(fGeoManager->IsSameLocation(nxyz[0],nxyz[1],nxyz[2])) {
            hold->Fill(i-20.);
            if(i>15) {
               const Double_t* norm = fGeoManager->FindNormal();
               strcpy(path,fGeoManager->GetPath());
               Double_t dotp = norm[0]*dir[0]+norm[1]*dir[1]+norm[2]*dir[2];
               printf("Backward error i=%d p=%5.4f %5.4f %5.4f s=%5.4f dot=%5.4f path=%s\n",
                       i,xyz[0],xyz[1],xyz[2],step,dotp,path);
               strcpy(cdir,"Backward");
               bug->Fill();
            }
            break;
         }
      }
   }
   fTimer->Stop();

   printf("CPU time/point = %5.2emus: Real time/point = %5.2emus\n",
	       1000000.*fTimer->CpuTime()/itry,1000000.*fTimer->RealTime()/itry);
   bug->Write();
   delete bug;
   bug=0;
   delete f;

   CheckBoundaryReference();

   printf("Effic = %3.1f%%\n",(100.*igen)/itry);
   TCanvas *c1 = new TCanvas("c1","Results",600,800);
   c1->Divide(1,2);
   c1->cd(1);
   gPad->SetLogy();
   hold->Draw();
   c1->cd(2);
   gPad->SetLogy();
   hnew->Draw();
   /*TCanvas *c3 = */new TCanvas("c3","Plot",600,600);
   hplotS->Draw("cont0");
}   

//_____________________________________________________________________________
void TGeoChecker::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.
   Double_t xyz[3];
   Double_t nxyz[3];
   Double_t dir[3];
   Double_t lnext[3];
   Double_t push;
   Char_t path[1024];
   Char_t cdir[10];
   // Tree part
   TFile *f=new TFile("geobugs.root","read");
   TTree *bug=(TTree*)f->Get("bug");
   bug->SetBranchAddress("pos",xyz);
   bug->SetBranchAddress("dir",dir);
   bug->SetBranchAddress("push",&push);
   bug->SetBranchAddress("path",&path);
   bug->SetBranchAddress("cdir",&cdir);

   Int_t nentries = (Int_t)bug->GetEntries();
   printf("nentries %d\n",nentries);
   if (icheck<0) {
      for (Int_t i=0;i<nentries;i++) {
         bug->GetEntry(i);
         printf("%-9s error push=%g p=%5.4f %5.4f %5.4f s=%5.4f dot=%5.4f path=%s\n",
	             cdir,push,xyz[0],xyz[1],xyz[2],1.,1.,path);
      }
   } else {
      if (icheck>=nentries) return;
      Int_t idebug = TGeoManager::GetVerboseLevel();
      TGeoManager::SetVerboseLevel(5);
      bug->GetEntry(icheck);
      printf("%-9s error push=%g p=%5.4f %5.4f %5.4f s=%5.4f dot=%5.4f path=%s\n",
	          cdir,push,xyz[0],xyz[1],xyz[2],1.,1.,path);
      fGeoManager->SetCurrentPoint(xyz);
      fGeoManager->SetCurrentDirection(dir);
      fGeoManager->FindNode();
      TGeoNode *next = fGeoManager->FindNextBoundary();
      Double_t step = fGeoManager->GetStep();
      for (Int_t j=0; j<3; j++) nxyz[j]=xyz[j]+step*(1.+0.1*push)*dir[j];
      Bool_t change = !fGeoManager->IsSameLocation(nxyz[0],nxyz[1],nxyz[2]);
      printf("step=%g in: %s\n", step, fGeoManager->GetPath());
      printf("  -> next = %s push=%g  change=%d\n", next->GetName(),push, (UInt_t)change);
      next->GetVolume()->InspectShape();
      next->GetVolume()->DrawOnly();
      if (next != fGeoManager->GetCurrentNode()) {
         Int_t index1 = fGeoManager->GetCurrentVolume()->GetIndex(next);
         if (index1>=0) fGeoManager->CdDown(index1);
      }
      TPolyMarker3D *pm = new TPolyMarker3D();
      fGeoManager->MasterToLocal(xyz, lnext);
      pm->SetNextPoint(lnext[0], lnext[1], lnext[2]);
      pm->SetMarkerStyle(2);
      pm->SetMarkerSize(0.2);
      pm->SetMarkerColor(kRed);
      pm->Draw("SAME");
      TPolyMarker3D *pm1 = new TPolyMarker3D();
      for (Int_t j=0; j<3; j++) nxyz[j]=xyz[j]+step*dir[j];
      fGeoManager->MasterToLocal(nxyz, lnext);
      pm1->SetNextPoint(lnext[0], lnext[1], lnext[2]);
      pm1->SetMarkerStyle(2);
      pm1->SetMarkerSize(0.2);
      pm1->SetMarkerColor(kYellow);
      pm1->Draw("SAME");
      TGeoManager::SetVerboseLevel(idebug);
   }   
   delete bug;
   delete f;
}   

//______________________________________________________________________________
void TGeoChecker::CheckGeometryFull(Bool_t checkoverlaps, Bool_t checkcrossings, Int_t ntracks, const Double_t *vertex)
{
// Geometry checking. Opional overlap checkings (by sampling and by mesh). Optional
// boundary crossing check + timing per volume.
//
// STAGE 1: extensive overlap checking by sampling per volume. Stdout need to be 
//  checked by user to get report, then TGeoVolume::CheckOverlaps(0.01, "s") can 
//  be called for the suspicious volumes.
// STAGE2 : normal overlap checking using the shapes mesh - fills the list of 
//  overlaps.
// STAGE3 : shooting NRAYS rays from VERTEX and counting the total number of 
//  crossings per volume (rays propagated from boundary to boundary until 
//  geometry exit). Timing computed and results stored in a histo.
// STAGE4 : shooting 1 mil. random rays inside EACH volume and calling 
//  FindNextBoundary() + Safety() for each call. The timing is normalized by the 
//  number of crossings computed at stage 2 and presented as percentage. 
//  One can get a picture on which are the most "burned" volumes during 
//  transportation from geometry point of view. Another plot of the timing per 
//  volume vs. number of daughters is produced. 
// All histos are saved in the file statistics.root
   Int_t nuid = fGeoManager->GetListOfUVolumes()->GetEntries();
   if (!fTimer) fTimer = new TStopwatch();
   Int_t i;
   Double_t value;
   fFlags = new Bool_t[nuid];
   memset(fFlags, 0, nuid*sizeof(Bool_t));
   TGeoVolume *vol;
   TCanvas *c = new TCanvas("overlaps", "Overlaps by sampling", 800,800);
   new TRandom3();

// STAGE 1: Overlap checking by sampling per volume
   if (checkoverlaps) {
      printf("====================================================================\n");
      printf("STAGE 1: Overlap checking by sampling within 10 microns\n");
      printf("====================================================================\n");
      fGeoManager->CheckOverlaps(0.001, "s"); 

   // STAGE 2: Global overlap/extrusion checking
      printf("====================================================================\n");
      printf("STAGE 2: Global overlap/extrusion checking within 10 microns\n");
      printf("====================================================================\n");
      fGeoManager->CheckOverlaps(0.001);
   }   
   
   if (!checkcrossings) {
      delete [] fFlags;
      fFlags = 0;
      delete c;
      return;
   }   
   
   fVal1 = new Double_t[nuid];
   fVal2 = new Double_t[nuid];
   memset(fVal1, 0, nuid*sizeof(Double_t));
   memset(fVal2, 0, nuid*sizeof(Double_t));
   // STAGE 3: How many crossings per volume in a realistic case ?
   // Ignore volumes with no daughters

   // Generate rays from vertex in phi=[0,2*pi] theta=[0,pi]
//   Int_t ntracks = 1000000;
   printf("====================================================================\n");
   printf("STAGE 3: Propagating %i tracks starting from vertex\n and conting number of boundary crossings...\n", ntracks);
   printf("====================================================================\n");
   Int_t nbound = 0;
   Double_t theta, phi;
   Double_t point[3], dir[3];
   memset(point, 0, 3*sizeof(Double_t));
   if (vertex) memcpy(point, vertex, 3*sizeof(Double_t));
   
   fTimer->Reset();
   fTimer->Start();
   for (i=0; i<ntracks; i++) {
      phi = 2.*TMath::Pi()*gRandom->Rndm();
      theta= TMath::ACos(1.-2.*gRandom->Rndm());
      dir[0]=TMath::Sin(theta)*TMath::Cos(phi);
      dir[1]=TMath::Sin(theta)*TMath::Sin(phi);
      dir[2]=TMath::Cos(theta);
      if ((i%100)==0) OpProgress("Transporting tracks",i, ntracks, fTimer); 
//      if ((i%1000)==0) printf("... remaining tracks %i\n", ntracks-i);
      nbound += PropagateInGeom(point,dir);
   }
   fTimer->Stop();
   Double_t time1 = fTimer->CpuTime() *1.E6;
   Double_t time2 = time1/ntracks;
   Double_t time3 = time1/nbound;
   OpProgress("Transporting tracks",ntracks, ntracks, fTimer, kTRUE); 
   printf("Time for crossing %i boundaries: %g [ms]\n", nbound, time1);
   printf("Time per track for full geometry traversal: %g [ms], per crossing: %g [ms]\n", time2, time3);

// STAGE 4: How much time per volume:
   
   printf("====================================================================\n");
   printf("STAGE 4: How much navigation time per volume per next+safety call\n");
   printf("====================================================================\n");
   TGeoIterator next(fGeoManager->GetTopVolume());
   TGeoNode*current;
   TString path;
   vol = fGeoManager->GetTopVolume();
   memset(fFlags, 0, nuid*sizeof(Bool_t));
   TStopwatch timer;
   timer.Start();
   i = 0;
   char volname[30];
   sprintf(volname, "Tracking %s", vol->GetName());
   volname[15] = '\0';
   OpProgress(volname,i++, nuid, &timer); 
   Score(vol, 1, TimingPerVolume(vol)); 
   while ((current=next())) {
      vol = current->GetVolume();
      Int_t uid = vol->GetNumber();
      if (fFlags[uid]) continue;
      fFlags[uid] = kTRUE;
      next.GetPath(path);
      fGeoManager->cd(path.Data());
      sprintf(volname, "Tracking %s", vol->GetName());
      volname[15] = '\0';
      OpProgress(volname,i++, nuid, &timer); 
      Score(vol,1,TimingPerVolume(vol));
   }   
   OpProgress("STAGE 4 completed",i, nuid, &timer, kTRUE); 
   // Draw some histos
   Double_t time_tot_pertrack = 0.;
   TCanvas *c1 = new TCanvas("c2","ncrossings",10,10,900,500);
   c1->SetGrid();
   c1->SetTopMargin(0.15);
   TFile *f = new TFile("statistics.root", "RECREATE");
   TH1F *h = new TH1F("h","number of boundary crossings per volume",3,0,3);
   h->SetStats(0);
   h->SetFillColor(38);
   h->SetBit(TH1::kCanRebin);
   
   memset(fFlags, 0, nuid*sizeof(Bool_t));
   for (i=0; i<nuid; i++) {
      vol = fGeoManager->GetVolume(i);
      if (!vol->GetNdaughters()) continue;
      time_tot_pertrack += fVal1[i]*fVal2[i];
      h->Fill(vol->GetName(), (Int_t)fVal1[i]);
   }
   time_tot_pertrack /= ntracks;
   h->LabelsDeflate();
   h->LabelsOption(">","X");
   h->Draw();   


   TCanvas *c2 = new TCanvas("c3","time spent per volume in navigation",10,10,900,500);
   c2->SetGrid();
   c2->SetTopMargin(0.15);
   TH2F *h2 = new TH2F("h2", "time per FNB call vs. ndaughters", 100, 0,100,100,0,15);
   h2->SetStats(0);
   h2->SetMarkerStyle(2);
   TH1F *h1 = new TH1F("h1","percent of time spent per volume",3,0,3);
   h1->SetStats(0);
   h1->SetFillColor(38);
   h1->SetBit(TH1::kCanRebin);
   for (i=0; i<nuid; i++) {
      vol = fGeoManager->GetVolume(i);
      if (!vol->GetNdaughters()) continue;
      value = fVal1[i]*fVal2[i]/ntracks/time_tot_pertrack;
      h1->Fill(vol->GetName(), value);
      h2->Fill(vol->GetNdaughters(), fVal2[i]);
   }     
   h1->LabelsDeflate();
   h1->LabelsOption(">","X");
   h1->Draw();
   TCanvas *c3 = new TCanvas("c4","timing vs. ndaughters",10,10,900,500);
   c3->SetGrid();
   c3->SetTopMargin(0.15);
   h2->Draw();   
   f->Write();
   delete [] fFlags;
   fFlags = 0;
   delete [] fVal1;
   fVal1 = 0;
   delete [] fVal2;
   fVal2 = 0;
   delete fTimer;
   fTimer = 0;
   delete c;
}

//______________________________________________________________________________
Int_t TGeoChecker::PropagateInGeom(Double_t *start, Double_t *dir)
{
// Propagate from START along DIR from boundary to boundary until exiting 
// geometry. Fill array of hits.
   fGeoManager->InitTrack(start, dir);
   TGeoNode *current = 0;
   Int_t nzero = 0;
   Int_t nhits = 0;
   while (!fGeoManager->IsOutside()) {
      current = fGeoManager->FindNextBoundaryAndStep(TGeoShape::Big(), kFALSE);
      if (!current || fGeoManager->IsOutside()) return nhits;
      Double_t step = fGeoManager->GetStep();
      if (step<2.*TGeoShape::Tolerance()) {
         nzero++;
         continue;
      } 
      else nzero = 0;
      if (nzero>3) {
      // Problems in trying to cross a boundary
         printf("Error in trying to cross boundary of %s\n", current->GetName());
         return nhits;
      }
      // Generate the hit
      nhits++;
      TGeoVolume *vol = current->GetVolume();
      Score(vol,0,1.);
      Int_t iup = 1;
      TGeoNode *mother = fGeoManager->GetMother(iup++);
      while (mother && mother->GetVolume()->IsAssembly()) {
         Score(mother->GetVolume(), 0, 1.);
         mother = fGeoManager->GetMother(iup++);
      }   
   }
   return nhits;
}      

//______________________________________________________________________________
void TGeoChecker::Score(TGeoVolume *vol, Int_t ifield, Double_t value)
{
// Score a hit for VOL
   Int_t uid = vol->GetNumber();
   switch (ifield) {
      case 0:
         fVal1[uid] += value;
         break;
      case 1:
         fVal2[uid] += value;
   }
}   

//______________________________________________________________________________
void TGeoChecker::SetNmeshPoints(Int_t npoints) {
// Set number of points to be generated on the shape outline when checking for overlaps.
   fNmeshPoints = npoints;
   if (npoints<1000) {
      Error("SetNmeshPoints", "Cannot allow less than 1000 points for checking - set to 1000");
      fNmeshPoints = 1000;
   }
}   

//______________________________________________________________________________
Double_t TGeoChecker::TimingPerVolume(TGeoVolume *vol)
{
// Compute timing per "FindNextBoundary" + "Safety" call. Volume must be
// in the current path.
   fTimer->Reset();
   const TGeoShape *shape = vol->GetShape();
   TGeoBBox *box = (TGeoBBox *)shape;
   Double_t dx = box->GetDX();
   Double_t dy = box->GetDY();
   Double_t dz = box->GetDZ();
   Double_t ox = (box->GetOrigin())[0];
   Double_t oy = (box->GetOrigin())[1];
   Double_t oz = (box->GetOrigin())[2];
   Double_t point[3], dir[3], lpt[3], ldir[3];
   Double_t pstep = 0.;
   pstep = TMath::Max(pstep,dz);
   Double_t theta, phi;
   Int_t idaughter;
   fTimer->Start();
   Double_t dist;
   Bool_t inside;
   for (Int_t i=0; i<1000000; i++) {
      lpt[0] = ox-dx+2*dx*gRandom->Rndm();
      lpt[1] = oy-dy+2*dy*gRandom->Rndm();
      lpt[2] = oz-dz+2*dz*gRandom->Rndm();
      fGeoManager->GetCurrentMatrix()->LocalToMaster(lpt,point);
      fGeoManager->SetCurrentPoint(point[0],point[1],point[2]);
      phi = 2*TMath::Pi()*gRandom->Rndm();
      theta= TMath::ACos(1.-2.*gRandom->Rndm());
      ldir[0]=TMath::Sin(theta)*TMath::Cos(phi);
      ldir[1]=TMath::Sin(theta)*TMath::Sin(phi);
      ldir[2]=TMath::Cos(theta);
      fGeoManager->GetCurrentMatrix()->LocalToMasterVect(ldir,dir);
      fGeoManager->SetCurrentDirection(dir);
      fGeoManager->SetStep(pstep);
      fGeoManager->ResetState();
      inside = kTRUE;
      dist = TGeoShape::Big();
      if (!vol->IsAssembly()) {
         inside = vol->Contains(lpt);
         if (!inside) {
            dist = vol->GetShape()->DistFromOutside(lpt,ldir,3,pstep); 
//            if (dist>=pstep) continue;
         } else {   
            vol->GetShape()->DistFromInside(lpt,ldir,3,pstep);
         }   
            
         if (!vol->GetNdaughters()) vol->GetShape()->Safety(lpt, inside);
      }   
      if (vol->GetNdaughters()) {
         fGeoManager->Safety();
         fGeoManager->FindNextDaughterBoundary(point,dir,idaughter,kFALSE);
      }   
   }
   fTimer->Stop();
   Double_t time_per_track = fTimer->CpuTime();
   Int_t uid = vol->GetNumber();
   Int_t ncrossings = (Int_t)fVal1[uid];
   if (!vol->GetNdaughters())
      printf("Time for volume %s (shape=%s): %g [ms] ndaughters=%d ncross=%d\n", vol->GetName(), vol->GetShape()->GetName(), time_per_track, vol->GetNdaughters(), ncrossings);
   else
      printf("Time for volume %s (assemb=%d): %g [ms] ndaughters=%d ncross=%d\n", vol->GetName(), vol->IsAssembly(), time_per_track, vol->GetNdaughters(), ncrossings);
   return time_per_track;
}

//______________________________________________________________________________
void TGeoChecker::CheckGeometry(Int_t nrays, Double_t startx, Double_t starty, Double_t startz) const
{
// Shoot nrays with random directions from starting point (startx, starty, startz)
// in the reference frame of this volume. Track each ray until exiting geometry, then
// shoot backwards from exiting point and compare boundary crossing points.
   Int_t i, j;
   Double_t start[3], end[3];
   Double_t dir[3];
   Double_t dummy[3];
   Double_t eps = 0.;
   Double_t *array1 = new Double_t[3*1000];
   Double_t *array2 = new Double_t[3*1000];
   TObjArray *pma = new TObjArray();
   TPolyMarker3D *pm;
   pm = new TPolyMarker3D();
   pm->SetMarkerColor(2); // error > eps
   pm->SetMarkerStyle(8);
   pm->SetMarkerSize(0.4);
   pma->AddAt(pm, 0);
   pm = new TPolyMarker3D();
   pm->SetMarkerColor(4); // point not found
   pm->SetMarkerStyle(8);
   pm->SetMarkerSize(0.4);
   pma->AddAt(pm, 1);
   pm = new TPolyMarker3D();
   pm->SetMarkerColor(6); // extra point back
   pm->SetMarkerStyle(8);
   pm->SetMarkerSize(0.4);
   pma->AddAt(pm, 2);
   Int_t nelem1, nelem2;
   Int_t dim1=1000, dim2=1000;
   if ((startx==0) && (starty==0) && (startz==0)) eps=1E-3;
   start[0] = startx+eps;
   start[1] = starty+eps;
   start[2] = startz+eps;
   Int_t n10=nrays/10;
   Double_t theta,phi;
   Double_t dw, dwmin, dx, dy, dz;
   Int_t ist1, ist2, ifound;
   for (i=0; i<nrays; i++) {
      if (n10) {
         if ((i%n10) == 0) printf("%i percent\n", Int_t(100*i/nrays));
      }
      phi = 2*TMath::Pi()*gRandom->Rndm();
      theta= TMath::ACos(1.-2.*gRandom->Rndm());
      dir[0]=TMath::Sin(theta)*TMath::Cos(phi);
      dir[1]=TMath::Sin(theta)*TMath::Sin(phi);
      dir[2]=TMath::Cos(theta);
      // shoot direct ray
      nelem1=nelem2=0;
//      printf("DIRECT %i\n", i);
      ShootRay(&start[0], dir[0], dir[1], dir[2], array1, nelem1, dim1);
      if (!nelem1) continue;
//      for (j=0; j<nelem1; j++) printf("%i : %f %f %f\n", j, array1[3*j], array1[3*j+1], array1[3*j+2]);
      memcpy(&end[0], &array1[3*(nelem1-1)], 3*sizeof(Double_t));
      // shoot ray backwards
//      printf("BACK %i\n", i);
      ShootRay(&end[0], -dir[0], -dir[1], -dir[2], array2, nelem2, dim2, &start[0]);
      if (!nelem2) {
         printf("#### NOTHING BACK ###########################\n");
         for (j=0; j<nelem1; j++) {
            pm = (TPolyMarker3D*)pma->At(0);
            pm->SetNextPoint(array1[3*j], array1[3*j+1], array1[3*j+2]);
         }
         continue;
      }             
//      printf("BACKWARDS\n");
      Int_t k=nelem2>>1;
      for (j=0; j<k; j++) {
         memcpy(&dummy[0], &array2[3*j], 3*sizeof(Double_t));
         memcpy(&array2[3*j], &array2[3*(nelem2-1-j)], 3*sizeof(Double_t));
         memcpy(&array2[3*(nelem2-1-j)], &dummy[0], 3*sizeof(Double_t));
      }
//      for (j=0; j<nelem2; j++) printf("%i : %f ,%f ,%f   \n", j, array2[3*j], array2[3*j+1], array2[3*j+2]);         
      if (nelem1!=nelem2) printf("### DIFFERENT SIZES : nelem1=%i nelem2=%i ##########\n", nelem1, nelem2);
      ist1 = ist2 = 0;
      // check first match
      
      dx = array1[3*ist1]-array2[3*ist2];
      dy = array1[3*ist1+1]-array2[3*ist2+1];
      dz = array1[3*ist1+2]-array2[3*ist2+2];
      dw = dx*dir[0]+dy*dir[1]+dz*dir[2];
      fGeoManager->SetCurrentPoint(&array1[3*ist1]);
      fGeoManager->FindNode();
//      printf("%i : %s (%g, %g, %g)\n", ist1, fGeoManager->GetPath(), 
//             array1[3*ist1], array1[3*ist1+1], array1[3*ist1+2]);
      if (TMath::Abs(dw)<1E-4) {
//         printf("   matching %i (%g, %g, %g)\n", ist2, array2[3*ist2], array2[3*ist2+1], array2[3*ist2+2]);
         ist2++;
      } else {
         printf("### NOT MATCHING %i f:(%f, %f, %f) b:(%f %f %f) DCLOSE=%f\n", ist2, array1[3*ist1], array1[3*ist1+1], array1[3*ist1+2], array2[3*ist2], array2[3*ist2+1], array2[3*ist2+2],dw);
         pm = (TPolyMarker3D*)pma->At(0);
         pm->SetNextPoint(array2[3*ist2], array2[3*ist2+1], array2[3*ist2+2]);
         if (dw<0) {
            // first boundary missed on way back
         } else {
            // first boundary different on way back
            ist2++;
         }
      }      
      
      while ((ist1<nelem1-1) && (ist2<nelem2)) {
         fGeoManager->SetCurrentPoint(&array1[3*ist1+3]);
         fGeoManager->FindNode();
//         printf("%i : %s (%g, %g, %g)\n", ist1+1, fGeoManager->GetPath(), 
//                array1[3*ist1+3], array1[3*ist1+4], array1[3*ist1+5]);
         
         dx = array1[3*ist1+3]-array1[3*ist1];
         dy = array1[3*ist1+4]-array1[3*ist1+1];
         dz = array1[3*ist1+5]-array1[3*ist1+2];
         // distance to next point
         dwmin = dx+dir[0]+dy*dir[1]+dz*dir[2];
         while (ist2<nelem2) {
            ifound = 0;
            dx = array2[3*ist2]-array1[3*ist1];
            dy = array2[3*ist2+1]-array1[3*ist1+1];
            dz = array2[3*ist2+2]-array1[3*ist1+2];
            dw = dx+dir[0]+dy*dir[1]+dz*dir[2];
            if (TMath::Abs(dw-dwmin)<1E-4) {
               ist1++;
               ist2++;
               break;
            }   
            if (dw<dwmin) {
            // point found on way back. Check if close enough to ist1+1
               ifound++;
               dw = dwmin-dw;
               if (dw<1E-4) {
               // point is matching ist1+1
//                  printf("   matching %i (%g, %g, %g) DCLOSE=%g\n", ist2, array2[3*ist2], array2[3*ist2+1], array2[3*ist2+2], dw);
                  ist2++;
                  ist1++;
                  break;
               } else {
               // extra boundary found on way back   
                  fGeoManager->SetCurrentPoint(&array2[3*ist2]);
                  fGeoManager->FindNode();
                  pm = (TPolyMarker3D*)pma->At(2);
                  pm->SetNextPoint(array2[3*ist2], array2[3*ist2+1], array2[3*ist2+2]);
                  printf("### EXTRA BOUNDARY %i :  %s found at DCLOSE=%f\n", ist2, fGeoManager->GetPath(), dw);
                  ist2++;
                  continue;
               }
            } else {
               if (!ifound) {
                  // point ist1+1 not found on way back
                  fGeoManager->SetCurrentPoint(&array1[3*ist1+3]);
                  fGeoManager->FindNode();
                  pm = (TPolyMarker3D*)pma->At(1);
                  pm->SetNextPoint(array2[3*ist1+3], array2[3*ist1+4], array2[3*ist1+5]);
                  printf("### BOUNDARY MISSED BACK #########################\n");
                  ist1++;
                  break;
               } else {
                  ist1++;
                  break;
               }
            }
         }               
      }                          
   }   
   pm = (TPolyMarker3D*)pma->At(0);
   pm->Draw("SAME");
   pm = (TPolyMarker3D*)pma->At(1);
   pm->Draw("SAME");
   pm = (TPolyMarker3D*)pma->At(2);
   pm->Draw("SAME");
   if (gPad) {
      gPad->Modified();
      gPad->Update();
   }      
   delete [] array1;
   delete [] array2;
}

//______________________________________________________________________________
void TGeoChecker::CleanPoints(Double_t *points, Int_t &numPoints) const
{
// Clean-up the mesh of pcon/pgon from useless points
   Int_t ipoint = 0;
   Int_t j, k=0;
   Double_t rsq;
   for (Int_t i=0; i<numPoints; i++) {
      j = 3*i;
      rsq = points[j]*points[j]+points[j+1]*points[j+1];
      if (rsq < 1.e-10) continue;
      points[k] = points[j];
      points[k+1] = points[j+1];
      points[k+2] = points[j+2];
      ipoint++;
      k = 3*ipoint;
   }
   numPoints = ipoint;
}      

//______________________________________________________________________________
TGeoOverlap *TGeoChecker::MakeCheckOverlap(const char *name, TGeoVolume *vol1, TGeoVolume *vol2, TGeoMatrix *mat1, TGeoMatrix *mat2, Bool_t isovlp, Double_t ovlp)
{
// Check if the 2 non-assembly volume candidates overlap/extrude. Returns overlap object.
   TGeoOverlap *nodeovlp = 0;
   Int_t numPoints1 = fBuff1->NbPnts();
   Int_t numSegs1   = fBuff1->NbSegs();
   Int_t numPols1   = fBuff1->NbPols();
   Int_t numPoints2 = fBuff2->NbPnts();
   Int_t numSegs2   = fBuff2->NbSegs();
   Int_t numPols2   = fBuff2->NbPols();
   Int_t ip;
   Bool_t extrude, isextrusion, isoverlapping;
   Double_t *points1 = fBuff1->fPnts; 
   Double_t *points2 = fBuff2->fPnts;
   Double_t local[3], local1[3];
   Double_t point[3];
   Double_t safety = TGeoShape::Big();
   if (vol1->IsAssembly() || vol2->IsAssembly()) return nodeovlp;
   TGeoShape *shape1 = vol1->GetShape();
   TGeoShape *shape2 = vol2->GetShape();
   OpProgress("refresh", 0,0,NULL,kFALSE,kTRUE);   
   shape1->GetMeshNumbers(numPoints1, numSegs1, numPols1);
   if (!shape1->IsComposite() && 
       fBuff1->fID != (TObject*)shape1) {
      // Fill first buffer.
      fBuff1->SetRawSizes(TMath::Max(numPoints1,fNmeshPoints), 3*TMath::Max(numPoints1,fNmeshPoints), 0, 0, 0, 0);
      points1 = fBuff1->fPnts;
      if (shape1->GetPointsOnSegments(fNmeshPoints, points1)) {
         numPoints1 = fNmeshPoints;
      } else {   
         shape1->SetPoints(points1);
      }   
//      if (shape1->InheritsFrom(TGeoPcon::Class())) {
//         CleanPoints(points1, numPoints1);
//         fBuff1->SetRawSizes(numPoints1, 3*numPoints1,0, 0, 0, 0);
//      }   
      fBuff1->fID = shape1;
   }   
   shape2->GetMeshNumbers(numPoints2, numSegs2, numPols2);
   if (!shape2->IsComposite() && 
       fBuff2->fID != (TObject*)shape2) {
      // Fill second buffer.
      fBuff2->SetRawSizes(TMath::Max(numPoints2,fNmeshPoints), 3*TMath::Max(numPoints2,fNmeshPoints), 0, 0, 0,0);
      points2 = fBuff2->fPnts;
      if (shape2->GetPointsOnSegments(fNmeshPoints, points2)) {
         numPoints2 = fNmeshPoints;
      } else {   
         shape2->SetPoints(points2);
      }   
//      if (shape2->InheritsFrom(TGeoPcon::Class())) {
//         CleanPoints(points2, numPoints2);
//         fBuff1->SetRawSizes(numPoints2, 3*numPoints2,0,0,0,0);
//      }   
      fBuff2->fID = shape2;
   }   
      
   if (!isovlp) {
   // Extrusion case. Test vol2 extrude vol1.
      isextrusion=kFALSE;
      // loop all points of the daughter
      if (!shape2->IsComposite()) {
         for (ip=0; ip<numPoints2; ip++) {
            memcpy(local, &points2[3*ip], 3*sizeof(Double_t));
            if (local[0]<1e-10 && local[1]<1e-10) continue;
            mat2->LocalToMaster(local, point);
            mat1->MasterToLocal(point, local);
            extrude = !shape1->Contains(local);
            if (extrude) {
               safety = shape1->Safety(local, kFALSE);
               if (safety<ovlp) extrude=kFALSE;
            }    
            if (extrude) {
               if (!isextrusion) {
                  isextrusion = kTRUE;
                  nodeovlp = new TGeoOverlap(name, vol1, vol2, mat1,mat2,kFALSE,safety);
                  nodeovlp->SetNextPoint(point[0],point[1],point[2]);
                  fGeoManager->AddOverlap(nodeovlp);
               } else {
                  if (safety>nodeovlp->GetOverlap()) nodeovlp->SetOverlap(safety);
                  nodeovlp->SetNextPoint(point[0],point[1],point[2]);
               }   
            }
         }
      }                
      // loop all points of the mother
      if (!shape1->IsComposite()) {
         for (ip=0; ip<numPoints1; ip++) {
            memcpy(local, &points1[3*ip], 3*sizeof(Double_t));
            if (local[0]<1e-10 && local[1]<1e-10) continue;
            mat1->LocalToMaster(local, point);
            mat2->MasterToLocal(point, local1);
            extrude = shape2->Contains(local1);
            if (extrude) {
               // skip points on mother mesh that have no neghbourhood ouside mother
               safety = shape1->Safety(local,kTRUE);
               if (safety>1E-6) {
                  extrude = kFALSE;
               } else {   
                  safety = shape2->Safety(local1,kTRUE);
                  if (safety<ovlp) extrude=kFALSE;
               }   
            }   
            if (extrude) {
               if (!isextrusion) {
                  isextrusion = kTRUE;
                  nodeovlp = new TGeoOverlap(name, vol1,vol2,mat1,mat2,kFALSE,safety);
                  nodeovlp->SetNextPoint(point[0],point[1],point[2]);
                  fGeoManager->AddOverlap(nodeovlp);
               } else {
                  if (safety>nodeovlp->GetOverlap()) nodeovlp->SetOverlap(safety);
                  nodeovlp->SetNextPoint(point[0],point[1],point[2]);
               }   
            }
         }
      }
      return nodeovlp;
   }            
   // Check overlap
   Bool_t overlap;
   overlap = kFALSE;
   isoverlapping = kFALSE;
   if (!shape1->IsComposite()) {
      // loop all points of first candidate
      for (ip=0; ip<numPoints1; ip++) {
         memcpy(local, &points1[3*ip], 3*sizeof(Double_t));
         if (local[0]<1e-10 && local[1]<1e-10) continue;
         mat1->LocalToMaster(local, point);
         mat2->MasterToLocal(point, local); // now point in local reference of second
         overlap = shape2->Contains(local);
         if (overlap) {
            safety = shape2->Safety(local, kTRUE);
            if (safety<ovlp) overlap=kFALSE;
         }    
         if (overlap) {
            if (!isoverlapping) {
               isoverlapping = kTRUE;
               nodeovlp = new TGeoOverlap(name,vol1,vol2,mat1,mat2,kTRUE,safety);
               nodeovlp->SetNextPoint(point[0],point[1],point[2]);
               fGeoManager->AddOverlap(nodeovlp);
            } else {
               if (safety>nodeovlp->GetOverlap()) nodeovlp->SetOverlap(safety);
               nodeovlp->SetNextPoint(point[0],point[1],point[2]);
            }     
         }
      }
   }   
   // loop all points of second candidate
   if (!shape2->IsComposite()) {
      for (ip=0; ip<numPoints2; ip++) {
         memcpy(local, &points2[3*ip], 3*sizeof(Double_t));
         if (local[0]<1e-10 && local[1]<1e-10) continue;
         mat2->LocalToMaster(local, point);
         mat1->MasterToLocal(point, local); // now point in local reference of first
         overlap = shape1->Contains(local);
         if (overlap) {
            safety = shape1->Safety(local, kTRUE);
            if (safety<ovlp) overlap=kFALSE;
         }    
         if (overlap) {
            if (!isoverlapping) {
               isoverlapping = kTRUE;
               nodeovlp = new TGeoOverlap(name,vol1,vol2,mat1,mat2,kTRUE,safety);
               nodeovlp->SetNextPoint(point[0],point[1],point[2]);
               fGeoManager->AddOverlap(nodeovlp);
            } else {
               if (safety>nodeovlp->GetOverlap()) nodeovlp->SetOverlap(safety);
               nodeovlp->SetNextPoint(point[0],point[1],point[2]);
            }     
         }
      }
   } 
   return nodeovlp;  
}

//______________________________________________________________________________
void TGeoChecker::CheckOverlapsBySampling(TGeoVolume *vol, Double_t /* ovlp */, Int_t npoints) const
{
// Check illegal overlaps for volume VOL within a limit OVLP by sampling npoints
// inside the volume shape.
   Int_t nd = vol->GetNdaughters();
   if (nd<2) return;
   TGeoVoxelFinder *voxels = vol->GetVoxels();
   if (!voxels) return;
   if (voxels->NeedRebuild()) {
      voxels->Voxelize();
      vol->FindOverlaps();
   }   
   TGeoBBox *box = (TGeoBBox*)vol->GetShape();
   TGeoShape *shape;
   TGeoNode *node;
   Double_t dx = box->GetDX();
   Double_t dy = box->GetDY();
   Double_t dz = box->GetDZ();
   Double_t pt[3];
   Double_t local[3];
   Int_t *check_list = 0;
   Int_t ncheck = 0;
   const Double_t *orig = box->GetOrigin();
   Int_t ipoint = 0;
   Int_t itry = 0;
   Int_t iovlp = 0;
   Int_t id=0, id0=0, id1=0;
   Bool_t in, incrt;
   Double_t safe;
   TString name1 = "";
   TString name2 = "";
   TGeoOverlap **flags = 0;
   TGeoNode *node1, *node2;
   Int_t novlps = 0;
   TGeoHMatrix mat1, mat2;
   if (!gRandom) new TRandom3();
   while (ipoint < npoints) {
   // Shoot randomly in the bounding box.
      pt[0] = orig[0] - dx + 2.*dx*gRandom->Rndm();
      pt[1] = orig[1] - dy + 2.*dy*gRandom->Rndm();
      pt[2] = orig[2] - dz + 2.*dz*gRandom->Rndm();
      if (!vol->Contains(pt)) {
         itry++;
         if (itry>10000 && !ipoint) {
            Error("CheckOverlapsBySampling", "No point inside volume!!! - aborting");
            break;
         }   
         continue;
      }   
      // Check if the point is inside one or more daughters
      in = kFALSE;
      ipoint++;
      check_list = voxels->GetCheckList(pt, ncheck);
      if (!check_list || ncheck<2) continue;
      for (id=0; id<ncheck; id++) {
         id0 = check_list[id];
         node  = vol->GetNode(id0);
         // Ignore MANY's
         if (node->IsOverlapping()) continue;
         node->GetMatrix()->MasterToLocal(pt,local);
         shape = node->GetVolume()->GetShape();
         incrt = shape->Contains(local);
         if (!incrt) continue;
         if (!in) {
            in = kTRUE;
            id1 = id0;
            continue;
         }
         // The point is inside 2 or more daughters, check safety
         safe = shape->Safety(local, kTRUE);
//         if (safe < ovlp) continue;
         // We really have found an overlap -> store the point in a container
         iovlp++;
         if (!novlps) {
            flags = new TGeoOverlap*[nd*nd];
            memset(flags, 0, nd*nd*sizeof(TGeoOverlap*));
         }
         TGeoOverlap *nodeovlp = flags[nd*id1+id0];
         if (!nodeovlp) {
            novlps++;
            node1 = vol->GetNode(id1);
            name1 = node1->GetName();
            mat1 = node1->GetMatrix();
            Int_t cindex = node1->GetVolume()->GetCurrentNodeIndex();
            while (cindex >= 0) {
               node1 = node1->GetVolume()->GetNode(cindex);
               name1 += Form("/%s", node1->GetName());
               mat1.Multiply(node1->GetMatrix());
               cindex = node1->GetVolume()->GetCurrentNodeIndex();
            }   
            node2 = vol->GetNode(id0);
            name2 = node2->GetName();
            mat2 = node2->GetMatrix();
            cindex = node2->GetVolume()->GetCurrentNodeIndex();
            while (cindex >= 0) {
               node2 = node2->GetVolume()->GetNode(cindex);
               name2 += Form("/%s", node2->GetName());
               mat2.Multiply(node2->GetMatrix());
               cindex = node2->GetVolume()->GetCurrentNodeIndex();
            }   
            nodeovlp = new TGeoOverlap(Form("Volume %s: node %s overlapping %s", 
               vol->GetName(), name1.Data(), name2.Data()), node1->GetVolume(),node2->GetVolume(),
               &mat1,&mat2, kTRUE, safe);
            flags[nd*id1+id0] = nodeovlp;
            fGeoManager->AddOverlap(nodeovlp);
         } 
         // Max 100 points per marker
         if (nodeovlp->GetPolyMarker()->GetN()<100) nodeovlp->SetNextPoint(pt[0],pt[1],pt[2]);
         if (nodeovlp->GetOverlap()<safe) nodeovlp->SetOverlap(safe);
      }
   }

   if (flags) delete [] flags;
   if (!novlps) return;
   Double_t capacity = vol->GetShape()->Capacity();
   capacity *= Double_t(iovlp)/Double_t(npoints);
   Double_t err = 1./TMath::Sqrt(Double_t(iovlp));
   Info("CheckOverlapsBySampling", "#Found %d overlaps adding-up to %g +/- %g [cm3] for daughters of %s",
         novlps, capacity, err*capacity, vol->GetName());
}   

//______________________________________________________________________________
Int_t TGeoChecker::NChecksPerVolume(TGeoVolume *vol)
{
// Compute number of overlaps combinations to check per volume
   if (vol->GetFinder()) return 0;
   UInt_t nd = vol->GetNdaughters();
   if (!nd) return 0;
   Bool_t is_assembly = vol->IsAssembly();
   TGeoIterator next1(vol);
   TGeoIterator next2(vol);
   Int_t nchecks = 0;
   TGeoNode *node;
   UInt_t id;
   if (!is_assembly) {      
      while ((node=next1())) {
         if (node->IsOverlapping()) {
            next1.Skip();
            continue;
         }   
         if (!node->GetVolume()->IsAssembly()) {
            nchecks++;
            next1.Skip();
         }
      }            
   }
   // now check if the daughters overlap with each other
   if (nd<2) return nchecks;
   TGeoVoxelFinder *vox = vol->GetVoxels();
   if (!vox) return nchecks;


   TGeoNode *node1, *node01, *node02;
   Int_t novlp;
   Int_t *ovlps;
   Int_t ko;
   UInt_t io;
   for (id=0; id<nd; id++) {  
      node01 = vol->GetNode(id);
      if (node01->IsOverlapping()) continue;
      vox->FindOverlaps(id);
      ovlps = node01->GetOverlaps(novlp);
      if (!ovlps) continue;
      for (ko=0; ko<novlp; ko++) { // loop all possible overlapping candidates
         io = ovlps[ko];           // (node1, shaped, matrix1, points, fBuff1)
         if (io<=id) continue;
         node02 = vol->GetNode(io);
         if (node02->IsOverlapping()) continue;        
        
         // We have to check node against node1, but they may be assemblies
         if (node01->GetVolume()->IsAssembly()) {
            next1.Reset(node01->GetVolume());
            while ((node=next1())) {
               if (!node->GetVolume()->IsAssembly()) {
                  if (node02->GetVolume()->IsAssembly()) {
                     next2.Reset(node02->GetVolume());
                     while ((node1=next2())) {
                        if (!node1->GetVolume()->IsAssembly()) {
                           nchecks++;
                           next2.Skip();
                        }
                     }
                  } else {
                     nchecks++;
                  }
                  next1.Skip();
               }
            }
         } else {
            // node not assembly         
            if (node02->GetVolume()->IsAssembly()) { 
               next2.Reset(node02->GetVolume());
               while ((node1=next2())) {
                  if (!node1->GetVolume()->IsAssembly()) {
                     nchecks++;
                     next2.Skip();
                  }
               }
            } else {
               // node1 also not assembly
               nchecks++;
            }
         }                         
      }                
      node01->SetOverlaps(0,0);
   }   
   return nchecks;
}      

//______________________________________________________________________________
void TGeoChecker::CheckOverlaps(const TGeoVolume *vol, Double_t ovlp, Option_t *option)
{
// Check illegal overlaps for volume VOL within a limit OVLP.
   if (vol->GetFinder()) return;
   UInt_t nd = vol->GetNdaughters();
   if (!nd) return;
   TGeoShape::SetTransform(gGeoIdentity);
   fNchecks = NChecksPerVolume((TGeoVolume*)vol);
   Bool_t sampling = kFALSE;
   TString opt(option);
   opt.ToLower();
   if (opt.Contains("s")) sampling = kTRUE;
   if (opt.Contains("f")) fFullCheck = kTRUE;
   else                   fFullCheck = kFALSE;
   if (sampling) {
      opt = opt.Strip(TString::kLeading, 's');
      Int_t npoints = atoi(opt.Data());
      if (!npoints) npoints = 1000000;
      CheckOverlapsBySampling((TGeoVolume*)vol, ovlp, npoints);
      return;
   }   
   Bool_t is_assembly = vol->IsAssembly();
   TGeoIterator next1((TGeoVolume*)vol);
   TGeoIterator next2((TGeoVolume*)vol);
   TString path;
   // first, test if daughters extrude their container
   TGeoNode * node, *nodecheck;
   TGeoChecker *checker = (TGeoChecker*)this;

   TGeoOverlap *nodeovlp = 0;
   UInt_t id;
   Int_t level;
// Check extrusion only for daughters of a non-assembly volume
   if (!is_assembly) {      
      while ((node=next1())) {
         if (node->IsOverlapping()) {
            next1.Skip();
            continue;
         }   
         if (!node->GetVolume()->IsAssembly()) {
            if (fSelectedNode) {
            // We have to check only overlaps of the selected node (or real daughters if an assembly)
               if ((fSelectedNode != node) && (!fSelectedNode->GetVolume()->IsAssembly())) {
                  next1.Skip();
                  continue;
               }
               if (node != fSelectedNode) {   
                  level = next1.GetLevel();
                  while ((nodecheck=next1.GetNode(level--))) {
                     if (nodecheck == fSelectedNode) break;
                  }
                  if (!nodecheck) {   
                     next1.Skip();
                     continue;
                  }   
               }   
            }
            next1.GetPath(path);
            nodeovlp = checker->MakeCheckOverlap(Form("%s extruded by: %s", vol->GetName(),path.Data()),
                                 (TGeoVolume*)vol,node->GetVolume(),gGeoIdentity,(TGeoMatrix*)next1.GetCurrentMatrix(),kFALSE,ovlp);
            next1.Skip();
         }
      }            
   }

   // now check if the daughters overlap with each other
   if (nd<2) return;
   TGeoVoxelFinder *vox = vol->GetVoxels();
   if (!vox) {
      Warning("CheckOverlaps", "Volume %s with %i daughters but not voxelized", vol->GetName(),nd);
      return;
   } 
   if (vox->NeedRebuild()) {
      vox->Voxelize();
      vol->FindOverlaps();
   }     
   TGeoNode *node1, *node01, *node02;
   TGeoHMatrix hmat1, hmat2;
   TString path1;
   Int_t novlp;
   Int_t *ovlps;
   Int_t ko;
   UInt_t io;
   for (id=0; id<nd; id++) {  
      node01 = vol->GetNode(id);
      if (node01->IsOverlapping()) continue;
      vox->FindOverlaps(id);
      ovlps = node01->GetOverlaps(novlp);
      if (!ovlps) continue;
      next1.SetTopName(node01->GetName());
      path = node01->GetName();
      for (ko=0; ko<novlp; ko++) { // loop all possible overlapping candidates
         io = ovlps[ko];           // (node1, shaped, matrix1, points, fBuff1)
         if (io<=id) continue;
         node02 = vol->GetNode(io);
         if (node02->IsOverlapping()) continue;        
         // Try to fasten-up things...
//         if (!TGeoBBox::AreOverlapping((TGeoBBox*)node01->GetVolume()->GetShape(), node01->GetMatrix(),
//                                       (TGeoBBox*)node02->GetVolume()->GetShape(), node02->GetMatrix())) continue;
         next2.SetTopName(node02->GetName());
         path1 = node02->GetName();
        
         // We have to check node against node1, but they may be assemblies
         if (node01->GetVolume()->IsAssembly()) {
            next1.Reset(node01->GetVolume());
            while ((node=next1())) {
               if (!node->GetVolume()->IsAssembly()) {
                  next1.GetPath(path);
                  hmat1 = node01->GetMatrix();
                  hmat1 *= *next1.GetCurrentMatrix();
                  if (node02->GetVolume()->IsAssembly()) {
                     next2.Reset(node02->GetVolume());
                     while ((node1=next2())) {
                        if (!node1->GetVolume()->IsAssembly()) {
                           if (fSelectedNode) {
                           // We have to check only overlaps of the selected node (or real daughters if an assembly)
                              if ((fSelectedNode != node) && (fSelectedNode != node1) && (!fSelectedNode->GetVolume()->IsAssembly())) {
                                 next2.Skip();
                                 continue;
                              }   
                              if ((fSelectedNode != node1) && (fSelectedNode != node)) {
                                 level = next2.GetLevel();
                                 while ((nodecheck=next2.GetNode(level--))) {
                                    if (nodecheck == fSelectedNode) break;
                                 }
                                 if (node02 == fSelectedNode) nodecheck = node02;
                                 if (!nodecheck) {   
                                    level = next1.GetLevel();
                                    while ((nodecheck=next1.GetNode(level--))) {
                                       if (nodecheck == fSelectedNode) break;
                                    }   
                                 }
                                 if (node01 == fSelectedNode) nodecheck = node01;
                                 if (!nodecheck) {   
                                    next2.Skip();
                                    continue;
                                 }   
                              }   
                           }
                           next2.GetPath(path1);
                           hmat2 = node02->GetMatrix();
                           hmat2 *= *next2.GetCurrentMatrix();
                           nodeovlp = checker->MakeCheckOverlap(Form("%s/%s overlapping %s/%s", vol->GetName(),path.Data(),vol->GetName(),path1.Data()),
                                              node->GetVolume(),node1->GetVolume(),&hmat1,&hmat2,kTRUE,ovlp);  
                           next2.Skip();
                        }
                     }
                  } else {
                     if (fSelectedNode) {
                     // We have to check only overlaps of the selected node (or real daughters if an assembly)
                        if ((fSelectedNode != node) && (fSelectedNode != node02) && (!fSelectedNode->GetVolume()->IsAssembly())) {
                           next1.Skip();
                           continue;
                        }   
                        if ((fSelectedNode != node) && (fSelectedNode != node02)) {
                           level = next1.GetLevel();
                           while ((nodecheck=next1.GetNode(level--))) {
                              if (nodecheck == fSelectedNode) break;
                           }
                           if (node01 == fSelectedNode) nodecheck = node01;
                           if (!nodecheck) {   
                              next1.Skip();
                              continue;
                           }   
                        }   
                     }
                     nodeovlp = checker->MakeCheckOverlap(Form("%s/%s overlapping %s/%s", vol->GetName(),path.Data(),vol->GetName(),path1.Data()),
                                        node->GetVolume(),node02->GetVolume(),&hmat1,node02->GetMatrix(),kTRUE,ovlp);  
                  }
                  next1.Skip();
               }
            }
         } else {
            // node not assembly         
            if (node02->GetVolume()->IsAssembly()) { 
               next2.Reset(node02->GetVolume());
               while ((node1=next2())) {
                  if (!node1->GetVolume()->IsAssembly()) {
                     if (fSelectedNode) {
                     // We have to check only overlaps of the selected node (or real daughters if an assembly)
                        if ((fSelectedNode != node1) && (fSelectedNode != node01) && (!fSelectedNode->GetVolume()->IsAssembly())) {
                           next2.Skip();
                           continue;
                        }   
                        if ((fSelectedNode != node1) && (fSelectedNode != node01)) {
                           level = next2.GetLevel();
                           while ((nodecheck=next2.GetNode(level--))) {
                              if (nodecheck == fSelectedNode) break;
                           }
                           if (node02 == fSelectedNode) nodecheck = node02;
                           if (!nodecheck) {   
                              next2.Skip();
                              continue;
                           }   
                        }   
                     }
                     next2.GetPath(path1);
                     hmat2 = node02->GetMatrix();
                     hmat2 *= *next2.GetCurrentMatrix();
                     nodeovlp = checker->MakeCheckOverlap(Form("%s/%s overlapping %s/%s", vol->GetName(),path.Data(),vol->GetName(),path1.Data()),
                                        node01->GetVolume(),node1->GetVolume(),node01->GetMatrix(),&hmat2,kTRUE,ovlp);  
                     next2.Skip();
                  }
               }
            } else {
               // node1 also not assembly
               if (fSelectedNode && (fSelectedNode != node01) && (fSelectedNode != node02)) continue;
               nodeovlp = checker->MakeCheckOverlap(Form("%s/%s overlapping %s/%s", vol->GetName(),path.Data(),vol->GetName(),path1.Data()),
                                  node01->GetVolume(),node02->GetVolume(),node01->GetMatrix(),node02->GetMatrix(),kTRUE,ovlp);  
            }
         }                         
      }                
      node01->SetOverlaps(0,0);
   }
}

//______________________________________________________________________________
void TGeoChecker::PrintOverlaps() const
{
// Print the current list of overlaps held by the manager class.
   TIter next(fGeoManager->GetListOfOverlaps());
   TGeoOverlap *ov;
   printf("=== Overlaps for %s ===\n", fGeoManager->GetName());
   while ((ov=(TGeoOverlap*)next())) ov->PrintInfo();
}

//______________________________________________________________________________
void TGeoChecker::CheckPoint(Double_t x, Double_t y, Double_t z, Option_t *)
{
//--- Draw point (x,y,z) over the picture of the daughers of the volume containing this point.
//   Generates a report regarding the path to the node containing this point and the distance to
//   the closest boundary.

   Double_t point[3];
   Double_t local[3];
   point[0] = x;
   point[1] = y;
   point[2] = z;
   TGeoVolume *vol = fGeoManager->GetTopVolume();
   if (fVsafe) {
      TGeoNode *old = fVsafe->GetNode("SAFETY_1");
      if (old) fVsafe->GetNodes()->RemoveAt(vol->GetNdaughters()-1);
   }   
//   if (vol != fGeoManager->GetMasterVolume()) fGeoManager->RestoreMasterVolume();
   TGeoNode *node = fGeoManager->FindNode(point[0], point[1], point[2]);
   fGeoManager->MasterToLocal(point, local);
   // get current node
   printf("===  Check current point : (%g, %g, %g) ===\n", point[0], point[1], point[2]);
   printf("  - path : %s\n", fGeoManager->GetPath());
   // get corresponding volume
   if (node) vol = node->GetVolume();
   // compute safety distance (distance to boundary ignored)
   Double_t close = fGeoManager->Safety();
   printf("Safety radius : %f\n", close);
   if (close>1E-4) {
      TGeoVolume *sph = fGeoManager->MakeSphere("SAFETY", vol->GetMedium(), 0, close, 0,180,0,360);
      sph->SetLineColor(2);
      sph->SetLineStyle(3);
      vol->AddNode(sph,1,new TGeoTranslation(local[0], local[1], local[2]));
      fVsafe = vol;
   }
   TPolyMarker3D *pm = new TPolyMarker3D();
   pm->SetMarkerColor(2);
   pm->SetMarkerStyle(8);
   pm->SetMarkerSize(0.5);
   pm->SetNextPoint(local[0], local[1], local[2]);
   if (vol->GetNdaughters()<2) fGeoManager->SetTopVisible();
   else fGeoManager->SetTopVisible(kFALSE);
   fGeoManager->SetVisLevel(1);
   if (!vol->IsVisible()) vol->SetVisibility(kTRUE);
   vol->Draw();
   pm->Draw("SAME");
   gPad->Modified();
   gPad->Update();
}  

//______________________________________________________________________________
TH2F *TGeoChecker::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.
   TH2F *hist = new TH2F("lego", option, nphi, phimin, phimax, ntheta, themin, themax);
   
   Double_t degrad = TMath::Pi()/180.;
   Double_t theta, phi, step, matprop, x;
   Double_t start[3];
   Double_t dir[3];
   TGeoNode *startnode, *endnode;
   Int_t i;  // loop index for phi
   Int_t j;  // loop index for theta
   Int_t ntot = ntheta * nphi;
   Int_t n10 = ntot/10;
   Int_t igen = 0, iloop=0;
   printf("=== Lego plot sph. => nrays=%i\n", ntot);
   for (i=1; i<=nphi; i++) {
      for (j=1; j<=ntheta; j++) {
         igen++;
         if (n10) {
            if ((igen%n10) == 0) printf("%i percent\n", Int_t(100*igen/ntot));
         }  
         x = 0;
         theta = hist->GetYaxis()->GetBinCenter(j);
         phi   = hist->GetXaxis()->GetBinCenter(i)+1E-3;
         start[0] = start[1] = start[2] = 1E-3;
         dir[0]=TMath::Sin(theta*degrad)*TMath::Cos(phi*degrad);
         dir[1]=TMath::Sin(theta*degrad)*TMath::Sin(phi*degrad);
         dir[2]=TMath::Cos(theta*degrad);
         fGeoManager->InitTrack(&start[0], &dir[0]);
         startnode = fGeoManager->GetCurrentNode();
         if (fGeoManager->IsOutside()) startnode=0;
         if (startnode) {
            matprop = startnode->GetVolume()->GetMaterial()->GetRadLen();
         } else {
            matprop = 0.;
         }      
         fGeoManager->FindNextBoundary();
//         fGeoManager->IsStepEntering();
         // find where we end-up
         endnode = fGeoManager->Step();
         step = fGeoManager->GetStep();
         while (step<1E10) {
            // now see if we can make an other step
            iloop=0;
            while (!fGeoManager->IsEntering()) {
               iloop++;
               fGeoManager->SetStep(1E-3);
               step += 1E-3;
               endnode = fGeoManager->Step();
            }
            if (iloop>1000) printf("%i steps\n", iloop);   
            if (matprop>0) {
               x += step/matprop;
            }   
            if (endnode==0 && step>1E10) break;
            // generate an extra step to cross boundary
            startnode = endnode;    
            if (startnode) {
               matprop = startnode->GetVolume()->GetMaterial()->GetRadLen();
            } else {
               matprop = 0.;
            }      
            
            fGeoManager->FindNextBoundary();
            endnode = fGeoManager->Step();
            step = fGeoManager->GetStep();
         }
         hist->Fill(phi, theta, x); 
      }
   }
   return hist;           
}

//______________________________________________________________________________
void TGeoChecker::RandomPoints(TGeoVolume *vol, Int_t npoints, Option_t *option)
{
// Draw random points in the bounding box of a volume.
   if (!vol) return;
   gRandom = new TRandom3();
   vol->VisibleDaughters(kTRUE);
   vol->Draw();
   TString opt = option;
   opt.ToLower();
   TObjArray *pm = new TObjArray(128);
   TPolyMarker3D *marker = 0;
   const TGeoShape *shape = vol->GetShape();
   TGeoBBox *box = (TGeoBBox *)shape;
   Double_t dx = box->GetDX();
   Double_t dy = box->GetDY();
   Double_t dz = box->GetDZ();
   Double_t ox = (box->GetOrigin())[0];
   Double_t oy = (box->GetOrigin())[1];
   Double_t oz = (box->GetOrigin())[2];
   Double_t *xyz = new Double_t[3];
   printf("Random box : %f, %f, %f\n", dx, dy, dz);
   TGeoNode *node = 0;
   printf("Start... %i points\n", npoints);
   Int_t i=0;
   Int_t igen=0;
   Int_t ic = 0;
   Int_t n10 = npoints/10;
   Double_t ratio=0;
   while (igen<npoints) {
      xyz[0] = ox-dx+2*dx*gRandom->Rndm();
      xyz[1] = oy-dy+2*dy*gRandom->Rndm();
      xyz[2] = oz-dz+2*dz*gRandom->Rndm();
      fGeoManager->SetCurrentPoint(xyz);
      igen++;
      if (n10) {
         if ((igen%n10) == 0) printf("%i percent\n", Int_t(100*igen/npoints));
      }  
      node = fGeoManager->FindNode();
      if (!node) continue;
      if (!node->IsOnScreen()) continue;
      // draw only points in overlapping/non-overlapping volumes
      if (opt.Contains("many") && !node->IsOverlapping()) continue;
      if (opt.Contains("only") && node->IsOverlapping()) continue;
      ic = node->GetColour();
      if ((ic<0) || (ic>=128)) ic = 1;
      marker = (TPolyMarker3D*)pm->At(ic);
      if (!marker) {
         marker = new TPolyMarker3D();
         marker->SetMarkerColor(ic);
//         marker->SetMarkerStyle(8);
//         marker->SetMarkerSize(0.4);
         pm->AddAt(marker, ic);
      }
      marker->SetNextPoint(xyz[0], xyz[1], xyz[2]);
      i++;
   }
   printf("Number of visible points : %i\n", i);
   ratio = (Double_t)i/(Double_t)igen;
   printf("efficiency : %g\n", ratio);
   for (Int_t m=0; m<128; m++) {
      marker = (TPolyMarker3D*)pm->At(m);
      if (marker) marker->Draw("SAME");
   }
   fGeoManager->GetTopVolume()->VisibleDaughters(kFALSE);
   printf("---Daughters of %s made invisible.\n", fGeoManager->GetTopVolume()->GetName());
   printf("---Make them visible with : gGeoManager->GetTopVolume()->VisibleDaughters();\n");
   delete pm;
   delete [] xyz;
}   

//______________________________________________________________________________
void TGeoChecker::RandomRays(Int_t nrays, Double_t startx, Double_t starty, Double_t startz)
{
// Randomly shoot nrays from point (startx,starty,startz) and plot intersections 
// with surfaces for current top node.
   TObjArray *pm = new TObjArray(128);
   TPolyLine3D *line = 0;
   gRandom = new TRandom3();
   TGeoVolume *vol=fGeoManager->GetTopVolume();
   vol->VisibleDaughters(kTRUE);

   Double_t start[3];
   Double_t dir[3];
   Int_t istep= 0;
   const Double_t *point = fGeoManager->GetCurrentPoint();
   vol->Draw();
   printf("Start... %i rays\n", nrays);
   TGeoNode *startnode, *endnode;
   Bool_t vis1,vis2;
   Int_t i=0;
   Int_t ipoint;
   Int_t itot=0;
   Int_t n10=nrays/10;
   Double_t theta,phi, step;
   while (itot<nrays) {
      itot++;
      ipoint = 0;
      if (n10) {
         if ((itot%n10) == 0) printf("%i percent\n", Int_t(100*itot/nrays));
      }
      start[0] = startx;
      start[1] = starty;
      start[2] = startz;
      phi = 2*TMath::Pi()*gRandom->Rndm();
      theta= TMath::ACos(1.-2.*gRandom->Rndm());
      dir[0]=TMath::Sin(theta)*TMath::Cos(phi);
      dir[1]=TMath::Sin(theta)*TMath::Sin(phi);
      dir[2]=TMath::Cos(theta);
      startnode = fGeoManager->InitTrack(start[0],start[1],start[2], dir[0],dir[1],dir[2]);
      line = 0;
      if (fGeoManager->IsOutside()) startnode=0;
      vis1 = (startnode)?(startnode->IsOnScreen()):kFALSE;
      if (vis1) {
         line = new TPolyLine3D(2);
         line->SetLineColor(startnode->GetVolume()->GetLineColor());
         line->SetPoint(ipoint++, startx, starty, startz);
         i++;
         pm->Add(line);
      }
      // find where we end-up
      fGeoManager->FindNextBoundary();
      step = fGeoManager->GetStep();
      endnode = fGeoManager->Step();
      vis2 = (endnode)?(endnode->IsOnScreen()):kFALSE;
      while (step<1E10) {
         istep = 0;
         while (!fGeoManager->IsEntering()) {
            istep++;
            if (istep>1E4) break;
            fGeoManager->SetStep(1E-3);
            endnode = fGeoManager->Step();
            step += 1E-3;
         }      
         if (istep>1E4) break;
//         if (istep) printf("ADDED : %f (%i steps)\n", istep*1E-3, istep);
         vis2 = (endnode)?(endnode->IsOnScreen()):kFALSE;
         if (ipoint>0) {
         // old visible node had an entry point -> finish segment
            line->SetPoint(ipoint, point[0], point[1], point[2]);
            ipoint = 0;
            line   = 0;
         }
         if (vis2) {
            // create new segment
            line = new TPolyLine3D(2);   
            line->SetLineColor(endnode->GetVolume()->GetLineColor());
            line->SetPoint(ipoint++, point[0], point[1], point[2]);
            i++;
            pm->Add(line);
         } 
         // now see if we can make an other step
         if (endnode==0 && step>1E10) break;
         // generate an extra step to cross boundary
         startnode = endnode;    
         fGeoManager->FindNextBoundary();
         step = fGeoManager->GetStep();
         endnode = fGeoManager->Step();
      }      
   }   
   // draw all segments
   for (Int_t m=0; m<pm->GetEntriesFast(); m++) {
      line = (TPolyLine3D*)pm->At(m);
      if (line) line->Draw("SAME");
   }
   printf("number of segments : %i\n", i);
   fGeoManager->GetTopVolume()->VisibleDaughters(kFALSE);
   printf("---Daughters of %s made invisible.\n", fGeoManager->GetTopVolume()->GetName());
   printf("---Make them visible with : gGeoManager->GetTopVolume()->VisibleDaughters();\n");
   delete pm;
}

//______________________________________________________________________________
TGeoNode *TGeoChecker::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
   // make sure that path to current node is updated
   // get the response of tgeo
   TGeoNode *node = fGeoManager->FindNode();
   TGeoNode *nodegeo = 0;
   TGeoNode *nodeg3 = 0;
   TGeoNode *solg3 = 0;
   if (!node) {dist=-1; return 0;}
   gRandom = new TRandom3();
   Bool_t hasg3 = kFALSE;
   if (strlen(g3path)) hasg3 = kTRUE;
   char geopath[200];
   sprintf(geopath, "%s\n", fGeoManager->GetPath());
   dist = 1E10;
   TString common = "";
   // cd to common path
   Double_t point[3];
   Double_t closest[3];
   TGeoNode *node1 = 0;
   TGeoNode *node_close = 0;
   dist = 1E10;
   Double_t dist1 = 0;
   // initialize size of random box to epsil
   Double_t eps[3];
   eps[0] = epsil; eps[1]=epsil; eps[2]=epsil;
   const Double_t *pointg = fGeoManager->GetCurrentPoint();
   if (hasg3) {
      TString spath = geopath;
      TString name = "";
      Int_t index=0;
      while (index>=0) {
         index = spath.Index("/", index+1);
         if (index>0) {
            name = spath(0, index);
            if (strstr(g3path, name.Data())) {
               common = name;
               continue;
            } else break;
         }
      }
      // if g3 response was given, cd to common path
      if (strlen(common.Data())) {
         while (strcmp(fGeoManager->GetPath(), common.Data()) && fGeoManager->GetLevel()) {
            nodegeo = fGeoManager->GetCurrentNode();
            fGeoManager->CdUp();
         }
         fGeoManager->cd(g3path);
         solg3 = fGeoManager->GetCurrentNode();
         while (strcmp(fGeoManager->GetPath(), common.Data()) && fGeoManager->GetLevel()) {
            nodeg3 = fGeoManager->GetCurrentNode();
            fGeoManager->CdUp();
         }
         if (!nodegeo) return 0;
         if (!nodeg3) return 0;
         fGeoManager->cd(common.Data());
         fGeoManager->MasterToLocal(fGeoManager->GetCurrentPoint(), &point[0]);
         Double_t xyz[3], local[3];
         for (Int_t i=0; i<npoints; i++) {
            xyz[0] = point[0] - eps[0] + 2*eps[0]*gRandom->Rndm();
            xyz[1] = point[1] - eps[1] + 2*eps[1]*gRandom->Rndm();
            xyz[2] = point[2] - eps[2] + 2*eps[2]*gRandom->Rndm();
            nodeg3->MasterToLocal(&xyz[0], &local[0]);
            if (!nodeg3->GetVolume()->Contains(&local[0])) continue;
            dist1 = TMath::Sqrt((xyz[0]-point[0])*(xyz[0]-point[0])+
                   (xyz[1]-point[1])*(xyz[1]-point[1])+(xyz[2]-point[2])*(xyz[2]-point[2]));
            if (dist1<dist) {
            // save node and closest point
               dist = dist1;
               node_close = solg3;
               // make the random box smaller
               eps[0] = TMath::Abs(point[0]-pointg[0]);
               eps[1] = TMath::Abs(point[1]-pointg[1]);
               eps[2] = TMath::Abs(point[2]-pointg[2]);
            }
         }
      }
      if (!node_close) dist = -1;
      return node_close;
   }

//   gRandom = new TRandom3();
   // save current point
   memcpy(&point[0], pointg, 3*sizeof(Double_t));
   for (Int_t i=0; i<npoints; i++) {
      // generate a random point in MARS
      fGeoManager->SetCurrentPoint(point[0] - eps[0] + 2*eps[0]*gRandom->Rndm(),
                                   point[1] - eps[1] + 2*eps[1]*gRandom->Rndm(),
                                   point[2] - eps[2] + 2*eps[2]*gRandom->Rndm());
      // check if new node is different from the old one
      if (node1!=node) {
         dist1 = TMath::Sqrt((point[0]-pointg[0])*(point[0]-pointg[0])+
                 (point[1]-pointg[1])*(point[1]-pointg[1])+(point[2]-pointg[2])*(point[2]-pointg[2]));
         if (dist1<dist) {
            dist = dist1;
            node_close = node1;
            memcpy(&closest[0], pointg, 3*sizeof(Double_t));
            // make the random box smaller
            eps[0] = TMath::Abs(point[0]-pointg[0]);
            eps[1] = TMath::Abs(point[1]-pointg[1]);
            eps[2] = TMath::Abs(point[2]-pointg[2]);
         }
      }
   }
   // restore the original point and path
   fGeoManager->FindNode(point[0], point[1], point[2]);  // really needed ?
   if (!node_close) dist=-1;
   return node_close;
}

//______________________________________________________________________________
void TGeoChecker::ShootRay(Double_t *start, Double_t dirx, Double_t diry, Double_t dirz, Double_t *array, Int_t &nelem, Int_t &dim, Double_t *endpoint) const
{
// Shoot one ray from start point with direction (dirx,diry,dirz). Fills input array
// with points just after boundary crossings.
//   Int_t array_dimension = 3*dim;
   nelem = 0;
   Int_t istep = 0;
   if (!dim) {
      printf("empty input array\n");
      return;
   }   
//   fGeoManager->CdTop();
   const Double_t *point = fGeoManager->GetCurrentPoint();
   TGeoNode *endnode;
   Bool_t is_entering;
   Double_t step, forward;
   Double_t dir[3];
   dir[0] = dirx;
   dir[1] = diry;
   dir[2] = dirz;
   fGeoManager->InitTrack(start, &dir[0]);
   fGeoManager->GetCurrentNode();
//   printf("Start : (%f,%f,%f)\n", point[0], point[1], point[2]);
   fGeoManager->FindNextBoundary();
   step = fGeoManager->GetStep();
//   printf("---next : at step=%f\n", step);
   if (step>1E10) return;
   endnode = fGeoManager->Step();
   is_entering = fGeoManager->IsEntering();
   while (step<1E10) {
      if (endpoint) {
         forward = dirx*(endpoint[0]-point[0])+diry*(endpoint[1]-point[1])+dirz*(endpoint[2]-point[2]);
         if (forward<1E-3) {
//            printf("exit : Passed start point. nelem=%i\n", nelem); 
            return;
         }
      }
      if (is_entering) {
         if (nelem>=dim) {
            Double_t *temparray = new Double_t[3*(dim+20)];
            memcpy(temparray, array, 3*dim*sizeof(Double_t));
            delete [] array;
            array = temparray;
                  dim += 20;
         }
         memcpy(&array[3*nelem], point, 3*sizeof(Double_t)); 
//         printf("%i (%f, %f, %f) step=%f\n", nelem, point[0], point[1], point[2], step);
         nelem++; 
      } else {
         if (endnode==0 && step>1E10) {
//            printf("exit : NULL endnode. nelem=%i\n", nelem); 
            return;
         }    
         if (!fGeoManager->IsEntering()) {
//            if (startnode) printf("stepping %f from (%f, %f, %f) inside %s...\n", step,point[0], point[1], point[2], startnode->GetName());
//            else printf("stepping %f from (%f, %f, %f) OUTSIDE...\n", step,point[0], point[1], point[2]);
            istep = 0;
         }    
         while (!fGeoManager->IsEntering()) {
            istep++;
            if (istep>1E3) {
//               Error("ShootRay", "more than 1000 steps. Step was %f", step);
               nelem = 0;
               return;
            }   
            fGeoManager->SetStep(1E-5);
            endnode = fGeoManager->Step();
         }
         if (istep>0) printf("%i steps\n", istep);   
         if (nelem>=dim) {
            Double_t *temparray = new Double_t[3*(dim+20)];
            memcpy(temparray, array, 3*dim*sizeof(Double_t));
            delete [] array;
            array = temparray;
                  dim += 20;
         }
         memcpy(&array[3*nelem], point, 3*sizeof(Double_t)); 
//         if (endnode) printf("%i (%f, %f, %f) step=%f\n", nelem, point[0], point[1], point[2], step);
         nelem++;   
         is_entering = kTRUE;
      }
      fGeoManager->FindNextBoundary();
      step = fGeoManager->GetStep();
//      printf("---next at step=%f\n", step);
      endnode = fGeoManager->Step();
      is_entering = fGeoManager->IsEntering();
   }
//   printf("exit : INFINITE step. nelem=%i\n", nelem);
}

//______________________________________________________________________________
void TGeoChecker::Test(Int_t npoints, Option_t *option)
{
   // Check time of finding "Where am I" for n points.
   gRandom= new TRandom3();
   Bool_t recheck = !strcmp(option, "RECHECK");
   if (recheck) printf("RECHECK\n");
   const TGeoShape *shape = fGeoManager->GetTopVolume()->GetShape();
   Double_t dx = ((TGeoBBox*)shape)->GetDX();
   Double_t dy = ((TGeoBBox*)shape)->GetDY();
   Double_t dz = ((TGeoBBox*)shape)->GetDZ();
   Double_t ox = (((TGeoBBox*)shape)->GetOrigin())[0];
   Double_t oy = (((TGeoBBox*)shape)->GetOrigin())[1];
   Double_t oz = (((TGeoBBox*)shape)->GetOrigin())[2];
   Double_t *xyz = new Double_t[3*npoints];
   TStopwatch *timer = new TStopwatch();
   printf("Random box : %f, %f, %f\n", dx, dy, dz);
   timer->Start(kFALSE);
   Int_t i;
   for (i=0; i<npoints; i++) {
      xyz[3*i] = ox-dx+2*dx*gRandom->Rndm();
      xyz[3*i+1] = oy-dy+2*dy*gRandom->Rndm();
      xyz[3*i+2] = oz-dz+2*dz*gRandom->Rndm();
   }
   timer->Stop();
   printf("Generation time :\n");
   timer->Print();
   timer->Reset();
   TGeoNode *node, *node1;
   printf("Start... %i points\n", npoints);
   timer->Start(kFALSE);
   for (i=0; i<npoints; i++) {
      fGeoManager->SetCurrentPoint(xyz+3*i);
      if (recheck) fGeoManager->CdTop();
      node = fGeoManager->FindNode();
      if (recheck) {
         node1 = fGeoManager->FindNode();
         if (node1 != node) {
            printf("Difference for x=%g y=%g z=%g\n", xyz[3*i], xyz[3*i+1], xyz[3*i+2]);
            printf(" from top : %s\n", node->GetName());
            printf(" redo     : %s\n", fGeoManager->GetPath());
         }
      }
   }
   timer->Stop();
   timer->Print();
   delete [] xyz;
   delete timer;
}

//______________________________________________________________________________
void TGeoChecker::TestOverlaps(const char* path)
{
//--- Geometry overlap checker based on sampling. 
   if (fGeoManager->GetTopVolume()!=fGeoManager->GetMasterVolume()) fGeoManager->RestoreMasterVolume();
   printf("Checking overlaps for path :\n");
   if (!fGeoManager->cd(path)) return;
   TGeoNode *checked = fGeoManager->GetCurrentNode();
   checked->InspectNode();
   // shoot 1E4 points in the shape of the current volume
   gRandom= new TRandom3();
   Int_t npoints = 1000000;
   Double_t big = 1E6;
   Double_t xmin = big;
   Double_t xmax = -big;
   Double_t ymin = big;
   Double_t ymax = -big;
   Double_t zmin = big;
   Double_t zmax = -big;
   TObjArray *pm = new TObjArray(128);
   TPolyMarker3D *marker = 0;
   TPolyMarker3D *markthis = new TPolyMarker3D();
   markthis->SetMarkerColor(5);
   TNtuple *ntpl = new TNtuple("ntpl","random points","x:y:z");
   TGeoShape *shape = fGeoManager->GetCurrentNode()->GetVolume()->GetShape();
   Double_t *point = new Double_t[3];
   Double_t dx = ((TGeoBBox*)shape)->GetDX();
   Double_t dy = ((TGeoBBox*)shape)->GetDY();
   Double_t dz = ((TGeoBBox*)shape)->GetDZ();
   Double_t ox = (((TGeoBBox*)shape)->GetOrigin())[0];
   Double_t oy = (((TGeoBBox*)shape)->GetOrigin())[1];
   Double_t oz = (((TGeoBBox*)shape)->GetOrigin())[2];
   Double_t *xyz = new Double_t[3*npoints];
   Int_t i=0;
   printf("Generating %i points inside %s\n", npoints, fGeoManager->GetPath());
   while (i<npoints) {
      point[0] = ox-dx+2*dx*gRandom->Rndm();
      point[1] = oy-dy+2*dy*gRandom->Rndm();
      point[2] = oz-dz+2*dz*gRandom->Rndm();
      if (!shape->Contains(point)) continue;
      // convert each point to MARS
//      printf("local  %9.3f %9.3f %9.3f\n", point[0], point[1], point[2]);
      fGeoManager->LocalToMaster(point, &xyz[3*i]);
//      printf("master %9.3f %9.3f %9.3f\n", xyz[3*i], xyz[3*i+1], xyz[3*i+2]);
      xmin = TMath::Min(xmin, xyz[3*i]);
      xmax = TMath::Max(xmax, xyz[3*i]);
      ymin = TMath::Min(ymin, xyz[3*i+1]);
      ymax = TMath::Max(ymax, xyz[3*i+1]);
      zmin = TMath::Min(zmin, xyz[3*i+2]);
      zmax = TMath::Max(zmax, xyz[3*i+2]);
      i++;
   }
   delete [] point;
   ntpl->Fill(xmin,ymin,zmin);
   ntpl->Fill(xmax,ymin,zmin);
   ntpl->Fill(xmin,ymax,zmin);
   ntpl->Fill(xmax,ymax,zmin);
   ntpl->Fill(xmin,ymin,zmax);
   ntpl->Fill(xmax,ymin,zmax);
   ntpl->Fill(xmin,ymax,zmax);
   ntpl->Fill(xmax,ymax,zmax);
   ntpl->Draw("z:y:x");

   // shoot the poins in the geometry
   TGeoNode *node;
   TString cpath;
   Int_t ic=0;
   TObjArray *overlaps = new TObjArray();
   printf("using FindNode...\n");
   for (Int_t j=0; j<npoints; j++) {
      // always start from top level (testing only)
      fGeoManager->CdTop();
      fGeoManager->SetCurrentPoint(&xyz[3*j]);
      node = fGeoManager->FindNode();
      cpath = fGeoManager->GetPath();
      if (cpath.Contains(path)) {
         markthis->SetNextPoint(xyz[3*j], xyz[3*j+1], xyz[3*j+2]);
         continue;
      }
      // current point is found in an overlapping node
      if (!node) ic=128;
      else ic = node->GetVolume()->GetLineColor();
      if (ic >= 128) ic = 0;
      marker = (TPolyMarker3D*)pm->At(ic);
      if (!marker) {
         marker = new TPolyMarker3D();
         marker->SetMarkerColor(ic);
         pm->AddAt(marker, ic);
      }
      // draw the overlapping point
      marker->SetNextPoint(xyz[3*j], xyz[3*j+1], xyz[3*j+2]);
      if (node) {
         if (overlaps->IndexOf(node) < 0) overlaps->Add(node);
      }
   }
   // draw all overlapping points
   for (Int_t m=0; m<128; m++) {
      marker = (TPolyMarker3D*)pm->At(m);
//      if (marker) marker->Draw("SAME");
   }
   markthis->Draw("SAME");
   if (gPad) gPad->Update();
   // display overlaps
   if (overlaps->GetEntriesFast()) {
      printf("list of overlapping nodes :\n");
      for (i=0; i<overlaps->GetEntriesFast(); i++) {
         node = (TGeoNode*)overlaps->At(i);
         if (node->IsOverlapping()) printf("%s  MANY\n", node->GetName());
         else printf("%s  ONLY\n", node->GetName());
      }
   } else printf("No overlaps\n");
   delete ntpl;
   delete pm;
   delete [] xyz;
   delete overlaps;
}

//______________________________________________________________________________
Double_t TGeoChecker::Weight(Double_t precision, Option_t *option)
{
// Estimate weight of top level volume with a precision SIGMA(W)/W
// better than PRECISION. Option can be "v" - verbose (default).
   TList *matlist = fGeoManager->GetListOfMaterials();
   Int_t nmat = matlist->GetSize();
   if (!nmat) return 0;
   Int_t *nin = new Int_t[nmat];
   memset(nin, 0, nmat*sizeof(Int_t));
   gRandom = new TRandom3();
   TString opt = option;
   opt.ToLower();
   Bool_t isverbose = opt.Contains("v");
   TGeoBBox *box = (TGeoBBox *)fGeoManager->GetTopVolume()->GetShape();
   Double_t dx = box->GetDX();
   Double_t dy = box->GetDY();
   Double_t dz = box->GetDZ();
   Double_t ox = (box->GetOrigin())[0];
   Double_t oy = (box->GetOrigin())[1];
   Double_t oz = (box->GetOrigin())[2];
   Double_t x,y,z;
   TGeoNode *node;
   TGeoMaterial *mat;
   Double_t vbox = 0.000008*dx*dy*dz; // m3
   Bool_t end = kFALSE;
   Double_t weight=0, sigma, eps, dens;
   Double_t eps0=1.;
   Int_t indmat;
   Int_t igen=0;
   Int_t iin = 0;
   while (!end) {
      x = ox-dx+2*dx*gRandom->Rndm();
      y = oy-dy+2*dy*gRandom->Rndm();
      z = oz-dz+2*dz*gRandom->Rndm();
      node = fGeoManager->FindNode(x,y,z);
      igen++;
      if (!node) continue;
      mat = node->GetVolume()->GetMedium()->GetMaterial();
      indmat = mat->GetIndex();
      if (indmat<0) continue;
      nin[indmat]++;
      iin++;
      if ((iin%100000)==0 || igen>1E8) {
         weight = 0;
         sigma = 0;
         for (indmat=0; indmat<nmat; indmat++) {
            mat = (TGeoMaterial*)matlist->At(indmat);
            dens = mat->GetDensity(); //  [g/cm3]
            if (dens<1E-2) dens=0;
            dens *= 1000.;            // [kg/m3]
            weight += dens*Double_t(nin[indmat]);
            sigma  += dens*dens*nin[indmat];
         }
               sigma = TMath::Sqrt(sigma);
               eps = sigma/weight;
               weight *= vbox/Double_t(igen);
               sigma *= vbox/Double_t(igen);
               if (eps<precision || igen>1E8) {
                  if (isverbose) {
                     printf("=== Weight of %s : %g +/- %g [kg]\n", 
                            fGeoManager->GetTopVolume()->GetName(), weight, sigma);
                  }
                  end = kTRUE;                      
               } else {
                  if (isverbose && eps<0.5*eps0) {
                     printf("%8dK: %14.7g kg  %g %%\n", 
                       igen/1000, weight, eps*100);
               eps0 = eps;
            } 
         }
      }
   }      
   delete [] nin;
   return weight;
}
//______________________________________________________________________________
Double_t TGeoChecker::CheckVoxels(TGeoVolume *vol, TGeoVoxelFinder *voxels, Double_t *xyz, Int_t npoints)
{
// count voxel timing
   TStopwatch timer;
   Double_t time;
   TGeoShape *shape = vol->GetShape();
   TGeoNode *node;
   TGeoMatrix *matrix;
   Double_t *point;
   Double_t local[3];
   Int_t *checklist;
   Int_t ncheck;

   timer.Start();
   for (Int_t i=0; i<npoints; i++) {
      point = xyz + 3*i;
      if (!shape->Contains(point)) continue;
      checklist = voxels->GetCheckList(point, ncheck);
      if (!checklist) continue;
      if (!ncheck) continue;
      for (Int_t id=0; id<ncheck; id++) {
         node = vol->GetNode(checklist[id]);
         matrix = node->GetMatrix();
         matrix->MasterToLocal(point, &local[0]);
         if (node->GetVolume()->GetShape()->Contains(&local[0])) break;
      }   
   }
   time = timer.CpuTime();
   return time;
}   

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