// @(#)root/geom:$Id$
// 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 "TGeoPatternFinder.h"

#include "Riostream.h"
#include "TObject.h"
#include "TThread.h"
#include "TGeoMatrix.h"
#include "TGeoPara.h"
#include "TGeoArb8.h"
#include "TGeoNode.h"
#include "TGeoManager.h"
#include "TMath.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::ThreadData_t::ThreadData_t() :
   fMatrix(0), fCurrent(-1), fNextIndex(-1)
{
   // Constructor.
}

//______________________________________________________________________________
TGeoPatternFinder::ThreadData_t::~ThreadData_t()
{
   // Destructor.

//   if (fMatrix != gGeoIdentity) delete fMatrix;
}

//______________________________________________________________________________
TGeoPatternFinder::ThreadData_t& TGeoPatternFinder::GetThreadData() const
{
   Int_t tid = TGeoManager::ThreadId();
/*
   if (tid >= fThreadSize) {
      Error("GetThreadData", "Thread id=%d bigger than maximum declared thread number %d. \nUse TGeoManager::SetMaxThreads properly !!!",
             tid, fThreadSize);
   }

   TThread::Lock();
   if (tid >= fThreadSize)
   {
      fThreadData.resize(tid + 1);
      fThreadSize = tid + 1;
   }
   if (fThreadData[tid] == 0)
   {
      fThreadData[tid] = new ThreadData_t;
      fThreadData[tid]->fMatrix = CreateMatrix();
   }
   TThread::UnLock();
*/
   return *fThreadData[tid];
}

//______________________________________________________________________________
void TGeoPatternFinder::ClearThreadData() const
{
   TThread::Lock();
   std::vector<ThreadData_t*>::iterator i = fThreadData.begin();
   while (i != fThreadData.end())
   {
      delete *i;
      ++i;
   }
   fThreadData.clear();
   fThreadSize = 0;
   TThread::UnLock();
}

//______________________________________________________________________________
void TGeoPatternFinder::CreateThreadData(Int_t nthreads)
{
// Create thread data for n threads max.
   TThread::Lock();
   fThreadData.resize(nthreads);
   fThreadSize = nthreads;
   for (Int_t tid=0; tid<nthreads; tid++) {
      if (fThreadData[tid] == 0) {
         fThreadData[tid] = new ThreadData_t;
         fThreadData[tid]->fMatrix = CreateMatrix();
      }
   }
   TThread::UnLock();
}

//_____________________________________________________________________________
TGeoPatternFinder::TGeoPatternFinder()
{
// Default constructor
   fNdivisions = 0;
   fDivIndex   = 0;
   fStep       = 0;
   fStart      = 0;
   fEnd        = 0;
   fVolume     = 0;
   fThreadSize = 0;
}

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

//_____________________________________________________________________________
TGeoPatternFinder::TGeoPatternFinder(const TGeoPatternFinder& pf) :
  TObject(pf),
  fStep(pf.fStep),
  fStart(pf.fStart),
  fEnd(pf.fEnd),
  fNdivisions(pf.fNdivisions),
  fDivIndex(pf.fDivIndex),
  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;
      fNdivisions=pf.fNdivisions;
      fDivIndex=pf.fDivIndex;
      fVolume=pf.fVolume;
   }
   return *this;
}

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

//______________________________________________________________________________
Int_t TGeoPatternFinder::GetCurrent()
{
   // Return current index.
   return GetThreadData().fCurrent;
}

//______________________________________________________________________________
TGeoMatrix* TGeoPatternFinder::GetMatrix()
{
   // Return current matrix.
   return GetThreadData().fMatrix;
}

//______________________________________________________________________________
Int_t TGeoPatternFinder::GetNext() const
{
   // Get index of next division.
   return GetThreadData().fNextIndex;
}

//______________________________________________________________________________
void TGeoPatternFinder::SetNext(Int_t index)
{
   // Set index of next division.
   GetThreadData().fNextIndex = index;
}

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

//______________________________________________________________________________
void TGeoPatternFinder::SetRange(Double_t start, Double_t step, Int_t ndivisions)
{
// Set division range. Use this method only when dividing an assembly.
   fStart = start;
   fEnd = fStart + ndivisions*step;
   fStep = step;
   fNdivisions = ndivisions;
}

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

//_____________________________________________________________________________
TGeoPatternX::TGeoPatternX()
{
// Default constructor
   CreateThreadData(1);
}

//_____________________________________________________________________________
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;
   CreateThreadData(1);
}

//_____________________________________________________________________________
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;
   CreateThreadData(1);
}

//_____________________________________________________________________________
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;
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternX::TGeoPatternX(const TGeoPatternX& pf) :
  TGeoPatternFinder(pf)
{
   //copy constructor
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternX& TGeoPatternX::operator=(const TGeoPatternX& pf)
{
   //assignment operator
   if(this!=&pf) {
      TGeoPatternFinder::operator=(pf);
      CreateThreadData(1);
   }
   return *this;
}

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

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

//______________________________________________________________________________
TGeoMatrix* TGeoPatternX::CreateMatrix() const
{
   // Return new matrix of type used by  this finder.
   if (!IsReflected()) {
      TGeoMatrix *matrix = new TGeoTranslation(0.,0.,0.);
      matrix->RegisterYourself();
      return matrix;
   }
   TGeoCombiTrans *combi = new TGeoCombiTrans();
   combi->RegisterYourself();
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   return combi;
}

//_____________________________________________________________________________
void TGeoPatternX::UpdateMatrix(Int_t idiv, TGeoHMatrix &matrix) const
{
// Fills external matrix with the local one corresponding to the given division
// index.
   matrix.Clear();
   matrix.SetDx(fStart+idiv*fStep+0.5*fStep);
}

//_____________________________________________________________________________
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)
   ThreadData_t& td = GetThreadData();
   TGeoNode *node = 0;
   Int_t ind = (Int_t)(1.+(point[0]-fStart)/fStep) - 1;
   if (dir) {
      td.fNextIndex = ind;
      if (dir[0]>0) td.fNextIndex++;
      else td.fNextIndex--;
      if ((td.fNextIndex<0) || (td.fNextIndex>=fNdivisions)) td.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.
   ThreadData_t& td = GetThreadData();
   indnext = -1;
   Double_t dist = TGeoShape::Big();
   if (TMath::Abs(dir[0])<TGeoShape::Tolerance()) return dist;
   if (td.fCurrent<0) {
      Error("FindNextBoundary", "Must call FindNode first");
      return dist;
   }
   Int_t inc = (dir[0]>0)?1:0;
   dist = (fStep*(td.fCurrent+inc)-point[0])/dir[0];
   if (dist<0.) Error("FindNextBoundary", "Negative distance d=%g",dist);
   if (!inc) inc = -1;
   indnext = td.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;
   finder->Reflect();
   return finder;
}

//______________________________________________________________________________
void TGeoPatternX::SavePrimitive(std::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
   CreateThreadData(1);
}

//_____________________________________________________________________________
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;
   CreateThreadData(1);
}

//_____________________________________________________________________________
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;
   CreateThreadData(1);
}

//_____________________________________________________________________________
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;
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternY::TGeoPatternY(const TGeoPatternY& pf) :
  TGeoPatternFinder(pf)
{
   //copy constructor
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternY& TGeoPatternY::operator=(const TGeoPatternY& pf)
{
   //assignment operator
   if(this!=&pf) {
      TGeoPatternFinder::operator=(pf);
      CreateThreadData(1);
   }
   return *this;
}

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

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

//______________________________________________________________________________
TGeoMatrix* TGeoPatternY::CreateMatrix() const
{
   // Return new matrix of type used by  this finder.
   if (!IsReflected()) {
      TGeoMatrix *matrix = new TGeoTranslation(0.,0.,0.);
      matrix->RegisterYourself();
      return matrix;
   }
   TGeoCombiTrans *combi = new TGeoCombiTrans();
   combi->RegisterYourself();
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   return combi;
}

//_____________________________________________________________________________
void TGeoPatternY::UpdateMatrix(Int_t idiv, TGeoHMatrix &matrix) const
{
// Fills external matrix with the local one corresponding to the given division
// index.
   matrix.Clear();
   matrix.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)
   ThreadData_t& td = GetThreadData();
   TGeoNode *node = 0;
   Int_t ind = (Int_t)(1.+(point[1]-fStart)/fStep) - 1;
   if (dir) {
      td.fNextIndex = ind;
      if (dir[1]>0) td.fNextIndex++;
      else td.fNextIndex--;
      if ((td.fNextIndex<0) || (td.fNextIndex>=fNdivisions)) td.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.
   ThreadData_t& td = GetThreadData();
   indnext = -1;
   Double_t dist = TGeoShape::Big();
   if (TMath::Abs(dir[1])<TGeoShape::Tolerance()) return dist;
   if (td.fCurrent<0) {
      Error("FindNextBoundary", "Must call FindNode first");
      return dist;
   }
   Int_t inc = (dir[1]>0)?1:0;
   dist = (fStep*(td.fCurrent+inc)-point[1])/dir[1];
   if (dist<0.) Error("FindNextBoundary", "Negative distance d=%g",dist);
   if (!inc) inc = -1;
   indnext = td.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;
   finder->Reflect();
   return finder;
}

//______________________________________________________________________________
void TGeoPatternY::SavePrimitive(std::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
   CreateThreadData(1);
}
//_____________________________________________________________________________
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;
   CreateThreadData(1);
}
//_____________________________________________________________________________
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;
   CreateThreadData(1);
}
//_____________________________________________________________________________
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;
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternZ::TGeoPatternZ(const TGeoPatternZ& pf) :
  TGeoPatternFinder(pf)
{
   //copy constructor
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternZ& TGeoPatternZ::operator=(const TGeoPatternZ& pf)
{
   //assignment operator
   if(this!=&pf) {
      TGeoPatternFinder::operator=(pf);
      CreateThreadData(1);
   }
   return *this;
}

//_____________________________________________________________________________
TGeoPatternZ::~TGeoPatternZ()
{
// Destructor
}
//_____________________________________________________________________________
void TGeoPatternZ::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   ThreadData_t& td = GetThreadData();
   td.fCurrent=idiv;
   td.fMatrix->SetDz(((IsReflected())?-1.:1.)*(fStart+idiv*fStep+0.5*fStep));
}

