ROOT logo
// @(#)root/geom:$Id: TGeoPatternFinder.cxx 25779 2008-10-10 12:33:44Z brun $
// Author: Andrei Gheata   30/10/01

//_____________________________________________________________________________
// TGeoPatternFinder - base finder class for patterns. 
//==================
//   A pattern is specifying a division type which applies only to a given
// shape type. The implemented patterns are for the moment equidistant slices
// on different axis. Implemented patterns are:
//
// TGeoPatternX - a X axis divison pattern
// TGeoPatternY - a Y axis divison pattern
// TGeoPatternZ - a Z axis divison pattern
// TGeoPatternParaX - a X axis divison pattern for PARA shape
// TGeoPatternParaY - a Y axis divison pattern for PARA shape
// TGeoPatternParaZ - a Z axis divison pattern for PARA shape
// TGeoPatternTrapZ - a Z axis divison pattern for TRAP or GTRA shapes
// TGeoPatternCylR - a cylindrical R divison pattern
// TGeoPatternCylPhi - a cylindrical phi divison pattern
// TGeoPatternSphR - a spherical R divison pattern
// TGeoPatternSphTheta - a spherical theta divison pattern
// TGeoPatternSphPhi - a spherical phi divison pattern
// TGeoPatternHoneycomb - a divison pattern specialized for honeycombs
//_____________________________________________________________________________

#include "Riostream.h"
#include "TObject.h"
#include "TGeoMatrix.h"
#include "TGeoPara.h"
#include "TGeoArb8.h"
#include "TGeoNode.h"
#include "TGeoManager.h"
#include "TMath.h"

#include "TGeoPatternFinder.h"

ClassImp(TGeoPatternFinder)
ClassImp(TGeoPatternX)
ClassImp(TGeoPatternY)
ClassImp(TGeoPatternZ)
ClassImp(TGeoPatternParaX)
ClassImp(TGeoPatternParaY)
ClassImp(TGeoPatternParaZ)
ClassImp(TGeoPatternTrapZ)
ClassImp(TGeoPatternCylR)
ClassImp(TGeoPatternCylPhi)
ClassImp(TGeoPatternSphR)
ClassImp(TGeoPatternSphTheta)
ClassImp(TGeoPatternSphPhi)
ClassImp(TGeoPatternHoneycomb)
   

//_____________________________________________________________________________
TGeoPatternFinder::TGeoPatternFinder()
{
// Default constructor
   fMatrix     = 0;
   fCurrent    = -1;
   fNdivisions = 0;
   fDivIndex   = 0;
   fStep       = 0;
   fStart      = 0;
   fEnd        = 0;
   fVolume     = 0;
   fNextIndex = -1;
}

//_____________________________________________________________________________
TGeoPatternFinder::TGeoPatternFinder(TGeoVolume *vol, Int_t ndiv)
{
// Default constructor
   fVolume     = vol;
   fMatrix     = 0;
   fCurrent    = -1;
   fNdivisions = ndiv;
   fDivIndex   = 0;
   fStep       = 0;
   fStart      = 0;
   fEnd        = 0;
   fNextIndex = -1;
}

//_____________________________________________________________________________
TGeoPatternFinder::TGeoPatternFinder(const TGeoPatternFinder& pf) :
  TObject(pf),
  fStep(pf.fStep),
  fStart(pf.fStart),
  fEnd(pf.fEnd),
  fCurrent(pf.fCurrent),
  fNdivisions(pf.fNdivisions),
  fDivIndex(pf.fDivIndex),
  fMatrix(pf.fMatrix),
  fVolume(pf.fVolume)
{ 
   //copy constructor
}

//_____________________________________________________________________________
TGeoPatternFinder& TGeoPatternFinder::operator=(const TGeoPatternFinder& pf)
{
   //assignment operator
   if(this!=&pf) {
      TObject::operator=(pf);
      fStep=pf.fStep;
      fStart=pf.fStart;
      fEnd=pf.fEnd;
      fCurrent=pf.fCurrent;
      fNdivisions=pf.fNdivisions;
      fDivIndex=pf.fDivIndex;
      fMatrix=pf.fMatrix;
      fVolume=pf.fVolume;
   } 
   return *this;
}

//_____________________________________________________________________________
TGeoPatternFinder::~TGeoPatternFinder()
{
// Destructor
}

//______________________________________________________________________________
TGeoNode *TGeoPatternFinder::CdNext()
{
// Make next node (if any) current.
   if (fNextIndex < 0) return NULL;
   cd(fNextIndex);
   return GetNodeOffset(fCurrent);
}   

//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternFinder::MakeCopy(Bool_t)
{
// Make a copy of this finder. Has to be overwritten by derived classes.
   return NULL;
}

//______________________________________________________________________________
// TGeoPatternX - a X axis divison pattern
//______________________________________________________________________________

//_____________________________________________________________________________
TGeoPatternX::TGeoPatternX()
{
// Default constructor
}

//_____________________________________________________________________________
TGeoPatternX::TGeoPatternX(TGeoVolume *vol, Int_t ndivisions)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   Double_t dx = ((TGeoBBox*)vol->GetShape())->GetDX();
   fStart = -dx;
   fEnd = dx;
   fStep = 2*dx/ndivisions;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}

//_____________________________________________________________________________
TGeoPatternX::TGeoPatternX(TGeoVolume *vol, Int_t ndivisions, Double_t step)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   Double_t dx = ((TGeoBBox*)vol->GetShape())->GetDX();
   fStart = -dx;
   fEnd = fStart + ndivisions*step;
   fStep       = step;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}

//_____________________________________________________________________________
TGeoPatternX::TGeoPatternX(TGeoVolume *vol, Int_t ndivisions, Double_t start, Double_t end)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fStart      = start;
   fEnd        = end;
   fStep       = (end - start)/ndivisions;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}

//_____________________________________________________________________________
void TGeoPatternX::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   fCurrent=idiv; 
   fMatrix->SetDx(fStart+idiv*fStep+0.5*fStep);
}

//_____________________________________________________________________________
TGeoPatternX::~TGeoPatternX()
{
// Destructor
}