//______________________________________________________________________________
TGeoMatrix* TGeoPatternZ::CreateMatrix() const
{
   // Return new matrix of type used by  this finder.
   if (!IsReflected()) {
      TGeoMatrix *matrix = new TGeoTranslation(0.,0.,0.);
      matrix->RegisterYourself();
      return matrix;
   }
   TGeoCombiTrans *combi = new TGeoCombiTrans();
   combi->RegisterYourself();
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   return combi;
}

//_____________________________________________________________________________
void TGeoPatternZ::UpdateMatrix(Int_t idiv, TGeoHMatrix &matrix) const
{
// Fills external matrix with the local one corresponding to the given division
// index.
   matrix.Clear();
   matrix.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)
   ThreadData_t& td = GetThreadData();
   TGeoNode *node = 0;
   Int_t ind = (Int_t)(1.+(point[2]-fStart)/fStep) - 1;
   if (dir) {
      td.fNextIndex = ind;
      if (dir[2]>0) td.fNextIndex++;
      else td.fNextIndex--;
      if ((td.fNextIndex<0) || (td.fNextIndex>=fNdivisions)) td.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;
   ThreadData_t& td = GetThreadData();
   Double_t dist = TGeoShape::Big();
   if (TMath::Abs(dir[2])<TGeoShape::Tolerance()) return dist;
   if (td.fCurrent<0) {
      Error("FindNextBoundary", "Must call FindNode first");
      return dist;
   }
   Int_t inc = (dir[2]>0)?1:0;
   dist = (fStep*(td.fCurrent+inc)-point[2])/dir[2];
   if (dist<0.) Error("FindNextBoundary", "Negative distance d=%g",dist);
   if (!inc) inc = -1;
   indnext = td.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;
   finder->Reflect();
   return finder;
}

//______________________________________________________________________________
void TGeoPatternZ::SavePrimitive(std::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
   CreateThreadData(1);
}
//_____________________________________________________________________________
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;
   CreateThreadData(1);
}
//_____________________________________________________________________________
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;
   CreateThreadData(1);
}
//_____________________________________________________________________________
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;
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternParaX::TGeoPatternParaX(const TGeoPatternParaX& pf) :
  TGeoPatternFinder(pf)
{
   //copy constructor
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternParaX& TGeoPatternParaX::operator=(const TGeoPatternParaX& pf)
{
   //assignment operator
   if(this!=&pf) {
      TGeoPatternFinder::operator=(pf);
      CreateThreadData(1);
   }
   return *this;
}

//_____________________________________________________________________________
TGeoPatternParaX::~TGeoPatternParaX()
{
// Destructor
}
//_____________________________________________________________________________
void TGeoPatternParaX::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   ThreadData_t& td = GetThreadData();
   td.fCurrent=idiv;
   td.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
   ThreadData_t& td = GetThreadData();
   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;
      td.fNextIndex = ind;
      if (dot>0) td.fNextIndex++;
      else td.fNextIndex--;
      if ((td.fNextIndex<0) || (td.fNextIndex>=fNdivisions)) td.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;
   finder->Reflect();
   return finder;
}

//______________________________________________________________________________
void TGeoPatternParaX::SavePrimitive(std::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;
}

//______________________________________________________________________________
TGeoMatrix* TGeoPatternParaX::CreateMatrix() const
{
   // Return new matrix of type used by  this finder.
   if (!IsReflected()) {
      TGeoMatrix *matrix = new TGeoTranslation(0.,0.,0.);
      matrix->RegisterYourself();
      return matrix;
   }
   TGeoCombiTrans *combi = new TGeoCombiTrans();
   combi->RegisterYourself();
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   return combi;
}

//_____________________________________________________________________________
void TGeoPatternParaX::UpdateMatrix(Int_t idiv, TGeoHMatrix &matrix) const
{
// Fills external matrix with the local one corresponding to the given division
// index.
   matrix.Clear();
   matrix.SetDx(fStart+idiv*fStep+0.5*fStep);
}

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

//_____________________________________________________________________________
TGeoPatternParaY::TGeoPatternParaY()
{
// Default constructor
   fTxy = 0;
   CreateThreadData(1);
}
//_____________________________________________________________________________
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;
   CreateThreadData(1);
}
//_____________________________________________________________________________
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;
   CreateThreadData(1);
}
//_____________________________________________________________________________
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;
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternParaY::TGeoPatternParaY(const TGeoPatternParaY& pf) :
  TGeoPatternFinder(pf)
{
   //copy constructor
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternParaY& TGeoPatternParaY::operator=(const TGeoPatternParaY& pf)
{
   //assignment operator
   if(this!=&pf) {
      TGeoPatternFinder::operator=(pf);
      CreateThreadData(1);
   }
   return *this;
}

//_____________________________________________________________________________
TGeoPatternParaY::~TGeoPatternParaY()
{
// Destructor
}
//_____________________________________________________________________________
void TGeoPatternParaY::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   ThreadData_t& td = GetThreadData();
   td.fCurrent = idiv;
   Double_t dy = fStart+idiv*fStep+0.5*fStep;
   td.fMatrix->SetDx(fTxy*dy);
   td.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
   ThreadData_t& td = GetThreadData();
   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;
      td.fNextIndex = ind;
      if (dot>0) td.fNextIndex++;
      else td.fNextIndex--;
      if ((td.fNextIndex<0) || (td.fNextIndex>=fNdivisions)) td.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;
   finder->Reflect();
   return finder;
}

//______________________________________________________________________________
void TGeoPatternParaY::SavePrimitive(std::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;
}

//______________________________________________________________________________
TGeoMatrix* TGeoPatternParaY::CreateMatrix() const
{
   // Return new matrix of type used by  this finder.
   if (!IsReflected()) {
      TGeoMatrix *matrix = new TGeoTranslation(0.,0.,0.);
      matrix->RegisterYourself();
      return matrix;
   }
   TGeoCombiTrans *combi = new TGeoCombiTrans();
   combi->RegisterYourself();
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   return combi;
}

//_____________________________________________________________________________
void TGeoPatternParaY::UpdateMatrix(Int_t idiv, TGeoHMatrix &matrix) const
{
// Fills external matrix with the local one corresponding to the given division
// index.
   matrix.Clear();
   Double_t dy = fStart+idiv*fStep+0.5*fStep;
   matrix.SetDx(fTxy*dy);
   matrix.SetDy(dy);
}

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

//_____________________________________________________________________________
TGeoPatternParaZ::TGeoPatternParaZ()
{
// Default constructor
   fTxz = 0;
   fTyz = 0;
   CreateThreadData(1);
}
//_____________________________________________________________________________
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;
   CreateThreadData(1);
}
//_____________________________________________________________________________
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;
   CreateThreadData(1);
}

//_____________________________________________________________________________
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;
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternParaZ::TGeoPatternParaZ(const TGeoPatternParaZ& pf) :
  TGeoPatternFinder(pf)
{
   //copy constructor
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternParaZ& TGeoPatternParaZ::operator=(const TGeoPatternParaZ& pf)
{
   //assignment operator
   if(this!=&pf) {
      TGeoPatternFinder::operator=(pf);
      CreateThreadData(1);
   }
   return *this;
}

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

//_____________________________________________________________________________
void TGeoPatternParaZ::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   ThreadData_t& td = GetThreadData();
   td.fCurrent = idiv;
   Double_t dz = fStart+idiv*fStep+0.5*fStep;
   td.fMatrix->SetDx(fTxz*dz);
   td.fMatrix->SetDy(fTyz*dz);
   td.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
   ThreadData_t& td = GetThreadData();
   TGeoNode *node = 0;
   Double_t zt = point[2];
   Int_t ind = (Int_t)(1.+(zt-fStart)/fStep) - 1;
   if (dir) {
      td.fNextIndex = ind;
      if (dir[2]>0) td.fNextIndex++;
      else td.fNextIndex--;
      if ((td.fNextIndex<0) || (td.fNextIndex>=fNdivisions)) td.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;
   finder->Reflect();
   return finder;
}

//______________________________________________________________________________
void TGeoPatternParaZ::SavePrimitive(std::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;
}

//______________________________________________________________________________
TGeoMatrix* TGeoPatternParaZ::CreateMatrix() const
{
   // Return new matrix of type used by  this finder.
   if (!IsReflected()) {
      TGeoMatrix *matrix = new TGeoTranslation(0.,0.,0.);
      matrix->RegisterYourself();
      return matrix;
   }
   TGeoCombiTrans *combi = new TGeoCombiTrans();
   combi->RegisterYourself();
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   return combi;
}

//_____________________________________________________________________________
void TGeoPatternParaZ::UpdateMatrix(Int_t idiv, TGeoHMatrix &matrix) const
{
// Fills external matrix with the local one corresponding to the given division
// index.
   matrix.Clear();
   Double_t dz = fStart+idiv*fStep+0.5*fStep;
   matrix.SetDx(fTxz*dz);
   matrix.SetDy(fTyz*dz);
   matrix.SetDz((IsReflected())?-dz:dz);
}

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

//_____________________________________________________________________________
TGeoPatternTrapZ::TGeoPatternTrapZ()
{
// Default constructor
   fTxz = 0;
   fTyz = 0;
   CreateThreadData(1);
}
//_____________________________________________________________________________
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;
   CreateThreadData(1);
}
//_____________________________________________________________________________
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;
   CreateThreadData(1);
}
//_____________________________________________________________________________
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;
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternTrapZ::TGeoPatternTrapZ(const TGeoPatternTrapZ& pf) :
  TGeoPatternFinder(pf),
  fTxz(pf.fTxz),
  fTyz(pf.fTyz)
{
   //copy constructor
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternTrapZ& TGeoPatternTrapZ::operator=(const TGeoPatternTrapZ& pf)
{
   //assignment operator
   if(this!=&pf) {
      TGeoPatternFinder::operator=(pf);
      fTxz = pf.fTxz;
      fTyz = pf.fTyz;
      CreateThreadData(1);
   }
   return *this;
}

//_____________________________________________________________________________
TGeoPatternTrapZ::~TGeoPatternTrapZ()
{
// Destructor
}
//_____________________________________________________________________________
void TGeoPatternTrapZ::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   ThreadData_t& td = GetThreadData();
   td.fCurrent = idiv;
   Double_t dz = fStart+idiv*fStep+0.5*fStep;
   td.fMatrix->SetDx(fTxz*dz);
   td.fMatrix->SetDy(fTyz*dz);
   td.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
   ThreadData_t& td = GetThreadData();
   TGeoNode *node = 0;
   Double_t zt = point[2];
   Int_t ind = (Int_t)(1. + (zt-fStart)/fStep) - 1;
   if (dir) {
      td.fNextIndex = ind;
      if (dir[2]>0) td.fNextIndex++;
      else td.fNextIndex--;
      if ((td.fNextIndex<0) || (td.fNextIndex>=fNdivisions)) td.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;
   finder->Reflect();
   return finder;
}

//______________________________________________________________________________
void TGeoPatternTrapZ::SavePrimitive(std::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;
}

//______________________________________________________________________________
TGeoMatrix* TGeoPatternTrapZ::CreateMatrix() const
{
   // Return new matrix of type used by  this finder.
   if (!IsReflected()) {
      TGeoMatrix *matrix = new TGeoTranslation(0.,0.,0.);
      matrix->RegisterYourself();
      return matrix;
   }
   TGeoCombiTrans *combi = new TGeoCombiTrans();
   combi->RegisterYourself();
   combi->ReflectZ(kTRUE);
   combi->ReflectZ(kFALSE);
   return combi;
}

//_____________________________________________________________________________
void TGeoPatternTrapZ::UpdateMatrix(Int_t idiv, TGeoHMatrix &matrix) const
{
// Fills external matrix with the local one corresponding to the given division
// index.
   matrix.Clear();
   Double_t dz = fStart+idiv*fStep+0.5*fStep;
   matrix.SetDx(fTxz*dz);
   matrix.SetDy(fTyz*dz);
   matrix.SetDz((IsReflected())?-dz:dz);
}

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

//_____________________________________________________________________________
TGeoPatternCylR::TGeoPatternCylR()
{
// Default constructor
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternCylR::TGeoPatternCylR(TGeoVolume *vol, Int_t ndivisions)
                :TGeoPatternFinder(vol, ndivisions)
{
// constructor
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternCylR::TGeoPatternCylR(TGeoVolume *vol, Int_t ndivisions, Double_t step)
                :TGeoPatternFinder(vol, ndivisions)
{
// constructor
   fStep       = step;
   CreateThreadData(1);
// 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;
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternCylR::TGeoPatternCylR(const TGeoPatternCylR& pf) :
  TGeoPatternFinder(pf)
{
   //copy constructor
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternCylR& TGeoPatternCylR::operator=(const TGeoPatternCylR& pf)
{
   //assignment operator
   if(this!=&pf) {
      TGeoPatternFinder::operator=(pf);
      CreateThreadData(1);
   }
   return *this;
}

//_____________________________________________________________________________
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;
}

//_____________________________________________________________________________
void TGeoPatternCylR::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   ThreadData_t& td = GetThreadData();
   td.fCurrent=idiv;
}

//_____________________________________________________________________________
TGeoNode *TGeoPatternCylR::FindNode(Double_t *point, const Double_t *dir)
{
// find the node containing the query point
   ThreadData_t& td = GetThreadData();
   if (!td.fMatrix) td.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) {
      td.fNextIndex = ind;
      Double_t dot = point[0]*dir[0] + point[1]*dir[1];
      if (dot>0) td.fNextIndex++;
      else td.fNextIndex--;
      if ((td.fNextIndex<0) || (td.fNextIndex>=fNdivisions)) td.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;
   finder->Reflect();
   return finder;
}

//______________________________________________________________________________
void TGeoPatternCylR::SavePrimitive(std::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;
}

//______________________________________________________________________________
TGeoMatrix* TGeoPatternCylR::CreateMatrix() const
{
   // Return new matrix of type used by  this finder.
   return gGeoIdentity;
}

//_____________________________________________________________________________
void TGeoPatternCylR::UpdateMatrix(Int_t, TGeoHMatrix &matrix) const
{
// Fills external matrix with the local one corresponding to the given division
// index.
   matrix.Clear();
}

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

//_____________________________________________________________________________
TGeoPatternCylPhi::TGeoPatternCylPhi()
{
// Default constructor
   fSinCos = 0;
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternCylPhi::TGeoPatternCylPhi(TGeoVolume *vol, Int_t ndivisions)
                  :TGeoPatternFinder(vol, ndivisions)
{
// constructor
// compute step, start, end
   fStart = 0;
   fEnd = 0;
   fStep = 0;
   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));
   }
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternCylPhi::TGeoPatternCylPhi(TGeoVolume *vol, Int_t ndivisions, Double_t step)
                  :TGeoPatternFinder(vol, ndivisions)
{
// constructor
   fStep       = step;
   fSinCos     = new Double_t[2*ndivisions];
   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));
   }
   CreateThreadData(1);
// 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;
   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));
   }
   CreateThreadData(1);
}
//_____________________________________________________________________________
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.
   ThreadData_t& td = GetThreadData();
   td.fCurrent = idiv;
   ((TGeoRotation*)td.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
   ThreadData_t& td = GetThreadData();
   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) {
      td.fNextIndex = ind;
      Double_t dot = point[0]*dir[1]-point[1]*dir[0];
      if (dot>0) td.fNextIndex++;
      else td.fNextIndex--;
      if ((td.fNextIndex<0) || (td.fNextIndex>=fNdivisions)) td.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;
   finder->Reflect();
   return finder;
}

//______________________________________________________________________________
void TGeoPatternCylPhi::SavePrimitive(std::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;
}