//_____________________________________________________________________________
Bool_t TGeoPatternX::IsOnBoundary(const Double_t *point) const
{
// Checks if the current point is on division boundary
   Double_t seg = (point[0]-fStart)/fStep;
   Double_t diff = seg - Int_t(seg);
   if (diff>0.5) diff = 1.-diff;
   if (diff<1e-8) return kTRUE;
   return kFALSE;
}   

//_____________________________________________________________________________
TGeoNode *TGeoPatternX::FindNode(Double_t *point, const Double_t *dir)
{
// Find the cell corresponding to point and next cell along dir (if asked)
   TGeoNode *node = 0;
   Int_t ind = (Int_t)(1.+(point[0]-fStart)/fStep) - 1;
   if (dir) {
      fNextIndex = ind;
      if (dir[0]>0) fNextIndex++;
      else fNextIndex--;
      if ((fNextIndex<0) || (fNextIndex>=fNdivisions)) fNextIndex = -1;
   }   
   if ((ind<0) || (ind>=fNdivisions)) return node; 
   node = GetNodeOffset(ind);
   cd(ind);
   return node;
}

//______________________________________________________________________________
Double_t TGeoPatternX::FindNextBoundary(Double_t *point, Double_t *dir, Int_t &indnext)
{
// Compute distance to next division layer returning the index of next section.
// Point is in the frame of the divided volume.
   indnext = -1;
   Double_t dist = TGeoShape::Big();
   if (TMath::Abs(dir[0])<TGeoShape::Tolerance()) return dist;
   if (fCurrent<0) {
      Error("FindNextBoundary", "Must call FindNode first");
      return dist;
   }   
   Int_t inc = (dir[0]>0)?1:0;
   dist = (fStep*(fCurrent+inc)-point[0])/dir[0];
   if (dist<0.) Error("FindNextBoundary", "Negative distance d=%g",dist);
   if (!inc) inc = -1;
   indnext = fCurrent+inc;
   return dist;   
}   

//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternX::MakeCopy(Bool_t reflect)
{
// Make a copy of this finder. Reflect by Z if required.
   TGeoPatternX *finder = new TGeoPatternX(*this);
   if (!reflect) return finder;
   Reflect();
   TGeoCombiTrans *combi = new TGeoCombiTrans(*fMatrix);
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   combi->RegisterYourself();
   fMatrix = combi;
   return finder;
}
   
//______________________________________________________________________________
void TGeoPatternX::SavePrimitive(ostream &out, Option_t * /*option*/ /*= ""*/)
{
   // Save a primitive as a C++ statement(s) on output stream "out".
   Int_t iaxis = 1;
   out << iaxis << ", " << fNdivisions << ", " << fStart << ", " << fStep; 
}

//______________________________________________________________________________
// TGeoPatternY - a Y axis divison pattern
//______________________________________________________________________________


//_____________________________________________________________________________
TGeoPatternY::TGeoPatternY()
{
// Default constructor
}

//_____________________________________________________________________________
TGeoPatternY::TGeoPatternY(TGeoVolume *vol, Int_t ndivisions)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   Double_t dy = ((TGeoBBox*)vol->GetShape())->GetDY();
   fStart = -dy;
   fEnd = dy;
   fStep = 2*dy/ndivisions;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}

//_____________________________________________________________________________
TGeoPatternY::TGeoPatternY(TGeoVolume *vol, Int_t ndivisions, Double_t step)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   Double_t dy = ((TGeoBBox*)vol->GetShape())->GetDY();
   fStart = -dy;
   fEnd = fStart + ndivisions*step;
   fStep       = step;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}

//_____________________________________________________________________________
TGeoPatternY::TGeoPatternY(TGeoVolume *vol, Int_t ndivisions, Double_t start, Double_t end)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fStart      = start;
   fEnd        = end;
   fStep       = (end - start)/ndivisions;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}

//_____________________________________________________________________________
TGeoPatternY::~TGeoPatternY()
{
// Destructor
}

//_____________________________________________________________________________
void TGeoPatternY::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   fCurrent=idiv; 
   fMatrix->SetDy(fStart+idiv*fStep+0.5*fStep);
}

//_____________________________________________________________________________
Bool_t TGeoPatternY::IsOnBoundary(const Double_t *point) const
{
// Checks if the current point is on division boundary
   Double_t seg = (point[1]-fStart)/fStep;
   Double_t diff = seg - Int_t(seg);
   if (diff>0.5) diff = 1.-diff;
   if (diff<1e-8) return kTRUE;
   return kFALSE;
}   

//_____________________________________________________________________________
TGeoNode *TGeoPatternY::FindNode(Double_t *point, const Double_t *dir)
{
// Find the cell corresponding to point and next cell along dir (if asked)
   TGeoNode *node = 0;
   Int_t ind = (Int_t)(1.+(point[1]-fStart)/fStep) - 1;
   if (dir) {
      fNextIndex = ind;
      if (dir[1]>0) fNextIndex++;
      else fNextIndex--;
      if ((fNextIndex<0) || (fNextIndex>=fNdivisions)) fNextIndex = -1;
   }   
   if ((ind<0) || (ind>=fNdivisions)) return node; 
   node = GetNodeOffset(ind);
   cd(ind);
   return node;
}

//______________________________________________________________________________
Double_t TGeoPatternY::FindNextBoundary(Double_t *point, Double_t *dir, Int_t &indnext)
{
// Compute distance to next division layer returning the index of next section.
// Point is in the frame of the divided volume.
   indnext = -1;
   Double_t dist = TGeoShape::Big();
   if (TMath::Abs(dir[1])<TGeoShape::Tolerance()) return dist;
   if (fCurrent<0) {
      Error("FindNextBoundary", "Must call FindNode first");
      return dist;
   }   
   Int_t inc = (dir[1]>0)?1:0;
   dist = (fStep*(fCurrent+inc)-point[1])/dir[1];
   if (dist<0.) Error("FindNextBoundary", "Negative distance d=%g",dist);
   if (!inc) inc = -1;
   indnext = fCurrent+inc;
   return dist;   
}   
   
//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternY::MakeCopy(Bool_t reflect)
{
// Make a copy of this finder. Reflect by Z if required.
   TGeoPatternY *finder = new TGeoPatternY(*this);
   if (!reflect) return finder;
   Reflect();
   TGeoCombiTrans *combi = new TGeoCombiTrans(*fMatrix);
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   combi->RegisterYourself();
   fMatrix = combi;
   return finder;
}
   