//_____________________________________________________________________________
void TGeoPatternCylPhi::Streamer(TBuffer &R__b)
{
   // Stream an object of class TGeoVolume.
   if (R__b.IsReading()) {
      R__b.ReadClassBuffer(TGeoPatternCylPhi::Class(), this);
      if (fNdivisions) {
         fSinCos     = new Double_t[2*fNdivisions];
         for (Int_t idiv = 0; idiv<fNdivisions; idiv++) {
            fSinCos[2*idiv] = TMath::Sin(TMath::DegToRad()*(fStart+0.5*fStep+idiv*fStep));
            fSinCos[2*idiv+1] = TMath::Cos(TMath::DegToRad()*(fStart+0.5*fStep+idiv*fStep));
         }
      }
   } else {
      R__b.WriteClassBuffer(TGeoPatternCylPhi::Class(), this);
   }
}

//______________________________________________________________________________
TGeoMatrix* TGeoPatternCylPhi::CreateMatrix() const
{
   // Return new matrix of type used by  this finder.
   if (!IsReflected()) {
      TGeoRotation *matrix = new TGeoRotation();
      matrix->RegisterYourself();
      return matrix;
   }
   TGeoRotation *rot = new TGeoRotation();
   rot->RegisterYourself();
   rot->ReflectZ(kTRUE);
   rot->ReflectZ(kFALSE);
   return rot;
}

//_____________________________________________________________________________
void TGeoPatternCylPhi::UpdateMatrix(Int_t idiv, TGeoHMatrix &matrix) const
{
// Fills external matrix with the local one corresponding to the given division
// index.
   matrix.Clear();
   matrix.FastRotZ(&fSinCos[2*idiv]);
}

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

//_____________________________________________________________________________
TGeoPatternSphR::TGeoPatternSphR()
{
// Default constructor
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternSphR::TGeoPatternSphR(TGeoVolume *vol, Int_t ndivisions)
                :TGeoPatternFinder(vol, ndivisions)
{
// constructor
// compute step, start, end
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternSphR::TGeoPatternSphR(TGeoVolume *vol, Int_t ndivisions, Double_t step)
                :TGeoPatternFinder(vol, ndivisions)
{
// constructor
   fStep       = step;
   CreateThreadData(1);
// 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;
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternSphR::TGeoPatternSphR(const TGeoPatternSphR& pf) :
  TGeoPatternFinder(pf)
{
   //copy constructor
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternSphR& TGeoPatternSphR::operator=(const TGeoPatternSphR& pf)
{
   //assignment operator
   if(this!=&pf) {
      TGeoPatternFinder::operator=(pf);
      CreateThreadData(1);
   }
   return *this;
}

//_____________________________________________________________________________
TGeoPatternSphR::~TGeoPatternSphR()
{
// Destructor
}
//_____________________________________________________________________________
void TGeoPatternSphR::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   ThreadData_t& td = GetThreadData();
   td.fCurrent = idiv;
}
//_____________________________________________________________________________
TGeoNode *TGeoPatternSphR::FindNode(Double_t * /*point*/, const Double_t * /*dir*/)
{
// find the node containing the query point
   return 0;
}

//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternSphR::MakeCopy(Bool_t)
{
// Make a copy of this finder. Reflect by Z if required.
   TGeoPatternSphR *finder = new TGeoPatternSphR(*this);
   return finder;
}

//______________________________________________________________________________
void TGeoPatternSphR::SavePrimitive(std::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;
}

//______________________________________________________________________________
TGeoMatrix* TGeoPatternSphR::CreateMatrix() const
{
   // Return new matrix of type used by  this finder.
   return gGeoIdentity;
}

//_____________________________________________________________________________
void TGeoPatternSphR::UpdateMatrix(Int_t, TGeoHMatrix &matrix) const
{
// Fills external matrix with the local one corresponding to the given division
// index.
   matrix.Clear();
}

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

//_____________________________________________________________________________
TGeoPatternSphTheta::TGeoPatternSphTheta()
{
// Default constructor
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternSphTheta::TGeoPatternSphTheta(TGeoVolume *vol, Int_t ndivisions)
                    :TGeoPatternFinder(vol, ndivisions)
{
// constructor
// compute step, start, end
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternSphTheta::TGeoPatternSphTheta(TGeoVolume *vol, Int_t ndivisions, Double_t step)
                    :TGeoPatternFinder(vol, ndivisions)
{
// constructor
   fStep       = step;
   CreateThreadData(1);
// 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;
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternSphTheta::TGeoPatternSphTheta(const TGeoPatternSphTheta& pf) :
  TGeoPatternFinder(pf)
{
   //copy constructor
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternSphTheta& TGeoPatternSphTheta::operator=(const TGeoPatternSphTheta& pf)
{
   //assignment operator
   if(this!=&pf) {
      TGeoPatternFinder::operator=(pf);
      CreateThreadData(1);
   }
   return *this;
}
//_____________________________________________________________________________
TGeoPatternSphTheta::~TGeoPatternSphTheta()
{
// Destructor
}
//_____________________________________________________________________________
void TGeoPatternSphTheta::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   ThreadData_t& td = GetThreadData();
   td.fCurrent=idiv;
}
//_____________________________________________________________________________
TGeoNode *TGeoPatternSphTheta::FindNode(Double_t * /*point*/, const Double_t * /*dir*/)
{
// find the node containing the query point
   return 0;
}

//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternSphTheta::MakeCopy(Bool_t)
{
// Make a copy of this finder. Reflect by Z if required.
   TGeoPatternSphTheta *finder = new TGeoPatternSphTheta(*this);
   return finder;
}

//______________________________________________________________________________
void TGeoPatternSphTheta::SavePrimitive(std::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;
}

//______________________________________________________________________________
TGeoMatrix* TGeoPatternSphTheta::CreateMatrix() const
{
   // Return new matrix of type used by  this finder.
   return gGeoIdentity;
}

//_____________________________________________________________________________
void TGeoPatternSphTheta::UpdateMatrix(Int_t, TGeoHMatrix &matrix) const
{
// Fills external matrix with the local one corresponding to the given division
// index.
   matrix.Clear();
}

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

//_____________________________________________________________________________
TGeoPatternSphPhi::TGeoPatternSphPhi()
{
// Default constructor
   fSinCos = 0;
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternSphPhi::TGeoPatternSphPhi(TGeoVolume *vol, Int_t ndivisions)
                  :TGeoPatternFinder(vol, ndivisions)
{
// constructor
// compute step, start, end
   fStart = 0;
   fEnd = 360.;
   fStep = 360./ndivisions;
   CreateSinCos();
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternSphPhi::TGeoPatternSphPhi(TGeoVolume *vol, Int_t ndivisions, Double_t step)
                  :TGeoPatternFinder(vol, ndivisions)
{
// constructor
// compute start, end
   fStep       = step;
   CreateSinCos();
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternSphPhi::TGeoPatternSphPhi(TGeoVolume *vol, Int_t ndivisions, Double_t start, Double_t end)
                  :TGeoPatternFinder(vol, ndivisions)
{
// constructor
// compute step
   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;
   CreateSinCos();
   CreateThreadData(1);
}

//_____________________________________________________________________________
TGeoPatternSphPhi::~TGeoPatternSphPhi()
{
// Destructor
   delete [] fSinCos;
}

//_____________________________________________________________________________
Double_t *TGeoPatternSphPhi::CreateSinCos()
{
// Create the sincos table if it does not exist
   fSinCos     = new Double_t[2*fNdivisions];
   for (Int_t idiv = 0; idiv<fNdivisions; idiv++) {
      fSinCos[2*idiv] = TMath::Sin(TMath::DegToRad()*(fStart+0.5*fStep+idiv*fStep));
      fSinCos[2*idiv+1] = TMath::Cos(TMath::DegToRad()*(fStart+0.5*fStep+idiv*fStep));
   }
   return fSinCos;
}

//_____________________________________________________________________________
void TGeoPatternSphPhi::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   ThreadData_t& td = GetThreadData();
   td.fCurrent = idiv;
   if (!fSinCos) CreateSinCos();
   ((TGeoRotation*)td.fMatrix)->FastRotZ(&fSinCos[2*idiv]);
}

//_____________________________________________________________________________
Bool_t TGeoPatternSphPhi::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 *TGeoPatternSphPhi::FindNode(Double_t * point, const Double_t * dir)
{
// find the node containing the query point
   ThreadData_t& td = GetThreadData();
   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) {
      td.fNextIndex = ind;
      Double_t dot = point[0]*dir[1]-point[1]*dir[0];
      if (dot>0) td.fNextIndex++;
      else td.fNextIndex--;
      if ((td.fNextIndex<0) || (td.fNextIndex>=fNdivisions)) td.fNextIndex = -1;
   }
   if ((ind<0) || (ind>=fNdivisions)) return node;
   node = GetNodeOffset(ind);
   cd(ind);
   return node;
}
//______________________________________________________________________________
TGeoPatternFinder *TGeoPatternSphPhi::MakeCopy(Bool_t reflect)
{
// Make a copy of this finder. Reflect by Z if required.
   TGeoPatternSphPhi *finder = new TGeoPatternSphPhi(fVolume, fNdivisions, fStart, fEnd);
      if (!reflect) return finder;
   finder->Reflect();
   return finder;
}

//______________________________________________________________________________
void TGeoPatternSphPhi::SavePrimitive(std::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;
}
//______________________________________________________________________________
TGeoMatrix* TGeoPatternSphPhi::CreateMatrix() const
{
// Return new matrix of type used by  this finder.
   if (!IsReflected()) {
      TGeoRotation *matrix = new TGeoRotation();
      matrix->RegisterYourself();
      return matrix;
   }
   TGeoRotation *rot = new TGeoRotation();
   rot->RegisterYourself();
   rot->ReflectZ(kTRUE);
   rot->ReflectZ(kFALSE);
   return rot;
}
//_____________________________________________________________________________
void TGeoPatternSphPhi::UpdateMatrix(Int_t idiv, TGeoHMatrix &matrix) const
{
// Fills external matrix with the local one corresponding to the given division
// index.
   if (!fSinCos) ((TGeoPatternSphPhi*)this)->CreateSinCos();
   matrix.Clear();
   matrix.FastRotZ(&fSinCos[2*idiv]);
}

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

//_____________________________________________________________________________
TGeoPatternHoneycomb::TGeoPatternHoneycomb()
{
// Default constructor
   fNrows       = 0;
   fAxisOnRows  = 0;
   fNdivisions  = 0;
   fStart       = 0;
   CreateThreadData(1);
}
//_____________________________________________________________________________
TGeoPatternHoneycomb::TGeoPatternHoneycomb(TGeoVolume *vol, Int_t nrows)
                     :TGeoPatternFinder(vol, nrows)
{
// Default constructor
   fNrows = nrows;
   fAxisOnRows  = 0;
   fNdivisions  = 0;
   fStart       = 0;
   CreateThreadData(1);
// compute everything else
}
//_____________________________________________________________________________
TGeoPatternHoneycomb::TGeoPatternHoneycomb(const TGeoPatternHoneycomb& pfh) :
  TGeoPatternFinder(pfh),
  fNrows(pfh.fNrows),
  fAxisOnRows(pfh.fAxisOnRows),
  fNdivisions(pfh.fNdivisions),
  fStart(pfh.fStart)
{
   //copy constructor
   CreateThreadData(1);
}

//_____________________________________________________________________________
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;
      CreateThreadData(1);
   }
   return *this;
}
//_____________________________________________________________________________
TGeoPatternHoneycomb::~TGeoPatternHoneycomb()
{
// destructor
}
//_____________________________________________________________________________
void TGeoPatternHoneycomb::cd(Int_t idiv)
{
// Update current division index and global matrix to point to a given slice.
   ThreadData_t& td = GetThreadData();
   td.fCurrent=idiv;
}
//_____________________________________________________________________________
TGeoNode *TGeoPatternHoneycomb::FindNode(Double_t * /*point*/, const Double_t * /*dir*/)
{
// find the node containing the query point
   return 0;
}

//______________________________________________________________________________
TGeoMatrix* TGeoPatternHoneycomb::CreateMatrix() const
{
   // Return new matrix of type used by  this finder.
   return gGeoIdentity;
}

//_____________________________________________________________________________
void TGeoPatternHoneycomb::UpdateMatrix(Int_t, TGeoHMatrix &matrix) const
{
// Fills external matrix with the local one corresponding to the given division
// index.
   matrix.Clear();
}
 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
 TGeoPatternFinder.cxx:1527
 TGeoPatternFinder.cxx:1528
 TGeoPatternFinder.cxx:1529
 TGeoPatternFinder.cxx:1530
 TGeoPatternFinder.cxx:1531
 TGeoPatternFinder.cxx:1532
 TGeoPatternFinder.cxx:1533
 TGeoPatternFinder.cxx:1534
 TGeoPatternFinder.cxx:1535
 TGeoPatternFinder.cxx:1536
 TGeoPatternFinder.cxx:1537
 TGeoPatternFinder.cxx:1538
 TGeoPatternFinder.cxx:1539
 TGeoPatternFinder.cxx:1540
 TGeoPatternFinder.cxx:1541
 TGeoPatternFinder.cxx:1542
 TGeoPatternFinder.cxx:1543
 TGeoPatternFinder.cxx:1544
 TGeoPatternFinder.cxx:1545
 TGeoPatternFinder.cxx:1546
 TGeoPatternFinder.cxx:1547
 TGeoPatternFinder.cxx:1548
 TGeoPatternFinder.cxx:1549
 TGeoPatternFinder.cxx:1550
 TGeoPatternFinder.cxx:1551
 TGeoPatternFinder.cxx:1552
 TGeoPatternFinder.cxx:1553
 TGeoPatternFinder.cxx:1554
 TGeoPatternFinder.cxx:1555
 TGeoPatternFinder.cxx:1556
 TGeoPatternFinder.cxx:1557
 TGeoPatternFinder.cxx:1558
 TGeoPatternFinder.cxx:1559
 TGeoPatternFinder.cxx:1560
 TGeoPatternFinder.cxx:1561
 TGeoPatternFinder.cxx:1562
 TGeoPatternFinder.cxx:1563
 TGeoPatternFinder.cxx:1564
 TGeoPatternFinder.cxx:1565
 TGeoPatternFinder.cxx:1566
 TGeoPatternFinder.cxx:1567
 TGeoPatternFinder.cxx:1568
 TGeoPatternFinder.cxx:1569
 TGeoPatternFinder.cxx:1570
 TGeoPatternFinder.cxx:1571
 TGeoPatternFinder.cxx:1572
 TGeoPatternFinder.cxx:1573
 TGeoPatternFinder.cxx:1574
 TGeoPatternFinder.cxx:1575
 TGeoPatternFinder.cxx:1576
 TGeoPatternFinder.cxx:1577
 TGeoPatternFinder.cxx:1578
 TGeoPatternFinder.cxx:1579
 TGeoPatternFinder.cxx:1580
 TGeoPatternFinder.cxx:1581
 TGeoPatternFinder.cxx:1582
 TGeoPatternFinder.cxx:1583
 TGeoPatternFinder.cxx:1584
 TGeoPatternFinder.cxx:1585
 TGeoPatternFinder.cxx:1586
 TGeoPatternFinder.cxx:1587
 TGeoPatternFinder.cxx:1588
 TGeoPatternFinder.cxx:1589
 TGeoPatternFinder.cxx:1590
 TGeoPatternFinder.cxx:1591
 TGeoPatternFinder.cxx:1592
 TGeoPatternFinder.cxx:1593
 TGeoPatternFinder.cxx:1594
 TGeoPatternFinder.cxx:1595
 TGeoPatternFinder.cxx:1596
 TGeoPatternFinder.cxx:1597
 TGeoPatternFinder.cxx:1598
 TGeoPatternFinder.cxx:1599
 TGeoPatternFinder.cxx:1600
 TGeoPatternFinder.cxx:1601
 TGeoPatternFinder.cxx:1602
 TGeoPatternFinder.cxx:1603
 TGeoPatternFinder.cxx:1604
 TGeoPatternFinder.cxx:1605
 TGeoPatternFinder.cxx:1606
 TGeoPatternFinder.cxx:1607
 TGeoPatternFinder.cxx:1608
 TGeoPatternFinder.cxx:1609
 TGeoPatternFinder.cxx:1610
 TGeoPatternFinder.cxx:1611
 TGeoPatternFinder.cxx:1612
 TGeoPatternFinder.cxx:1613
 TGeoPatternFinder.cxx:1614
 TGeoPatternFinder.cxx:1615
 TGeoPatternFinder.cxx:1616
 TGeoPatternFinder.cxx:1617
 TGeoPatternFinder.cxx:1618
 TGeoPatternFinder.cxx:1619
 TGeoPatternFinder.cxx:1620
 TGeoPatternFinder.cxx:1621
 TGeoPatternFinder.cxx:1622
 TGeoPatternFinder.cxx:1623
 TGeoPatternFinder.cxx:1624
 TGeoPatternFinder.cxx:1625
 TGeoPatternFinder.cxx:1626
 TGeoPatternFinder.cxx:1627
 TGeoPatternFinder.cxx:1628
 TGeoPatternFinder.cxx:1629
 TGeoPatternFinder.cxx:1630
 TGeoPatternFinder.cxx:1631
 TGeoPatternFinder.cxx:1632
 TGeoPatternFinder.cxx:1633
 TGeoPatternFinder.cxx:1634
 TGeoPatternFinder.cxx:1635
 TGeoPatternFinder.cxx:1636
 TGeoPatternFinder.cxx:1637
 TGeoPatternFinder.cxx:1638
 TGeoPatternFinder.cxx:1639
 TGeoPatternFinder.cxx:1640
 TGeoPatternFinder.cxx:1641
 TGeoPatternFinder.cxx:1642
 TGeoPatternFinder.cxx:1643
 TGeoPatternFinder.cxx:1644
 TGeoPatternFinder.cxx:1645
 TGeoPatternFinder.cxx:1646
 TGeoPatternFinder.cxx:1647
 TGeoPatternFinder.cxx:1648
 TGeoPatternFinder.cxx:1649
 TGeoPatternFinder.cxx:1650
 TGeoPatternFinder.cxx:1651
 TGeoPatternFinder.cxx:1652
 TGeoPatternFinder.cxx:1653
 TGeoPatternFinder.cxx:1654
 TGeoPatternFinder.cxx:1655
 TGeoPatternFinder.cxx:1656
 TGeoPatternFinder.cxx:1657
 TGeoPatternFinder.cxx:1658
 TGeoPatternFinder.cxx:1659
 TGeoPatternFinder.cxx:1660
 TGeoPatternFinder.cxx:1661
 TGeoPatternFinder.cxx:1662
 TGeoPatternFinder.cxx:1663
 TGeoPatternFinder.cxx:1664
 TGeoPatternFinder.cxx:1665
 TGeoPatternFinder.cxx:1666
 TGeoPatternFinder.cxx:1667
 TGeoPatternFinder.cxx:1668
 TGeoPatternFinder.cxx:1669
 TGeoPatternFinder.cxx:1670
 TGeoPatternFinder.cxx:1671
 TGeoPatternFinder.cxx:1672
 TGeoPatternFinder.cxx:1673
 TGeoPatternFinder.cxx:1674
 TGeoPatternFinder.cxx:1675
 TGeoPatternFinder.cxx:1676
 TGeoPatternFinder.cxx:1677
 TGeoPatternFinder.cxx:1678
 TGeoPatternFinder.cxx:1679
 TGeoPatternFinder.cxx:1680
 TGeoPatternFinder.cxx:1681
 TGeoPatternFinder.cxx:1682
 TGeoPatternFinder.cxx:1683
 TGeoPatternFinder.cxx:1684
 TGeoPatternFinder.cxx:1685
 TGeoPatternFinder.cxx:1686
 TGeoPatternFinder.cxx:1687
 TGeoPatternFinder.cxx:1688
 TGeoPatternFinder.cxx:1689
 TGeoPatternFinder.cxx:1690
 TGeoPatternFinder.cxx:1691
 TGeoPatternFinder.cxx:1692
 TGeoPatternFinder.cxx:1693
 TGeoPatternFinder.cxx:1694
 TGeoPatternFinder.cxx:1695
 TGeoPatternFinder.cxx:1696
 TGeoPatternFinder.cxx:1697
 TGeoPatternFinder.cxx:1698
 TGeoPatternFinder.cxx:1699
 TGeoPatternFinder.cxx:1700
 TGeoPatternFinder.cxx:1701
 TGeoPatternFinder.cxx:1702
 TGeoPatternFinder.cxx:1703
 TGeoPatternFinder.cxx:1704
 TGeoPatternFinder.cxx:1705
 TGeoPatternFinder.cxx:1706
 TGeoPatternFinder.cxx:1707
 TGeoPatternFinder.cxx:1708
 TGeoPatternFinder.cxx:1709
 TGeoPatternFinder.cxx:1710
 TGeoPatternFinder.cxx:1711
 TGeoPatternFinder.cxx:1712
 TGeoPatternFinder.cxx:1713
 TGeoPatternFinder.cxx:1714
 TGeoPatternFinder.cxx:1715
 TGeoPatternFinder.cxx:1716
 TGeoPatternFinder.cxx:1717
 TGeoPatternFinder.cxx:1718
 TGeoPatternFinder.cxx:1719
 TGeoPatternFinder.cxx:1720
 TGeoPatternFinder.cxx:1721
 TGeoPatternFinder.cxx:1722
 TGeoPatternFinder.cxx:1723
 TGeoPatternFinder.cxx:1724
 TGeoPatternFinder.cxx:1725
 TGeoPatternFinder.cxx:1726
 TGeoPatternFinder.cxx:1727
 TGeoPatternFinder.cxx:1728
 TGeoPatternFinder.cxx:1729
 TGeoPatternFinder.cxx:1730
 TGeoPatternFinder.cxx:1731
 TGeoPatternFinder.cxx:1732
 TGeoPatternFinder.cxx:1733
 TGeoPatternFinder.cxx:1734
 TGeoPatternFinder.cxx:1735
 TGeoPatternFinder.cxx:1736
 TGeoPatternFinder.cxx:1737
 TGeoPatternFinder.cxx:1738
 TGeoPatternFinder.cxx:1739
 TGeoPatternFinder.cxx:1740
 TGeoPatternFinder.cxx:1741
 TGeoPatternFinder.cxx:1742
 TGeoPatternFinder.cxx:1743
 TGeoPatternFinder.cxx:1744
 TGeoPatternFinder.cxx:1745
 TGeoPatternFinder.cxx:1746
 TGeoPatternFinder.cxx:1747
 TGeoPatternFinder.cxx:1748
 TGeoPatternFinder.cxx:1749
 TGeoPatternFinder.cxx:1750
 TGeoPatternFinder.cxx:1751
 TGeoPatternFinder.cxx:1752
 TGeoPatternFinder.cxx:1753
 TGeoPatternFinder.cxx:1754
 TGeoPatternFinder.cxx:1755
 TGeoPatternFinder.cxx:1756
 TGeoPatternFinder.cxx:1757
 TGeoPatternFinder.cxx:1758
 TGeoPatternFinder.cxx:1759
 TGeoPatternFinder.cxx:1760
 TGeoPatternFinder.cxx:1761
 TGeoPatternFinder.cxx:1762
 TGeoPatternFinder.cxx:1763
 TGeoPatternFinder.cxx:1764
 TGeoPatternFinder.cxx:1765
 TGeoPatternFinder.cxx:1766
 TGeoPatternFinder.cxx:1767
 TGeoPatternFinder.cxx:1768
 TGeoPatternFinder.cxx:1769
 TGeoPatternFinder.cxx:1770
 TGeoPatternFinder.cxx:1771
 TGeoPatternFinder.cxx:1772
 TGeoPatternFinder.cxx:1773
 TGeoPatternFinder.cxx:1774
 TGeoPatternFinder.cxx:1775
 TGeoPatternFinder.cxx:1776
 TGeoPatternFinder.cxx:1777
 TGeoPatternFinder.cxx:1778
 TGeoPatternFinder.cxx:1779
 TGeoPatternFinder.cxx:1780
 TGeoPatternFinder.cxx:1781
 TGeoPatternFinder.cxx:1782
 TGeoPatternFinder.cxx:1783
 TGeoPatternFinder.cxx:1784
 TGeoPatternFinder.cxx:1785
 TGeoPatternFinder.cxx:1786
 TGeoPatternFinder.cxx:1787
 TGeoPatternFinder.cxx:1788
 TGeoPatternFinder.cxx:1789
 TGeoPatternFinder.cxx:1790
 TGeoPatternFinder.cxx:1791
 TGeoPatternFinder.cxx:1792
 TGeoPatternFinder.cxx:1793
 TGeoPatternFinder.cxx:1794
 TGeoPatternFinder.cxx:1795
 TGeoPatternFinder.cxx:1796
 TGeoPatternFinder.cxx:1797
 TGeoPatternFinder.cxx:1798
 TGeoPatternFinder.cxx:1799
 TGeoPatternFinder.cxx:1800
 TGeoPatternFinder.cxx:1801
 TGeoPatternFinder.cxx:1802
 TGeoPatternFinder.cxx:1803
 TGeoPatternFinder.cxx:1804
 TGeoPatternFinder.cxx:1805
 TGeoPatternFinder.cxx:1806
 TGeoPatternFinder.cxx:1807
 TGeoPatternFinder.cxx:1808
 TGeoPatternFinder.cxx:1809
 TGeoPatternFinder.cxx:1810
 TGeoPatternFinder.cxx:1811
 TGeoPatternFinder.cxx:1812
 TGeoPatternFinder.cxx:1813
 TGeoPatternFinder.cxx:1814
 TGeoPatternFinder.cxx:1815
 TGeoPatternFinder.cxx:1816
 TGeoPatternFinder.cxx:1817
 TGeoPatternFinder.cxx:1818
 TGeoPatternFinder.cxx:1819
 TGeoPatternFinder.cxx:1820
 TGeoPatternFinder.cxx:1821
 TGeoPatternFinder.cxx:1822
 TGeoPatternFinder.cxx:1823
 TGeoPatternFinder.cxx:1824
 TGeoPatternFinder.cxx:1825
 TGeoPatternFinder.cxx:1826
 TGeoPatternFinder.cxx:1827
 TGeoPatternFinder.cxx:1828
 TGeoPatternFinder.cxx:1829
 TGeoPatternFinder.cxx:1830
 TGeoPatternFinder.cxx:1831
 TGeoPatternFinder.cxx:1832
 TGeoPatternFinder.cxx:1833
 TGeoPatternFinder.cxx:1834
 TGeoPatternFinder.cxx:1835
 TGeoPatternFinder.cxx:1836
 TGeoPatternFinder.cxx:1837
 TGeoPatternFinder.cxx:1838
 TGeoPatternFinder.cxx:1839
 TGeoPatternFinder.cxx:1840
 TGeoPatternFinder.cxx:1841
 TGeoPatternFinder.cxx:1842
 TGeoPatternFinder.cxx:1843
 TGeoPatternFinder.cxx:1844
 TGeoPatternFinder.cxx:1845
 TGeoPatternFinder.cxx:1846
 TGeoPatternFinder.cxx:1847
 TGeoPatternFinder.cxx:1848
 TGeoPatternFinder.cxx:1849
 TGeoPatternFinder.cxx:1850
 TGeoPatternFinder.cxx:1851
 TGeoPatternFinder.cxx:1852
 TGeoPatternFinder.cxx:1853
 TGeoPatternFinder.cxx:1854
 TGeoPatternFinder.cxx:1855
 TGeoPatternFinder.cxx:1856
 TGeoPatternFinder.cxx:1857
 TGeoPatternFinder.cxx:1858
 TGeoPatternFinder.cxx:1859
 TGeoPatternFinder.cxx:1860
 TGeoPatternFinder.cxx:1861
 TGeoPatternFinder.cxx:1862
 TGeoPatternFinder.cxx:1863
 TGeoPatternFinder.cxx:1864
 TGeoPatternFinder.cxx:1865
 TGeoPatternFinder.cxx:1866
 TGeoPatternFinder.cxx:1867
 TGeoPatternFinder.cxx:1868
 TGeoPatternFinder.cxx:1869
 TGeoPatternFinder.cxx:1870
 TGeoPatternFinder.cxx:1871
 TGeoPatternFinder.cxx:1872
 TGeoPatternFinder.cxx:1873
 TGeoPatternFinder.cxx:1874
 TGeoPatternFinder.cxx:1875
 TGeoPatternFinder.cxx:1876
 TGeoPatternFinder.cxx:1877
 TGeoPatternFinder.cxx:1878
 TGeoPatternFinder.cxx:1879
 TGeoPatternFinder.cxx:1880
 TGeoPatternFinder.cxx:1881
 TGeoPatternFinder.cxx:1882
 TGeoPatternFinder.cxx:1883
 TGeoPatternFinder.cxx:1884
 TGeoPatternFinder.cxx:1885
 TGeoPatternFinder.cxx:1886
 TGeoPatternFinder.cxx:1887
 TGeoPatternFinder.cxx:1888
 TGeoPatternFinder.cxx:1889
 TGeoPatternFinder.cxx:1890
 TGeoPatternFinder.cxx:1891
 TGeoPatternFinder.cxx:1892
 TGeoPatternFinder.cxx:1893
 TGeoPatternFinder.cxx:1894
 TGeoPatternFinder.cxx:1895
 TGeoPatternFinder.cxx:1896
 TGeoPatternFinder.cxx:1897
 TGeoPatternFinder.cxx:1898
 TGeoPatternFinder.cxx:1899
 TGeoPatternFinder.cxx:1900
 TGeoPatternFinder.cxx:1901
 TGeoPatternFinder.cxx:1902
 TGeoPatternFinder.cxx:1903
 TGeoPatternFinder.cxx:1904
 TGeoPatternFinder.cxx:1905
 TGeoPatternFinder.cxx:1906
 TGeoPatternFinder.cxx:1907
 TGeoPatternFinder.cxx:1908
 TGeoPatternFinder.cxx:1909
 TGeoPatternFinder.cxx:1910
 TGeoPatternFinder.cxx:1911
 TGeoPatternFinder.cxx:1912
 TGeoPatternFinder.cxx:1913
 TGeoPatternFinder.cxx:1914
 TGeoPatternFinder.cxx:1915
 TGeoPatternFinder.cxx:1916
 TGeoPatternFinder.cxx:1917
 TGeoPatternFinder.cxx:1918
 TGeoPatternFinder.cxx:1919
 TGeoPatternFinder.cxx:1920
 TGeoPatternFinder.cxx:1921
 TGeoPatternFinder.cxx:1922
 TGeoPatternFinder.cxx:1923
 TGeoPatternFinder.cxx:1924
 TGeoPatternFinder.cxx:1925
 TGeoPatternFinder.cxx:1926
 TGeoPatternFinder.cxx:1927
 TGeoPatternFinder.cxx:1928
 TGeoPatternFinder.cxx:1929
 TGeoPatternFinder.cxx:1930
 TGeoPatternFinder.cxx:1931
 TGeoPatternFinder.cxx:1932
 TGeoPatternFinder.cxx:1933
 TGeoPatternFinder.cxx:1934
 TGeoPatternFinder.cxx:1935
 TGeoPatternFinder.cxx:1936
 TGeoPatternFinder.cxx:1937
 TGeoPatternFinder.cxx:1938
 TGeoPatternFinder.cxx:1939
 TGeoPatternFinder.cxx:1940
 TGeoPatternFinder.cxx:1941
 TGeoPatternFinder.cxx:1942
 TGeoPatternFinder.cxx:1943
 TGeoPatternFinder.cxx:1944
 TGeoPatternFinder.cxx:1945
 TGeoPatternFinder.cxx:1946
 TGeoPatternFinder.cxx:1947
 TGeoPatternFinder.cxx:1948
 TGeoPatternFinder.cxx:1949
 TGeoPatternFinder.cxx:1950
 TGeoPatternFinder.cxx:1951
 TGeoPatternFinder.cxx:1952
 TGeoPatternFinder.cxx:1953
 TGeoPatternFinder.cxx:1954
 TGeoPatternFinder.cxx:1955
 TGeoPatternFinder.cxx:1956
 TGeoPatternFinder.cxx:1957
 TGeoPatternFinder.cxx:1958
 TGeoPatternFinder.cxx:1959
 TGeoPatternFinder.cxx:1960
 TGeoPatternFinder.cxx:1961
 TGeoPatternFinder.cxx:1962
 TGeoPatternFinder.cxx:1963
 TGeoPatternFinder.cxx:1964
 TGeoPatternFinder.cxx:1965
 TGeoPatternFinder.cxx:1966
 TGeoPatternFinder.cxx:1967
 TGeoPatternFinder.cxx:1968
 TGeoPatternFinder.cxx:1969
 TGeoPatternFinder.cxx:1970
 TGeoPatternFinder.cxx:1971
 TGeoPatternFinder.cxx:1972
 TGeoPatternFinder.cxx:1973
 TGeoPatternFinder.cxx:1974
 TGeoPatternFinder.cxx:1975
 TGeoPatternFinder.cxx:1976
 TGeoPatternFinder.cxx:1977
 TGeoPatternFinder.cxx:1978
 TGeoPatternFinder.cxx:1979
 TGeoPatternFinder.cxx:1980
 TGeoPatternFinder.cxx:1981
 TGeoPatternFinder.cxx:1982
 TGeoPatternFinder.cxx:1983
 TGeoPatternFinder.cxx:1984
 TGeoPatternFinder.cxx:1985
 TGeoPatternFinder.cxx:1986
 TGeoPatternFinder.cxx:1987
 TGeoPatternFinder.cxx:1988
 TGeoPatternFinder.cxx:1989
 TGeoPatternFinder.cxx:1990
 TGeoPatternFinder.cxx:1991
 TGeoPatternFinder.cxx:1992
 TGeoPatternFinder.cxx:1993
 TGeoPatternFinder.cxx:1994
 TGeoPatternFinder.cxx:1995
 TGeoPatternFinder.cxx:1996
 TGeoPatternFinder.cxx:1997
 TGeoPatternFinder.cxx:1998
 TGeoPatternFinder.cxx:1999
 TGeoPatternFinder.cxx:2000
 TGeoPatternFinder.cxx:2001
 TGeoPatternFinder.cxx:2002
 TGeoPatternFinder.cxx:2003
 TGeoPatternFinder.cxx:2004
 TGeoPatternFinder.cxx:2005
 TGeoPatternFinder.cxx:2006
 TGeoPatternFinder.cxx:2007
 TGeoPatternFinder.cxx:2008
 TGeoPatternFinder.cxx:2009
 TGeoPatternFinder.cxx:2010
 TGeoPatternFinder.cxx:2011
 TGeoPatternFinder.cxx:2012
 TGeoPatternFinder.cxx:2013
 TGeoPatternFinder.cxx:2014
 TGeoPatternFinder.cxx:2015
 TGeoPatternFinder.cxx:2016
 TGeoPatternFinder.cxx:2017
 TGeoPatternFinder.cxx:2018
 TGeoPatternFinder.cxx:2019
 TGeoPatternFinder.cxx:2020
 TGeoPatternFinder.cxx:2021
 TGeoPatternFinder.cxx:2022
 TGeoPatternFinder.cxx:2023
 TGeoPatternFinder.cxx:2024
 TGeoPatternFinder.cxx:2025
 TGeoPatternFinder.cxx:2026
 TGeoPatternFinder.cxx:2027
 TGeoPatternFinder.cxx:2028
 TGeoPatternFinder.cxx:2029
 TGeoPatternFinder.cxx:2030
 TGeoPatternFinder.cxx:2031
 TGeoPatternFinder.cxx:2032
 TGeoPatternFinder.cxx:2033
 TGeoPatternFinder.cxx:2034
 TGeoPatternFinder.cxx:2035
 TGeoPatternFinder.cxx:2036
 TGeoPatternFinder.cxx:2037
 TGeoPatternFinder.cxx:2038
 TGeoPatternFinder.cxx:2039
 TGeoPatternFinder.cxx:2040
 TGeoPatternFinder.cxx:2041
 TGeoPatternFinder.cxx:2042
 TGeoPatternFinder.cxx:2043
 TGeoPatternFinder.cxx:2044
 TGeoPatternFinder.cxx:2045
 TGeoPatternFinder.cxx:2046
 TGeoPatternFinder.cxx:2047
 TGeoPatternFinder.cxx:2048
 TGeoPatternFinder.cxx:2049
 TGeoPatternFinder.cxx:2050
 TGeoPatternFinder.cxx:2051
 TGeoPatternFinder.cxx:2052
 TGeoPatternFinder.cxx:2053
 TGeoPatternFinder.cxx:2054
 TGeoPatternFinder.cxx:2055
 TGeoPatternFinder.cxx:2056
 TGeoPatternFinder.cxx:2057
 TGeoPatternFinder.cxx:2058
 TGeoPatternFinder.cxx:2059
 TGeoPatternFinder.cxx:2060
 TGeoPatternFinder.cxx:2061
 TGeoPatternFinder.cxx:2062
 TGeoPatternFinder.cxx:2063
 TGeoPatternFinder.cxx:2064
 TGeoPatternFinder.cxx:2065
 TGeoPatternFinder.cxx:2066
 TGeoPatternFinder.cxx:2067
 TGeoPatternFinder.cxx:2068
 TGeoPatternFinder.cxx:2069
 TGeoPatternFinder.cxx:2070
 TGeoPatternFinder.cxx:2071
 TGeoPatternFinder.cxx:2072
 TGeoPatternFinder.cxx:2073
 TGeoPatternFinder.cxx:2074
 TGeoPatternFinder.cxx:2075
 TGeoPatternFinder.cxx:2076
 TGeoPatternFinder.cxx:2077
 TGeoPatternFinder.cxx:2078
 TGeoPatternFinder.cxx:2079
 TGeoPatternFinder.cxx:2080
 TGeoPatternFinder.cxx:2081
 TGeoPatternFinder.cxx:2082
 TGeoPatternFinder.cxx:2083
 TGeoPatternFinder.cxx:2084
 TGeoPatternFinder.cxx:2085
 TGeoPatternFinder.cxx:2086
 TGeoPatternFinder.cxx:2087
 TGeoPatternFinder.cxx:2088
 TGeoPatternFinder.cxx:2089
 TGeoPatternFinder.cxx:2090
 TGeoPatternFinder.cxx:2091
 TGeoPatternFinder.cxx:2092
 TGeoPatternFinder.cxx:2093
 TGeoPatternFinder.cxx:2094
 TGeoPatternFinder.cxx:2095
 TGeoPatternFinder.cxx:2096
 TGeoPatternFinder.cxx:2097
 TGeoPatternFinder.cxx:2098
 TGeoPatternFinder.cxx:2099
 TGeoPatternFinder.cxx:2100
 TGeoPatternFinder.cxx:2101
 TGeoPatternFinder.cxx:2102
 TGeoPatternFinder.cxx:2103
 TGeoPatternFinder.cxx:2104
 TGeoPatternFinder.cxx:2105
 TGeoPatternFinder.cxx:2106
 TGeoPatternFinder.cxx:2107
 TGeoPatternFinder.cxx:2108
 TGeoPatternFinder.cxx:2109
 TGeoPatternFinder.cxx:2110
 TGeoPatternFinder.cxx:2111
 TGeoPatternFinder.cxx:2112
 TGeoPatternFinder.cxx:2113
 TGeoPatternFinder.cxx:2114
 TGeoPatternFinder.cxx:2115
 TGeoPatternFinder.cxx:2116
 TGeoPatternFinder.cxx:2117
 TGeoPatternFinder.cxx:2118
 TGeoPatternFinder.cxx:2119
 TGeoPatternFinder.cxx:2120
 TGeoPatternFinder.cxx:2121
 TGeoPatternFinder.cxx:2122
 TGeoPatternFinder.cxx:2123
 TGeoPatternFinder.cxx:2124
 TGeoPatternFinder.cxx:2125
 TGeoPatternFinder.cxx:2126
 TGeoPatternFinder.cxx:2127
 TGeoPatternFinder.cxx:2128
 TGeoPatternFinder.cxx:2129
 TGeoPatternFinder.cxx:2130
 TGeoPatternFinder.cxx:2131
 TGeoPatternFinder.cxx:2132
 TGeoPatternFinder.cxx:2133
 TGeoPatternFinder.cxx:2134
 TGeoPatternFinder.cxx:2135
 TGeoPatternFinder.cxx:2136
 TGeoPatternFinder.cxx:2137
 TGeoPatternFinder.cxx:2138
 TGeoPatternFinder.cxx:2139
 TGeoPatternFinder.cxx:2140
 TGeoPatternFinder.cxx:2141
 TGeoPatternFinder.cxx:2142
 TGeoPatternFinder.cxx:2143
 TGeoPatternFinder.cxx:2144
 TGeoPatternFinder.cxx:2145
 TGeoPatternFinder.cxx:2146
 TGeoPatternFinder.cxx:2147
 TGeoPatternFinder.cxx:2148
 TGeoPatternFinder.cxx:2149
 TGeoPatternFinder.cxx:2150
 TGeoPatternFinder.cxx:2151
 TGeoPatternFinder.cxx:2152
 TGeoPatternFinder.cxx:2153
 TGeoPatternFinder.cxx:2154
 TGeoPatternFinder.cxx:2155
 TGeoPatternFinder.cxx:2156
 TGeoPatternFinder.cxx:2157
 TGeoPatternFinder.cxx:2158
 TGeoPatternFinder.cxx:2159
 TGeoPatternFinder.cxx:2160
 TGeoPatternFinder.cxx:2161
 TGeoPatternFinder.cxx:2162
 TGeoPatternFinder.cxx:2163
 TGeoPatternFinder.cxx:2164
 TGeoPatternFinder.cxx:2165
 TGeoPatternFinder.cxx:2166
 TGeoPatternFinder.cxx:2167
 TGeoPatternFinder.cxx:2168
 TGeoPatternFinder.cxx:2169
 TGeoPatternFinder.cxx:2170
 TGeoPatternFinder.cxx:2171
 TGeoPatternFinder.cxx:2172
 TGeoPatternFinder.cxx:2173
 TGeoPatternFinder.cxx:2174
 TGeoPatternFinder.cxx:2175
 TGeoPatternFinder.cxx:2176
 TGeoPatternFinder.cxx:2177
 TGeoPatternFinder.cxx:2178
 TGeoPatternFinder.cxx:2179
 TGeoPatternFinder.cxx:2180
 TGeoPatternFinder.cxx:2181
 TGeoPatternFinder.cxx:2182
 TGeoPatternFinder.cxx:2183
 TGeoPatternFinder.cxx:2184
 TGeoPatternFinder.cxx:2185
 TGeoPatternFinder.cxx:2186
 TGeoPatternFinder.cxx:2187
 TGeoPatternFinder.cxx:2188
 TGeoPatternFinder.cxx:2189
 TGeoPatternFinder.cxx:2190