//______________________________________________________________________________
void TGeoPatternY::SavePrimitive(ostream &out, Option_t * /*option*/ /*= ""*/)
{
   // Save a primitive as a C++ statement(s) on output stream "out".
   Int_t iaxis = 2;
   out << iaxis << ", " << fNdivisions << ", " << fStart << ", " << fStep;
}

//______________________________________________________________________________
// TGeoPatternZ - a Z axis divison pattern
//______________________________________________________________________________


//_____________________________________________________________________________
TGeoPatternZ::TGeoPatternZ()
{
// Default constructor
}
//_____________________________________________________________________________
TGeoPatternZ::TGeoPatternZ(TGeoVolume *vol, Int_t ndivisions)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   Double_t dz = ((TGeoBBox*)vol->GetShape())->GetDZ();
   fStart = -dz;
   fEnd = dz;
   fStep = 2*dz/ndivisions;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}
//_____________________________________________________________________________
TGeoPatternZ::TGeoPatternZ(TGeoVolume *vol, Int_t ndivisions, Double_t step)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   Double_t dz = ((TGeoBBox*)vol->GetShape())->GetDZ();
   fStart = -dz;
   fEnd = fStart + ndivisions*step;
   fStep       = step;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}
//_____________________________________________________________________________
TGeoPatternZ::TGeoPatternZ(TGeoVolume *vol, Int_t ndivisions, Double_t start, Double_t end)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fStart      = start;
   fEnd        = end;
   fStep       = (end - start)/ndivisions;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}
//_____________________________________________________________________________
TGeoPatternZ::~TGeoPatternZ()
{
// Destructor
}
//_____________________________________________________________________________
void TGeoPatternZ::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   fCurrent=idiv; 
   fMatrix->SetDz(((IsReflected())?-1.:1.)*(fStart+idiv*fStep+0.5*fStep));
}

//_____________________________________________________________________________
Bool_t TGeoPatternZ::IsOnBoundary(const Double_t *point) const
{
// Checks if the current point is on division boundary
   Double_t seg = (point[2]-fStart)/fStep;
   Double_t diff = seg - Int_t(seg);
   if (diff>0.5) diff = 1.-diff;
   if (diff<1e-8) return kTRUE;
   return kFALSE;
}   

//_____________________________________________________________________________
TGeoNode *TGeoPatternZ::FindNode(Double_t *point, const Double_t *dir)
{
// Find the cell corresponding to point and next cell along dir (if asked)
   TGeoNode *node = 0;
   Int_t ind = (Int_t)(1.+(point[2]-fStart)/fStep) - 1;
   if (dir) {
      fNextIndex = ind;
      if (dir[2]>0) fNextIndex++;
      else fNextIndex--;
      if ((fNextIndex<0) || (fNextIndex>=fNdivisions)) fNextIndex = -1;
   }   
   if ((ind<0) || (ind>=fNdivisions)) return node; 
   node = GetNodeOffset(ind);
   cd(ind);
   return node;
}

//______________________________________________________________________________
Double_t TGeoPatternZ::FindNextBoundary(Double_t *point, Double_t *dir, Int_t &indnext)
{
// Compute distance to next division layer returning the index of next section.
// Point is in the frame of the divided volume.
   indnext = -1;
   Double_t dist = TGeoShape::Big();
   if (TMath::Abs(dir[2])<TGeoShape::Tolerance()) return dist;
   if (fCurrent<0) {
      Error("FindNextBoundary", "Must call FindNode first");
      return dist;
   }   
   Int_t inc = (dir[2]>0)?1:0;
   dist = (fStep*(fCurrent+inc)-point[2])/dir[2];
   if (dist<0.) Error("FindNextBoundary", "Negative distance d=%g",dist);
   if (!inc) inc = -1;
   indnext = fCurrent+inc;
   return dist;   
}   

//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternZ::MakeCopy(Bool_t reflect)
{
// Make a copy of this finder. Reflect by Z if required.
   TGeoPatternZ *finder = new TGeoPatternZ(*this);
   if (!reflect) return finder;
   Reflect();
   TGeoCombiTrans *combi = new TGeoCombiTrans(*fMatrix);
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   combi->RegisterYourself();
   fMatrix = combi;
   return finder;
}
   
//______________________________________________________________________________
void TGeoPatternZ::SavePrimitive(ostream &out, Option_t * /*option*/ /*= ""*/)
{
   // Save a primitive as a C++ statement(s) on output stream "out".
   Int_t iaxis = 3;
   out << iaxis << ", " << fNdivisions << ", " << fStart << ", " << fStep; 
}

//______________________________________________________________________________
// TGeoPatternParaX - a X axis divison pattern for PARA shape
//______________________________________________________________________________

//_____________________________________________________________________________
TGeoPatternParaX::TGeoPatternParaX()
{
// Default constructor
}
//_____________________________________________________________________________
TGeoPatternParaX::TGeoPatternParaX(TGeoVolume *vol, Int_t ndivisions)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   Double_t dx = ((TGeoPara*)vol->GetShape())->GetX();
   fStart = -dx;
   fEnd = dx;
   fStep = 2*dx/ndivisions;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}
//_____________________________________________________________________________
TGeoPatternParaX::TGeoPatternParaX(TGeoVolume *vol, Int_t ndivisions, Double_t step)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   Double_t dx = ((TGeoPara*)vol->GetShape())->GetX();
   fStart = -dx;
   fEnd = fStart + ndivisions*step;
   fStep       = step;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}
//_____________________________________________________________________________
TGeoPatternParaX::TGeoPatternParaX(TGeoVolume *vol, Int_t ndivisions, Double_t start, Double_t end)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fStart      = start;
   fEnd        = end;
   fStep       = (end - start)/ndivisions;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}
//_____________________________________________________________________________
TGeoPatternParaX::~TGeoPatternParaX()
{
// Destructor
}
//_____________________________________________________________________________
void TGeoPatternParaX::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   fCurrent=idiv; 
   fMatrix->SetDx(fStart+idiv*fStep+0.5*fStep);
}

//_____________________________________________________________________________
Bool_t TGeoPatternParaX::IsOnBoundary(const Double_t *point) const
{
// Checks if the current point is on division boundary
   Double_t txy = ((TGeoPara*)fVolume->GetShape())->GetTxy();
   Double_t txz = ((TGeoPara*)fVolume->GetShape())->GetTxz();
   Double_t tyz = ((TGeoPara*)fVolume->GetShape())->GetTyz();
   Double_t xt = point[0]-txz*point[2]-txy*(point[1]-tyz*point[2]);
   Double_t seg = (xt-fStart)/fStep;
   Double_t diff = seg - Int_t(seg);
   if (diff>0.5) diff = 1.-diff;
   if (diff<1e-8) return kTRUE;
   return kFALSE;
}   

//_____________________________________________________________________________
TGeoNode *TGeoPatternParaX::FindNode(Double_t *point, const Double_t *dir)
{
// get the node division containing the query point
   TGeoNode *node = 0;
   Double_t txy = ((TGeoPara*)fVolume->GetShape())->GetTxy();
   Double_t txz = ((TGeoPara*)fVolume->GetShape())->GetTxz();
   Double_t tyz = ((TGeoPara*)fVolume->GetShape())->GetTyz();
   Double_t xt = point[0]-txz*point[2]-txy*(point[1]-tyz*point[2]);
   Int_t ind = (Int_t)(1.+(xt-fStart)/fStep)-1;
   if (dir) {
      Double_t ttsq = txy*txy + (txz-txy*tyz)*(txz-txy*tyz);
      Double_t divdirx = 1./TMath::Sqrt(1.+ttsq);
      Double_t divdiry = -txy*divdirx;
      Double_t divdirz = -(txz-txy*tyz)*divdirx;
      Double_t dot = dir[0]*divdirx + dir[1]*divdiry + dir[2]*divdirz;
      fNextIndex = ind;
      if (dot>0) fNextIndex++;
      else fNextIndex--;
      if ((fNextIndex<0) || (fNextIndex>=fNdivisions)) fNextIndex = -1;
   }
   if ((ind<0) || (ind>=fNdivisions)) return node; 
   node = GetNodeOffset(ind);
   cd(ind);
   return node;
}

//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternParaX::MakeCopy(Bool_t reflect)
{
// Make a copy of this finder. Reflect by Z if required.
   TGeoPatternParaX *finder = new TGeoPatternParaX(*this);
   if (!reflect) return finder;
   Reflect();
   TGeoCombiTrans *combi = new TGeoCombiTrans(*fMatrix);
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   combi->RegisterYourself();
   fMatrix = combi;
   return finder;
}
   
//______________________________________________________________________________
void TGeoPatternParaX::SavePrimitive(ostream &out, Option_t * /*option*/ /*= ""*/)
{
   // Save a primitive as a C++ statement(s) on output stream "out".
   Int_t iaxis = 1;
   out << iaxis << ", " << fNdivisions << ", " << fStart << ", " << fStep; 
}

//______________________________________________________________________________
// TGeoPatternParaY - a Y axis divison pattern for PARA shape
//______________________________________________________________________________

//_____________________________________________________________________________
TGeoPatternParaY::TGeoPatternParaY()
{
// Default constructor
   fTxy = 0;
}
//_____________________________________________________________________________
TGeoPatternParaY::TGeoPatternParaY(TGeoVolume *vol, Int_t ndivisions)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fTxy = ((TGeoPara*)vol->GetShape())->GetTxy();
   Double_t dy = ((TGeoPara*)vol->GetShape())->GetY();
   fStart = -dy;
   fEnd = dy;
   fStep = 2*dy/ndivisions;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}
//_____________________________________________________________________________
TGeoPatternParaY::TGeoPatternParaY(TGeoVolume *vol, Int_t ndivisions, Double_t step)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fTxy = ((TGeoPara*)vol->GetShape())->GetTxy();
   Double_t dy = ((TGeoPara*)vol->GetShape())->GetY();
   fStart = -dy;
   fEnd = fStart + ndivisions*step;
   fStep       = step;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}
//_____________________________________________________________________________
TGeoPatternParaY::TGeoPatternParaY(TGeoVolume *vol, Int_t ndivisions, Double_t start, Double_t end)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fTxy = ((TGeoPara*)vol->GetShape())->GetTxy();
   fStart      = start;
   fEnd        = end;
   fStep       = (end - start)/ndivisions;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}
//_____________________________________________________________________________
TGeoPatternParaY::~TGeoPatternParaY()
{
// Destructor
}
//_____________________________________________________________________________
void TGeoPatternParaY::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   fCurrent = idiv;
   Double_t dy = fStart+idiv*fStep+0.5*fStep;
   fMatrix->SetDx(fTxy*dy);
   fMatrix->SetDy(dy);
}

//_____________________________________________________________________________
Bool_t TGeoPatternParaY::IsOnBoundary(const Double_t *point) const
{
// Checks if the current point is on division boundary
   Double_t tyz = ((TGeoPara*)fVolume->GetShape())->GetTyz();
   Double_t yt = point[1]-tyz*point[2];
   Double_t seg = (yt-fStart)/fStep;
   Double_t diff = seg - Int_t(seg);
   if (diff>0.5) diff = 1.-diff;
   if (diff<1e-8) return kTRUE;
   return kFALSE;
}   

//_____________________________________________________________________________
TGeoNode *TGeoPatternParaY::FindNode(Double_t *point, const Double_t *dir)
{
// get the node division containing the query point
   TGeoNode *node = 0;
   Double_t tyz = ((TGeoPara*)fVolume->GetShape())->GetTyz();
   Double_t yt = point[1]-tyz*point[2];
   Int_t ind = (Int_t)(1.+(yt-fStart)/fStep) - 1;
   if (dir) {
      Double_t divdiry = 1./TMath::Sqrt(1.+tyz*tyz);
      Double_t divdirz = -tyz*divdiry;
      Double_t dot = dir[1]*divdiry + dir[2]*divdirz;
      fNextIndex = ind;
      if (dot>0) fNextIndex++;
      else fNextIndex--;
      if ((fNextIndex<0) || (fNextIndex>=fNdivisions)) fNextIndex = -1;
   }
   if ((ind<0) || (ind>=fNdivisions)) return node; 
   node = GetNodeOffset(ind);
   cd(ind);
   return node;
}

//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternParaY::MakeCopy(Bool_t reflect)
{
// Make a copy of this finder. Reflect by Z if required.
   TGeoPatternParaY *finder = new TGeoPatternParaY(*this);
   if (!reflect) return finder;
   Reflect();
   TGeoCombiTrans *combi = new TGeoCombiTrans(*fMatrix);
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   combi->RegisterYourself();
   fMatrix = combi;
   return finder;
}
   
//______________________________________________________________________________
void TGeoPatternParaY::SavePrimitive(ostream &out, Option_t * /*option*/ /*= ""*/)
{
   // Save a primitive as a C++ statement(s) on output stream "out".
   Int_t iaxis = 2;
   out << iaxis << ", " << fNdivisions << ", " << fStart << ", " << fStep; 
}

//______________________________________________________________________________
// TGeoPatternParaZ - a Z axis divison pattern for PARA shape
//______________________________________________________________________________

//_____________________________________________________________________________
TGeoPatternParaZ::TGeoPatternParaZ()
{
// Default constructor
   fTxz = 0;
   fTyz = 0;
}
//_____________________________________________________________________________
TGeoPatternParaZ::TGeoPatternParaZ(TGeoVolume *vol, Int_t ndivisions)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fTxz = ((TGeoPara*)vol->GetShape())->GetTxz();
   fTyz = ((TGeoPara*)vol->GetShape())->GetTyz();
   Double_t dz = ((TGeoPara*)vol->GetShape())->GetZ();
   fStart = -dz;
   fEnd = dz;
   fStep = 2*dz/ndivisions;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}
//_____________________________________________________________________________
TGeoPatternParaZ::TGeoPatternParaZ(TGeoVolume *vol, Int_t ndivisions, Double_t step)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fTxz = ((TGeoPara*)vol->GetShape())->GetTxz();
   fTyz = ((TGeoPara*)vol->GetShape())->GetTyz();
   Double_t dz = ((TGeoPara*)vol->GetShape())->GetZ();
   fStart = -dz;
   fEnd = fStart + ndivisions*step;
   fStep       = step;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}

//_____________________________________________________________________________
TGeoPatternParaZ::TGeoPatternParaZ(TGeoVolume *vol, Int_t ndivisions, Double_t start, Double_t end)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fTxz = ((TGeoPara*)vol->GetShape())->GetTxz();
   fTyz = ((TGeoPara*)vol->GetShape())->GetTyz();
   fStart      = start;
   fEnd        = end;
   fStep       = (end - start)/ndivisions;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}

//_____________________________________________________________________________
TGeoPatternParaZ::~TGeoPatternParaZ()
{
// Destructor
}

//_____________________________________________________________________________
void TGeoPatternParaZ::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   fCurrent = idiv;
   Double_t dz = fStart+idiv*fStep+0.5*fStep;
   fMatrix->SetDx(fTxz*dz);
   fMatrix->SetDy(fTyz*dz);
   fMatrix->SetDz((IsReflected())?-dz:dz);
}

//_____________________________________________________________________________
Bool_t TGeoPatternParaZ::IsOnBoundary(const Double_t *point) const
{
// Checks if the current point is on division boundary
   Double_t seg = (point[2]-fStart)/fStep;
   Double_t diff = seg - Int_t(seg);
   if (diff>0.5) diff = 1.-diff;
   if (diff<1e-8) return kTRUE;
   return kFALSE;
}   

//_____________________________________________________________________________
TGeoNode *TGeoPatternParaZ::FindNode(Double_t *point, const Double_t *dir)
{
// get the node division containing the query point
   TGeoNode *node = 0;
   Double_t zt = point[2];
   Int_t ind = (Int_t)(1.+(zt-fStart)/fStep) - 1;
   if (dir) {
      fNextIndex = ind;
      if (dir[2]>0) fNextIndex++;
      else fNextIndex--;
      if ((fNextIndex<0) || (fNextIndex>=fNdivisions)) fNextIndex = -1;
   }   
   if ((ind<0) || (ind>=fNdivisions)) return node; 
   node = GetNodeOffset(ind);
   cd(ind);
   return node;
}

//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternParaZ::MakeCopy(Bool_t reflect)
{
// Make a copy of this finder. Reflect by Z if required.
   TGeoPatternParaZ *finder = new TGeoPatternParaZ(*this);
   if (!reflect) return finder;
   Reflect();
   TGeoCombiTrans *combi = new TGeoCombiTrans(*fMatrix);
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   combi->RegisterYourself();
   fMatrix = combi;
   return finder;
}
   
//______________________________________________________________________________
void TGeoPatternParaZ::SavePrimitive(ostream &out, Option_t * /*option*/ /*= ""*/)
{
   // Save a primitive as a C++ statement(s) on output stream "out".
   Int_t iaxis = 3;
   out << iaxis << ", " << fNdivisions << ", " << fStart << ", " << fStep; 
}

//______________________________________________________________________________
// TGeoPatternTrapZ - a Z axis divison pattern for TRAP or GTRA shapes
//______________________________________________________________________________

//_____________________________________________________________________________
TGeoPatternTrapZ::TGeoPatternTrapZ()
{
// Default constructor
   fTxz = 0;
   fTyz = 0;
}
//_____________________________________________________________________________
TGeoPatternTrapZ::TGeoPatternTrapZ(TGeoVolume *vol, Int_t ndivisions)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   Double_t theta = ((TGeoTrap*)vol->GetShape())->GetTheta();
   Double_t phi   = ((TGeoTrap*)vol->GetShape())->GetPhi();
   fTxz = TMath::Tan(theta*TMath::DegToRad())*TMath::Cos(phi*TMath::DegToRad());
   fTyz = TMath::Tan(theta*TMath::DegToRad())*TMath::Sin(phi*TMath::DegToRad());
   Double_t dz = ((TGeoArb8*)vol->GetShape())->GetDz();
   fStart = -dz;
   fEnd = dz;
   fStep = 2*dz/ndivisions;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}
//_____________________________________________________________________________
TGeoPatternTrapZ::TGeoPatternTrapZ(TGeoVolume *vol, Int_t ndivisions, Double_t step)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   Double_t theta = ((TGeoTrap*)vol->GetShape())->GetTheta();
   Double_t phi   = ((TGeoTrap*)vol->GetShape())->GetPhi();
   fTxz = TMath::Tan(theta*TMath::DegToRad())*TMath::Cos(phi*TMath::DegToRad());
   fTyz = TMath::Tan(theta*TMath::DegToRad())*TMath::Sin(phi*TMath::DegToRad());
   Double_t dz = ((TGeoArb8*)vol->GetShape())->GetDz();
   fStart = -dz;
   fEnd = fStart + ndivisions*step;
   fStep       = step;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}
//_____________________________________________________________________________
TGeoPatternTrapZ::TGeoPatternTrapZ(TGeoVolume *vol, Int_t ndivisions, Double_t start, Double_t end)
             :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   Double_t theta = ((TGeoTrap*)vol->GetShape())->GetTheta();
   Double_t phi   = ((TGeoTrap*)vol->GetShape())->GetPhi();
   fTxz = TMath::Tan(theta*TMath::DegToRad())*TMath::Cos(phi*TMath::DegToRad());
   fTyz = TMath::Tan(theta*TMath::DegToRad())*TMath::Sin(phi*TMath::DegToRad());
   fStart      = start;
   fEnd        = end;
   fStep       = (end - start)/ndivisions;
   fMatrix     = new TGeoTranslation(0,0,0);
   fMatrix->RegisterYourself();
}
//_____________________________________________________________________________
TGeoPatternTrapZ::~TGeoPatternTrapZ()
{
// Destructor
}
//_____________________________________________________________________________
void TGeoPatternTrapZ::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   fCurrent = idiv;
   Double_t dz = fStart+idiv*fStep+0.5*fStep;
   fMatrix->SetDx(fTxz*dz);
   fMatrix->SetDy(fTyz*dz);
   fMatrix->SetDz((IsReflected())?-dz:dz);
}

//_____________________________________________________________________________
Bool_t TGeoPatternTrapZ::IsOnBoundary(const Double_t *point) const
{
// Checks if the current point is on division boundary
   Double_t seg = (point[2]-fStart)/fStep;
   Double_t diff = seg - Int_t(seg);
   if (diff>0.5) diff = 1.-diff;
   if (diff<1e-8) return kTRUE;
   return kFALSE;
}   

//_____________________________________________________________________________
TGeoNode *TGeoPatternTrapZ::FindNode(Double_t *point, const Double_t *dir)
{
// get the node division containing the query point
   TGeoNode *node = 0;
   Double_t zt = point[2];
   Int_t ind = (Int_t)(1. + (zt-fStart)/fStep) - 1;
   if (dir) {
      fNextIndex = ind;
      if (dir[2]>0) fNextIndex++;
      else fNextIndex--;
      if ((fNextIndex<0) || (fNextIndex>=fNdivisions)) fNextIndex = -1;
   }   
   if ((ind<0) || (ind>=fNdivisions)) return node; 
   node = GetNodeOffset(ind);
   cd(ind);
   return node;
}

//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternTrapZ::MakeCopy(Bool_t reflect)
{
// Make a copy of this finder. Reflect by Z if required.
   TGeoPatternTrapZ *finder = new TGeoPatternTrapZ(*this);
   if (!reflect) return finder;
   Reflect();
   TGeoCombiTrans *combi = new TGeoCombiTrans(*fMatrix);
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   combi->RegisterYourself();
   fMatrix = combi;
   return finder;
}
   
//______________________________________________________________________________
void TGeoPatternTrapZ::SavePrimitive(ostream &out, Option_t * /*option*/ /*= ""*/)
{
   // Save a primitive as a C++ statement(s) on output stream "out".
   Int_t iaxis = 3;
   out << iaxis << ", " << fNdivisions << ", " << fStart << ", " << fStep; 
}


//______________________________________________________________________________
// TGeoPatternCylR - a cylindrical R divison pattern
//______________________________________________________________________________ 

//_____________________________________________________________________________
TGeoPatternCylR::TGeoPatternCylR()
{
// Default constructor
   fMatrix = 0;
}
//_____________________________________________________________________________
TGeoPatternCylR::TGeoPatternCylR(TGeoVolume *vol, Int_t ndivisions)
                :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fMatrix     = gGeoIdentity;
// compute step, start, end
}
//_____________________________________________________________________________
TGeoPatternCylR::TGeoPatternCylR(TGeoVolume *vol, Int_t ndivisions, Double_t step)
                :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fStep       = step;
   fMatrix     = gGeoIdentity;
// compute start, end
}
//_____________________________________________________________________________
TGeoPatternCylR::TGeoPatternCylR(TGeoVolume *vol, Int_t ndivisions, Double_t start, Double_t end)
                :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fStart      = start;
   fEnd        = end;
   fStep       = (end - start)/ndivisions;
   fMatrix     = gGeoIdentity;
}
//_____________________________________________________________________________
TGeoPatternCylR::~TGeoPatternCylR()
{
// Destructor
}

//_____________________________________________________________________________
Bool_t TGeoPatternCylR::IsOnBoundary(const Double_t *point) const
{
// Checks if the current point is on division boundary
   Double_t r = TMath::Sqrt(point[0]*point[0]+point[1]*point[1]);
   Double_t seg = (r-fStart)/fStep;
   Double_t diff = seg - Int_t(seg);
   if (diff>0.5) diff = 1.-diff;
   if (diff<1e-8) return kTRUE;
   return kFALSE;
}   

//_____________________________________________________________________________
TGeoNode *TGeoPatternCylR::FindNode(Double_t *point, const Double_t *dir)
{
// find the node containing the query point
   if (!fMatrix) fMatrix = gGeoIdentity;
   TGeoNode *node = 0;
   Double_t r = TMath::Sqrt(point[0]*point[0]+point[1]*point[1]);
   Int_t ind = (Int_t)(1. + (r-fStart)/fStep) - 1;
   if (dir) {
      fNextIndex = ind;
      Double_t dot = point[0]*dir[0] + point[1]*dir[1];
      if (dot>0) fNextIndex++;
      else fNextIndex--;
      if ((fNextIndex<0) || (fNextIndex>=fNdivisions)) fNextIndex = -1;
   }   
   if ((ind<0) || (ind>=fNdivisions)) return node; 
   node = GetNodeOffset(ind);
   cd(ind);
   return node;
}

//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternCylR::MakeCopy(Bool_t reflect)
{
// Make a copy of this finder. Reflect by Z if required.
   TGeoPatternCylR *finder = new TGeoPatternCylR(*this);
   if (!reflect) return finder;
   Reflect();
   TGeoCombiTrans *combi = new TGeoCombiTrans(*fMatrix);
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   combi->RegisterYourself();
   fMatrix = combi;
   return finder;
}
   
//______________________________________________________________________________
void TGeoPatternCylR::SavePrimitive(ostream &out, Option_t * /*option*/ /*= ""*/)
{
   // Save a primitive as a C++ statement(s) on output stream "out".
   Int_t iaxis = 1;
   out << iaxis << ", " << fNdivisions << ", " << fStart << ", " << fStep; 
}

//______________________________________________________________________________
// TGeoPatternCylPhi - a cylindrical phi divison pattern
//______________________________________________________________________________ 

//_____________________________________________________________________________
TGeoPatternCylPhi::TGeoPatternCylPhi()
{
// Default constructor
   fSinCos = 0;
}
//_____________________________________________________________________________
TGeoPatternCylPhi::TGeoPatternCylPhi(TGeoVolume *vol, Int_t ndivisions)
                  :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
// compute step, start, end
   fStart = 0;
   fEnd = 0;
   fStep = 0;
   fMatrix = 0;
   fSinCos = 0;
}
//_____________________________________________________________________________
TGeoPatternCylPhi::TGeoPatternCylPhi(TGeoVolume *vol, Int_t ndivisions, Double_t step)
                  :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fStep       = step;
   fSinCos = 0;
// compute start, end
}
//_____________________________________________________________________________
TGeoPatternCylPhi::TGeoPatternCylPhi(TGeoVolume *vol, Int_t ndivisions, Double_t start, Double_t end)
                  :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fStart      = start;
   if (fStart<0) fStart+=360;
   fEnd        = end;
   if (fEnd<0) fEnd+=360;
   if ((end-start)<0)
      fStep       = (end-start+360)/ndivisions;
   else
      fStep       = (end-start)/ndivisions;
   fMatrix     = new TGeoRotation();
   fMatrix->RegisterYourself();
   fSinCos     = new Double_t[2*ndivisions];
   for (Int_t idiv = 0; idiv<ndivisions; idiv++) {
      fSinCos[2*idiv] = TMath::Sin(TMath::DegToRad()*(start+0.5*fStep+idiv*fStep));
      fSinCos[2*idiv+1] = TMath::Cos(TMath::DegToRad()*(start+0.5*fStep+idiv*fStep));
   }
}
//_____________________________________________________________________________
TGeoPatternCylPhi::~TGeoPatternCylPhi()
{
// Destructor
   if (fSinCos) delete [] fSinCos;
}
//_____________________________________________________________________________
void TGeoPatternCylPhi::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   fCurrent = idiv;
   if (!fSinCos) {
      fSinCos     = new Double_t[2*fNdivisions];
      for (Int_t i = 0; i<fNdivisions; i++) {
         fSinCos[2*i] = TMath::Sin(TMath::DegToRad()*(fStart+0.5*fStep+i*fStep));
         fSinCos[2*i+1] = TMath::Cos(TMath::DegToRad()*(fStart+0.5*fStep+i*fStep));
      }
   }      
   ((TGeoRotation*)fMatrix)->FastRotZ(&fSinCos[2*idiv]);
}

//_____________________________________________________________________________
Bool_t TGeoPatternCylPhi::IsOnBoundary(const Double_t *point) const
{
// Checks if the current point is on division boundary
   Double_t phi = TMath::ATan2(point[1], point[0])*TMath::RadToDeg();
   if (phi<0) phi += 360;
   Double_t ddp = phi - fStart;
   if (ddp<0) ddp+=360;
   Double_t seg = ddp/fStep;
   Double_t diff = seg - Int_t(seg);
   if (diff>0.5) diff = 1.-diff;
   if (diff<1e-8) return kTRUE;
   return kFALSE;
}   

//_____________________________________________________________________________
TGeoNode *TGeoPatternCylPhi::FindNode(Double_t *point, const Double_t *dir)
{
// find the node containing the query point
   TGeoNode *node = 0;
   Double_t phi = TMath::ATan2(point[1], point[0])*TMath::RadToDeg();
   if (phi<0) phi += 360;
//   Double_t dphi = fStep*fNdivisions;
   Double_t ddp = phi - fStart;
   if (ddp<0) ddp+=360;
//   if (ddp>360) ddp-=360;
   Int_t ind = (Int_t)(1. + ddp/fStep) - 1;
   if (dir) {
      fNextIndex = ind;
      Double_t dot = point[0]*dir[1]-point[1]*dir[0];
      if (dot>0) fNextIndex++;
      else fNextIndex--;
      if ((fNextIndex<0) || (fNextIndex>=fNdivisions)) fNextIndex = -1;
   }   
   if ((ind<0) || (ind>=fNdivisions)) return node; 
   node = GetNodeOffset(ind);
   cd(ind);
   return node;
}

//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternCylPhi::MakeCopy(Bool_t reflect)
{
// Make a copy of this finder. Reflect by Z if required.
   TGeoPatternCylPhi *finder = new TGeoPatternCylPhi(*this);
   if (!reflect) return finder;
   Reflect();
   TGeoRotation *rot = new TGeoRotation(*fMatrix);
   rot->ReflectZ(kTRUE);
   rot->ReflectZ(kFALSE);
   rot->RegisterYourself();
   fMatrix = rot;
   return finder;
}
   
//______________________________________________________________________________
void TGeoPatternCylPhi::SavePrimitive(ostream &out, Option_t * /*option*/ /*= ""*/)
{
   // Save a primitive as a C++ statement(s) on output stream "out".
   Int_t iaxis = 2;
   out << iaxis << ", " << fNdivisions << ", " << fStart << ", " << fStep; 
}

//______________________________________________________________________________
// TGeoPatternSphR - a spherical R divison pattern
//______________________________________________________________________________

//_____________________________________________________________________________
TGeoPatternSphR::TGeoPatternSphR()
{
// Default constructor
}
//_____________________________________________________________________________
TGeoPatternSphR::TGeoPatternSphR(TGeoVolume *vol, Int_t ndivisions)
                :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
// compute step, start, end
}
//_____________________________________________________________________________
TGeoPatternSphR::TGeoPatternSphR(TGeoVolume *vol, Int_t ndivisions, Double_t step)
                :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fStep       = step;
// compute start, end
}
//_____________________________________________________________________________
TGeoPatternSphR::TGeoPatternSphR(TGeoVolume *vol, Int_t ndivisions, Double_t start, Double_t end)
                :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fStart      = start;
   fEnd        = end;
   fStep       = (end - start)/ndivisions;
}
//_____________________________________________________________________________
TGeoPatternSphR::~TGeoPatternSphR()
{
// Destructor
}
//_____________________________________________________________________________
TGeoNode *TGeoPatternSphR::FindNode(Double_t * /*point*/, const Double_t * /*dir*/)
{
// find the node containing the query point
   return 0;
}

//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternSphR::MakeCopy(Bool_t reflect)
{
// Make a copy of this finder. Reflect by Z if required.
   TGeoPatternSphR *finder = new TGeoPatternSphR(*this);
   if (!reflect) return finder;
   Reflect();
   TGeoCombiTrans *combi = new TGeoCombiTrans(*fMatrix);
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   combi->RegisterYourself();
   fMatrix = combi;
   return finder;
}
   
//______________________________________________________________________________
void TGeoPatternSphR::SavePrimitive(ostream &out, Option_t * /*option*/ /*= ""*/)
{
   // Save a primitive as a C++ statement(s) on output stream "out".
   Int_t iaxis = 1;
   out << iaxis << ", " << fNdivisions << ", " << fStart << ", " << fStep; 
}

//______________________________________________________________________________
// TGeoPatternSphTheta - a spherical theta divison pattern
//______________________________________________________________________________

//_____________________________________________________________________________
TGeoPatternSphTheta::TGeoPatternSphTheta()
{
// Default constructor
}
//_____________________________________________________________________________
TGeoPatternSphTheta::TGeoPatternSphTheta(TGeoVolume *vol, Int_t ndivisions)
                    :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
// compute step, start, end
}
//_____________________________________________________________________________
TGeoPatternSphTheta::TGeoPatternSphTheta(TGeoVolume *vol, Int_t ndivisions, Double_t step)
                    :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fStep       = step;
// compute start, end
}
//_____________________________________________________________________________
TGeoPatternSphTheta::TGeoPatternSphTheta(TGeoVolume *vol, Int_t ndivisions, Double_t start, Double_t end)
                    :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fStart      = start;
   fEnd        = end;
   fStep       = (end - start)/ndivisions;
}
//_____________________________________________________________________________
TGeoPatternSphTheta::~TGeoPatternSphTheta()
{
// Destructor
}
//_____________________________________________________________________________
TGeoNode *TGeoPatternSphTheta::FindNode(Double_t * /*point*/, const Double_t * /*dir*/)
{
// find the node containing the query point
   return 0;
}

//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternSphTheta::MakeCopy(Bool_t reflect)
{
// Make a copy of this finder. Reflect by Z if required.
   TGeoPatternSphTheta *finder = new TGeoPatternSphTheta(*this);
   if (!reflect) return finder;
   Reflect();
   TGeoCombiTrans *combi = new TGeoCombiTrans(*fMatrix);
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   combi->RegisterYourself();
   fMatrix = combi;
   return finder;
}
   
//______________________________________________________________________________
void TGeoPatternSphTheta::SavePrimitive(ostream &out, Option_t * /*option*/ /*= ""*/)
{
   // Save a primitive as a C++ statement(s) on output stream "out".
   Int_t iaxis = 2;
   out << iaxis << ", " << fNdivisions << ", " << fStart << ", " << fStep; 
}

//______________________________________________________________________________
// TGeoPatternSphPhi - a spherical phi divison pattern
//______________________________________________________________________________

//_____________________________________________________________________________
TGeoPatternSphPhi::TGeoPatternSphPhi()
{
// Default constructor
}
//_____________________________________________________________________________
TGeoPatternSphPhi::TGeoPatternSphPhi(TGeoVolume *vol, Int_t ndivisions)
                  :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
// compute step, start, end
}
//_____________________________________________________________________________
TGeoPatternSphPhi::TGeoPatternSphPhi(TGeoVolume *vol, Int_t ndivisions, Double_t step)
                  :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fStep       = step;
// compute start, end
}
//_____________________________________________________________________________
TGeoPatternSphPhi::TGeoPatternSphPhi(TGeoVolume *vol, Int_t ndivisions, Double_t start, Double_t end)
                  :TGeoPatternFinder(vol, ndivisions)
{   
// constructor
   fStart      = start;
   fEnd        = end;
   fStep       = (end - start)/ndivisions;
}
//_____________________________________________________________________________
TGeoPatternSphPhi::~TGeoPatternSphPhi()
{
// Destructor
}
//_____________________________________________________________________________
TGeoNode *TGeoPatternSphPhi::FindNode(Double_t * /*point*/, const Double_t * /*dir*/)
{
// find the node containing the query point
   return 0;
}

//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternSphPhi::MakeCopy(Bool_t reflect)
{
// Make a copy of this finder. Reflect by Z if required.
   TGeoPatternSphPhi *finder = new TGeoPatternSphPhi(*this);
   if (!reflect) return finder;
   Reflect();
   TGeoCombiTrans *combi = new TGeoCombiTrans(*fMatrix);
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   combi->RegisterYourself();
   fMatrix = combi;
   return finder;
}
   
//______________________________________________________________________________
void TGeoPatternSphPhi::SavePrimitive(ostream &out, Option_t * /*option*/ /*= ""*/)
{
   // Save a primitive as a C++ statement(s) on output stream "out".
   Int_t iaxis = 3;
   out << iaxis << ", " << fNdivisions << ", " << fStart << ", " << fStep; 
}

//______________________________________________________________________________
// TGeoPatternHoneycomb - a divison pattern specialized for honeycombs
//______________________________________________________________________________   

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