// @(#)root/geom:$Id$
// Author: Mihaela Gheata   30/05/07

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//_____________________________________________________________________________
// TGeoBuilder
// ============
//
//   Utility class for creating geometry objects.These will be associated
//   with the current selected geometry manager object:
//
//      TGeoBuilder::Instance()->SetGeometry(gGeoManager);
//
//   The geometry builder is a singleton that may be used to build one or more
//   geometries.
//
//_____________________________________________________________________________

#include "TList.h"
#include "TObjArray.h"

#include "TGeoManager.h"
#include "TGeoElement.h"
#include "TGeoMaterial.h"
#include "TGeoMedium.h"
#include "TGeoMatrix.h"
#include "TGeoPara.h"
#include "TGeoParaboloid.h"
#include "TGeoTube.h"
#include "TGeoEltu.h"
#include "TGeoHype.h"
#include "TGeoCone.h"
#include "TGeoSphere.h"
#include "TGeoArb8.h"
#include "TGeoPgon.h"
#include "TGeoTrd1.h"
#include "TGeoTrd2.h"
#include "TGeoTorus.h"
#include "TGeoXtru.h"
#include "TGeoNode.h"
#include "TGeoVolume.h"

#include "TGeoBuilder.h"

ClassImp(TGeoBuilder)

TGeoBuilder *TGeoBuilder::fgInstance = NULL;

//_____________________________________________________________________________
TGeoBuilder::TGeoBuilder()
            :fGeometry(NULL)
{
// Default constructor.
   fgInstance = this;
}

//_____________________________________________________________________________
TGeoBuilder::TGeoBuilder(const TGeoBuilder& other)
            :TObject(other)
{
// Copy constructor.
   Error("copy constructor","copying not allowed for TGeoBuilder");
}

//_____________________________________________________________________________
TGeoBuilder::~TGeoBuilder()
{
// Destructor.
   fgInstance = NULL;
}

//_____________________________________________________________________________
TGeoBuilder &TGeoBuilder::operator=(const TGeoBuilder&)
{
// Assignment.
   Error("Assignment","assignment not allowed for TGeoBuilder");
   return *this;
}

//_____________________________________________________________________________
TGeoBuilder *TGeoBuilder::Instance(TGeoManager *geom)
{
// Return pointer to singleton.
   if (!geom) {
      printf("ERROR: Cannot create geometry builder with NULL geometry\n");
      return NULL;
   }
   if (!fgInstance) fgInstance = new TGeoBuilder();
   fgInstance->SetGeometry(geom);
   return fgInstance;
}

//_____________________________________________________________________________
Int_t TGeoBuilder::AddMaterial(TGeoMaterial *material)
{
// Add a material to the list. Returns index of the material in list.
   if (!material) return -1;
   TList *materials = fGeometry->GetListOfMaterials();
   Int_t index = materials->GetSize();
   material->SetIndex(index);
   materials->Add(material);
   return index;
}

//_____________________________________________________________________________
Int_t TGeoBuilder::AddTransformation(TGeoMatrix *matrix)
{
// Add a matrix to the list. Returns index of the matrix in list.
   Int_t index = -1;
   if (!matrix) return -1;
   TObjArray *matrices = fGeometry->GetListOfMatrices();
   index = matrices->GetEntriesFast();
   matrices->AddAtAndExpand(matrix,index);
   return index;
}

//_____________________________________________________________________________
Int_t TGeoBuilder::AddShape(TGeoShape *shape)
{
// Add a shape to the list. Returns index of the shape in list.
   Int_t index = -1;
   if (!shape) return -1;
   TObjArray *shapes = fGeometry->GetListOfShapes();
   if (shape->IsRunTimeShape()) shapes =  fGeometry->GetListOfGShapes();
   index = shapes->GetEntriesFast();
   shapes->AddAtAndExpand(shape,index);
   return index;
}

//_____________________________________________________________________________
void TGeoBuilder::RegisterMatrix(TGeoMatrix *matrix)
{
// Register a matrix to the list of matrices. It will be cleaned-up at the
// destruction TGeoManager.
   if (matrix->IsRegistered()) return;
   TObjArray *matrices = fGeometry->GetListOfMatrices();
   Int_t nmat = matrices->GetEntriesFast();
   matrices->AddAtAndExpand(matrix, nmat);
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeArb8(const char *name, TGeoMedium *medium,
                                  Double_t dz, Double_t *vertices)
{
// Make an TGeoArb8 volume.
   TGeoArb8 *arb = new TGeoArb8(name, dz, vertices);
   TGeoVolume *vol = new TGeoVolume(name, arb, medium);
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeBox(const char *name, TGeoMedium *medium,
                                    Double_t dx, Double_t dy, Double_t dz)
{
// Make in one step a volume pointing to a box shape with given medium.
   TGeoBBox *box = new TGeoBBox(name, dx, dy, dz);
   TGeoVolume *vol = 0;
   if (box->IsRunTimeShape()) {
      vol = fGeometry->MakeVolumeMulti(name, medium);
      vol->SetShape(box);
   } else {
      vol = new TGeoVolume(name, box, medium);
   }
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakePara(const char *name, TGeoMedium *medium,
                                    Double_t dx, Double_t dy, Double_t dz,
                                    Double_t alpha, Double_t theta, Double_t phi)
{
// Make in one step a volume pointing to a paralelipiped shape with given medium.
   if (TMath::Abs(alpha)<TGeoShape::Tolerance() && TMath::Abs(theta)<TGeoShape::Tolerance()) {
      Warning("MakePara","parallelipiped %s having alpha=0, theta=0 -> making box instead", name);
      return MakeBox(name, medium, dx, dy, dz);
   }
   TGeoPara *para=0;
   para = new TGeoPara(name, dx, dy, dz, alpha, theta, phi);
   TGeoVolume *vol = 0;
   if (para->IsRunTimeShape()) {
      vol = fGeometry->MakeVolumeMulti(name, medium);
      vol->SetShape(para);
   } else {
      vol = new TGeoVolume(name, para, medium);
   }
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeSphere(const char *name, TGeoMedium *medium,
                                    Double_t rmin, Double_t rmax, Double_t themin, Double_t themax,
                                    Double_t phimin, Double_t phimax)
{
// Make in one step a volume pointing to a sphere shape with given medium
   TGeoSphere *sph = new TGeoSphere(name, rmin, rmax, themin, themax, phimin, phimax);
   TGeoVolume *vol = new TGeoVolume(name, sph, medium);
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeTorus(const char *name, TGeoMedium *medium, Double_t r,
                                   Double_t rmin, Double_t rmax, Double_t phi1, Double_t dphi)
{
// Make in one step a volume pointing to a torus shape with given medium.
   TGeoTorus *tor = new TGeoTorus(name,r,rmin,rmax,phi1,dphi);
   TGeoVolume *vol = new TGeoVolume(name, tor, medium);
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeTube(const char *name, TGeoMedium *medium,
                                     Double_t rmin, Double_t rmax, Double_t dz)
{
// Make in one step a volume pointing to a tube shape with given medium.
   if (rmin>rmax) {
      Error("MakeTube", "tube %s, Rmin=%g greater than Rmax=%g", name,rmin,rmax);
   }
   TGeoTube *tube = new TGeoTube(name, rmin, rmax, dz);
   TGeoVolume *vol = 0;
   if (tube->IsRunTimeShape()) {
      vol = fGeometry->MakeVolumeMulti(name, medium);
      vol->SetShape(tube);
   } else {
      vol = new TGeoVolume(name, tube, medium);
   }
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeTubs(const char *name, TGeoMedium *medium,
                                     Double_t rmin, Double_t rmax, Double_t dz,
                                     Double_t phi1, Double_t phi2)
{
// Make in one step a volume pointing to a tube segment shape with given medium.
   TGeoTubeSeg *tubs = new TGeoTubeSeg(name, rmin, rmax, dz, phi1, phi2);
   TGeoVolume *vol = 0;
   if (tubs->IsRunTimeShape()) {
      vol = fGeometry->MakeVolumeMulti(name, medium);
      vol->SetShape(tubs);
   } else {
      vol = new TGeoVolume(name, tubs, medium);
   }
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeEltu(const char *name, TGeoMedium *medium,
                                     Double_t a, Double_t b, Double_t dz)
{
// Make in one step a volume pointing to a tube shape with given medium
   TGeoEltu *eltu = new TGeoEltu(name, a, b, dz);
   TGeoVolume *vol = 0;
   if (eltu->IsRunTimeShape()) {
      vol = fGeometry->MakeVolumeMulti(name, medium);
      vol->SetShape(eltu);
   } else {
      vol = new TGeoVolume(name, eltu, medium);
   }
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeHype(const char *name, TGeoMedium *medium,
                                        Double_t rin, Double_t stin, Double_t rout, Double_t stout, Double_t dz)
{
// Make in one step a volume pointing to a tube shape with given medium
   TGeoHype * hype =  new TGeoHype(name, rin,stin,rout,stout,dz);
   TGeoVolume *vol = 0;
   if (hype->IsRunTimeShape()) {
      vol = fGeometry->MakeVolumeMulti(name, medium);
      vol->SetShape(hype);
   } else {
      vol = new TGeoVolume(name, hype, medium);
   }
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeParaboloid(const char *name, TGeoMedium *medium,
                                        Double_t rlo, Double_t rhi, Double_t dz)
{
// Make in one step a volume pointing to a tube shape with given medium
   TGeoParaboloid *parab = new TGeoParaboloid(name, rlo, rhi, dz);
   TGeoVolume *vol = 0;
   if (parab->IsRunTimeShape()) {
      vol = fGeometry->MakeVolumeMulti(name, medium);
      vol->SetShape(parab);
   } else {
      vol = new TGeoVolume(name, parab, medium);
   }
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeCtub(const char *name, TGeoMedium *medium,
                                     Double_t rmin, Double_t rmax, Double_t dz, Double_t phi1, Double_t phi2,
                                     Double_t lx, Double_t ly, Double_t lz, Double_t tx, Double_t ty, Double_t tz)
{
// Make in one step a volume pointing to a tube segment shape with given medium
   TGeoCtub *ctub = new TGeoCtub(name, rmin, rmax, dz, phi1, phi2, lx, ly, lz, tx, ty, tz);
   TGeoVolume *vol = new TGeoVolume(name, ctub, medium);
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeCone(const char *name, TGeoMedium *medium,
                                     Double_t dz, Double_t rmin1, Double_t rmax1,
                                     Double_t rmin2, Double_t rmax2)
{
// Make in one step a volume pointing to a cone shape with given medium.
   TGeoCone *cone = new TGeoCone(dz, rmin1, rmax1, rmin2, rmax2);
   TGeoVolume *vol = 0;
   if (cone->IsRunTimeShape()) {
      vol = fGeometry->MakeVolumeMulti(name, medium);
      vol->SetShape(cone);
   } else {
      vol = new TGeoVolume(name, cone, medium);
   }
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeCons(const char *name, TGeoMedium *medium,
                                     Double_t dz, Double_t rmin1, Double_t rmax1,
                                     Double_t rmin2, Double_t rmax2,
                                     Double_t phi1, Double_t phi2)
{
// Make in one step a volume pointing to a cone segment shape with given medium
   TGeoConeSeg *cons = new TGeoConeSeg(name, dz, rmin1, rmax1, rmin2, rmax2, phi1, phi2);
   TGeoVolume *vol = 0;
   if (cons->IsRunTimeShape()) {
      vol = fGeometry->MakeVolumeMulti(name, medium);
      vol->SetShape(cons);
   } else {
      vol = new TGeoVolume(name, cons, medium);
   }
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakePcon(const char *name, TGeoMedium *medium,
                                     Double_t phi, Double_t dphi, Int_t nz)
{
// Make in one step a volume pointing to a polycone shape with given medium.
   TGeoPcon *pcon = new TGeoPcon(name, phi, dphi, nz);
   TGeoVolume *vol = new TGeoVolume(name, pcon, medium);
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakePgon(const char *name, TGeoMedium *medium,
                                     Double_t phi, Double_t dphi, Int_t nedges, Int_t nz)
{
// Make in one step a volume pointing to a polygone shape with given medium.
   TGeoPgon *pgon = new TGeoPgon(name, phi, dphi, nedges, nz);
   TGeoVolume *vol = new TGeoVolume(name, pgon, medium);
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeTrd1(const char *name, TGeoMedium *medium,
                                  Double_t dx1, Double_t dx2, Double_t dy, Double_t dz)
{
// Make in one step a volume pointing to a TGeoTrd1 shape with given medium.
   TGeoTrd1 *trd1 = new TGeoTrd1(name, dx1, dx2, dy, dz);
   TGeoVolume *vol = 0;
   if (trd1->IsRunTimeShape()) {
      vol = fGeometry->MakeVolumeMulti(name, medium);
      vol->SetShape(trd1);
   } else {
      vol = new TGeoVolume(name, trd1, medium);
   }
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeTrd2(const char *name, TGeoMedium *medium,
                                  Double_t dx1, Double_t dx2, Double_t dy1, Double_t dy2,
                                  Double_t dz)
{
// Make in one step a volume pointing to a TGeoTrd2 shape with given medium.
   TGeoTrd2 *trd2 = new TGeoTrd2(name, dx1, dx2, dy1, dy2, dz);
   TGeoVolume *vol = 0;
   if (trd2->IsRunTimeShape()) {
      vol = fGeometry->MakeVolumeMulti(name, medium);
      vol->SetShape(trd2);
   } else {
      vol = new TGeoVolume(name, trd2, medium);
   }
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeTrap(const char *name, TGeoMedium *medium,
                                  Double_t dz, Double_t theta, Double_t phi, Double_t h1,
                                  Double_t bl1, Double_t tl1, Double_t alpha1, Double_t h2, Double_t bl2,
                                  Double_t tl2, Double_t alpha2)
{
// Make in one step a volume pointing to a trapezoid shape with given medium.
   TGeoTrap *trap = new TGeoTrap(name, dz, theta, phi, h1, bl1, tl1, alpha1, h2, bl2,
                                 tl2, alpha2);
   TGeoVolume *vol = new TGeoVolume(name, trap, medium);
   return vol;
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeGtra(const char *name, TGeoMedium *medium,
                                  Double_t dz, Double_t theta, Double_t phi, Double_t twist, Double_t h1,
                                  Double_t bl1, Double_t tl1, Double_t alpha1, Double_t h2, Double_t bl2,
                                  Double_t tl2, Double_t alpha2)
{
// Make in one step a volume pointing to a twisted trapezoid shape with given medium.
   TGeoGtra *gtra = new TGeoGtra(name, dz, theta, phi, twist, h1, bl1, tl1, alpha1, h2, bl2,
                                 tl2, alpha2);
   TGeoVolume *vol = new TGeoVolume(name, gtra, medium);
   return vol;
}
//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::MakeXtru(const char *name, TGeoMedium *medium, Int_t nz)
{
// Make a TGeoXtru-shaped volume with nz planes
   TGeoXtru *xtru = new TGeoXtru(nz);
   xtru->SetName(name);
   TGeoVolume *vol = new TGeoVolume(name, xtru, medium);
   return vol;
}

//_____________________________________________________________________________
TGeoVolumeAssembly *TGeoBuilder::MakeVolumeAssembly(const char *name)
{
// Make an assembly of volumes.
   return (new TGeoVolumeAssembly(name));
}

//_____________________________________________________________________________
TGeoVolumeMulti *TGeoBuilder::MakeVolumeMulti(const char *name, TGeoMedium *medium)
{
// Make a TGeoVolumeMulti handling a list of volumes.
   return (new TGeoVolumeMulti(name, medium));
}


//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::Division(const char *name, const char *mother, Int_t iaxis,
                                  Int_t ndiv, Double_t start, Double_t step, Int_t numed, Option_t *option)
{
// Create a new volume by dividing an existing one (GEANT3 like)
//
// Divides MOTHER into NDIV divisions called NAME
// along axis IAXIS starting at coordinate value START
// and having size STEP. The created volumes will have tracking
// media ID=NUMED (if NUMED=0 -> same media as MOTHER)
//    The behavior of the division operation can be triggered using OPTION :
// OPTION (case insensitive) :
//  N  - divide all range in NDIV cells (same effect as STEP<=0) (GSDVN in G3)
//  NX - divide range starting with START in NDIV cells          (GSDVN2 in G3)
//  S  - divide all range with given STEP. NDIV is computed and divisions will be centered
//         in full range (same effect as NDIV<=0)                (GSDVS, GSDVT in G3)
//  SX - same as DVS, but from START position.                   (GSDVS2, GSDVT2 in G3)

   TGeoVolume *amother;
   TString sname = name;
   sname = sname.Strip();
   const char *vname = sname.Data();
   TString smname = mother;
   smname = smname.Strip();
   const char *mname = smname.Data();

   amother = (TGeoVolume*)fGeometry->GetListOfGVolumes()->FindObject(mname);
   if (!amother) amother = fGeometry->GetVolume(mname);
   if (amother) return amother->Divide(vname,iaxis,ndiv,start,step,numed, option);

   Error("Division","VOLUME: \"%s\" not defined",mname);

   return 0;
}

//_____________________________________________________________________________
void TGeoBuilder::Matrix(Int_t index, Double_t theta1, Double_t phi1,
                         Double_t theta2, Double_t phi2,
                         Double_t theta3, Double_t phi3)
{
// Create rotation matrix named 'mat<index>'.
//
//  index    rotation matrix number
//  theta1   polar angle for axis X
//  phi1     azimuthal angle for axis X
//  theta2   polar angle for axis Y
//  phi2     azimuthal angle for axis Y
//  theta3   polar angle for axis Z
//  phi3     azimuthal angle for axis Z
//
   TGeoRotation * rot = new TGeoRotation("",theta1,phi1,theta2,phi2,theta3,phi3);
   rot->SetUniqueID(index);
   rot->RegisterYourself();
}

//_____________________________________________________________________________
TGeoMaterial *TGeoBuilder::Material(const char *name, Double_t a, Double_t z, Double_t dens, Int_t uid,Double_t radlen, Double_t intlen)
{
// Create material with given A, Z and density, having an unique id.
   TGeoMaterial *material = new TGeoMaterial(name,a,z,dens,radlen,intlen);
   material->SetUniqueID(uid);
   return material;
}

//_____________________________________________________________________________
TGeoMaterial *TGeoBuilder::Mixture(const char *name, Float_t *a, Float_t *z, Double_t dens,
                                   Int_t nelem, Float_t *wmat, Int_t uid)
{
// Create mixture OR COMPOUND IMAT as composed by THE BASIC nelem
// materials defined by arrays A,Z and WMAT, having an unique id.
   TGeoMixture *mix = new TGeoMixture(name,nelem,dens);
   mix->SetUniqueID(uid);
   Int_t i;
   for (i=0;i<nelem;i++) {
      mix->DefineElement(i,a[i],z[i],wmat[i]);
   }
   return (TGeoMaterial*)mix;
}

//_____________________________________________________________________________
TGeoMaterial *TGeoBuilder::Mixture(const char *name, Double_t *a, Double_t *z, Double_t dens,
                                   Int_t nelem, Double_t *wmat, Int_t uid)
{
// Create mixture OR COMPOUND IMAT as composed by THE BASIC nelem
// materials defined by arrays A,Z and WMAT, having an unique id.
   TGeoMixture *mix = new TGeoMixture(name,nelem,dens);
   mix->SetUniqueID(uid);
   Int_t i;
   for (i=0;i<nelem;i++) {
      mix->DefineElement(i,a[i],z[i],wmat[i]);
   }
   return (TGeoMaterial*)mix;
}

//_____________________________________________________________________________
TGeoMedium *TGeoBuilder::Medium(const char *name, Int_t numed, Int_t nmat, Int_t isvol,
                                Int_t ifield, Double_t fieldm, Double_t tmaxfd,
                                Double_t stemax, Double_t deemax, Double_t epsil,
                                Double_t stmin)
{
// Create tracking medium
  //
  //  numed      tracking medium number assigned
  //  name      tracking medium name
  //  nmat      material number
  //  isvol     sensitive volume flag
  //  ifield    magnetic field
  //  fieldm    max. field value (kilogauss)
  //  tmaxfd    max. angle due to field (deg/step)
  //  stemax    max. step allowed
  //  deemax    max. fraction of energy lost in a step
  //  epsil     tracking precision (cm)
  //  stmin     min. step due to continuous processes (cm)
  //
  //  ifield = 0 if no magnetic field; ifield = -1 if user decision in guswim;
  //  ifield = 1 if tracking performed with g3rkuta; ifield = 2 if tracking
  //  performed with g3helix; ifield = 3 if tracking performed with g3helx3.
  //
   return new TGeoMedium(name,numed,nmat,isvol,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
}

//_____________________________________________________________________________
void TGeoBuilder::Node(const char *name, Int_t nr, const char *mother,
                       Double_t x, Double_t y, Double_t z, Int_t irot,
                       Bool_t isOnly, Float_t *upar, Int_t npar)
{
// Create a node called <name_nr> pointing to the volume called <name>
// as daughter of the volume called <mother> (gspos). The relative matrix is
// made of : a translation (x,y,z) and a rotation matrix named <matIROT>.
// In case npar>0, create the volume to be positioned in mother, according
// its actual parameters (gsposp).
//  NAME   Volume name
//  NUMBER Copy number of the volume
//  MOTHER Mother volume name
//  X      X coord. of the volume in mother ref. sys.
//  Y      Y coord. of the volume in mother ref. sys.
//  Z      Z coord. of the volume in mother ref. sys.
//  IROT   Rotation matrix number w.r.t. mother ref. sys.
//  ISONLY ONLY/MANY flag
   TGeoVolume *amother= 0;
   TGeoVolume *volume = 0;

   // look into special volume list first
   amother = fGeometry->FindVolumeFast(mother,kTRUE);
   if (!amother) amother = fGeometry->FindVolumeFast(mother);
   if (!amother) {
      TString mname = mother;
      mname = mname.Strip();
      Error("Node","Mother VOLUME \"%s\" not defined",mname.Data());
      return;
   }
   Int_t i;
   if (npar<=0) {
   //---> acting as G3 gspos
      if (gDebug > 0) Info("Node","Calling gspos, mother=%s, name=%s, nr=%d, x=%g, y=%g, z=%g, irot=%d, konly=%i",mother,name,nr,x,y,z,irot,(Int_t)isOnly);
      // look into special volume list first
      volume  = fGeometry->FindVolumeFast(name,kTRUE);
      if (!volume) volume = fGeometry->FindVolumeFast(name);
      if (!volume) {
         TString vname = name;
         vname = vname.Strip();
         Error("Node","VOLUME: \"%s\" not defined",vname.Data());
         return;
      }
      if (((TObject*)volume)->TestBit(TGeoVolume::kVolumeMulti) && !volume->GetShape()) {
         Error("Node", "cannot add multiple-volume object %s as node", volume->GetName());
         return;
      }
   } else {
   //---> acting as G3 gsposp
      TGeoVolumeMulti *vmulti  = (TGeoVolumeMulti*)fGeometry->FindVolumeFast(name, kTRUE);
      if (!vmulti) {
         volume = fGeometry->FindVolumeFast(name);
         if (volume) {
            Warning("Node", "volume: %s is defined as single -> ignoring shape parameters", volume->GetName());
            Node(name,nr,mother,x,y,z,irot,isOnly, upar);
            return;
         }
         TString vname = name;
         vname = vname.Strip();
         Error("Node","VOLUME: \"%s\" not defined ",vname.Data());
         return;
      }
      TGeoMedium *medium = vmulti->GetMedium();
      TString sh    = vmulti->GetTitle();
      sh.ToLower();
      if (sh.Contains("box")) {
         volume = MakeBox(name,medium,upar[0],upar[1],upar[2]);
      } else if (sh.Contains("trd1")) {
         volume = MakeTrd1(name,medium,upar[0],upar[1],upar[2],upar[3]);
      } else if (sh.Contains("trd2")) {
         volume = MakeTrd2(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4]);
      } else if (sh.Contains("trap")) {
         volume = MakeTrap(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6],upar[7],upar[8],upar[9],upar[10]);
      } else if (sh.Contains("gtra")) {
         volume = MakeGtra(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6],upar[7],upar[8],upar[9],upar[10],upar[11]);
      } else if (sh.Contains("tube")) {
         volume = MakeTube(name,medium,upar[0],upar[1],upar[2]);
      } else if (sh.Contains("tubs")) {
         volume = MakeTubs(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4]);
      } else if (sh.Contains("cone")) {
         volume = MakeCone(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4]);
      } else if (sh.Contains("cons")) {
         volume = MakeCons(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6]);
      } else if (sh.Contains("pgon")) {
         volume = MakePgon(name,medium,upar[0],upar[1],(Int_t)upar[2],(Int_t)upar[3]);
         Int_t nz = (Int_t)upar[3];
         for (i=0;i<nz;i++) {
            ((TGeoPgon*)volume->GetShape())->DefineSection(i,upar[3*i+4],upar[3*i+5],upar[3*i+6]);
         }
      } else if (sh.Contains("pcon")) {
         volume = MakePcon(name,medium,upar[0],upar[1],(Int_t)upar[2]);
         Int_t nz = (Int_t)upar[2];
         for (i=0;i<nz;i++) {
            ((TGeoPcon*)volume->GetShape())->DefineSection(i,upar[3*i+3],upar[3*i+4],upar[3*i+5]);
         }
      } else if (sh.Contains("eltu")) {
         volume = MakeEltu(name,medium,upar[0],upar[1],upar[2]);
      } else if (sh.Contains("sphe")) {
         volume = MakeSphere(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5]);
      } else if (sh.Contains("ctub")) {
         volume = MakeCtub(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6],upar[7],upar[8],upar[9],upar[10]);
      } else if (sh.Contains("para")) {
         volume = MakePara(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5]);
      } else {
         Error("Node","cannot create shape %s",sh.Data());
      }

      if (!volume) return;
      vmulti->AddVolume(volume);
   }
   if (irot) {
      TGeoRotation *matrix = 0;
      TGeoMatrix *mat;
      TIter next(fGeometry->GetListOfMatrices());
      while ((mat=(TGeoMatrix*)next())) {
         if (mat->GetUniqueID()==UInt_t(irot)) {
            matrix = dynamic_cast<TGeoRotation*>(mat);
            break;
         }
      }
      if (!matrix) {
         Fatal("Node", "Node %s/%s_%d rotation %i not found",mother, name, nr ,irot);
         return;
      }
      if (isOnly) amother->AddNode(volume,nr,new TGeoCombiTrans(x,y,z,matrix));
      else        amother->AddNodeOverlap(volume,nr,new TGeoCombiTrans(x,y,z,matrix));
   } else {
      if (TMath::Abs(x)<TGeoShape::Tolerance() &&
          TMath::Abs(y)<TGeoShape::Tolerance() &&
          TMath::Abs(z)<TGeoShape::Tolerance()) {
         if (isOnly) amother->AddNode(volume,nr);
         else        amother->AddNodeOverlap(volume,nr);
      } else {
         if (isOnly) amother->AddNode(volume,nr,new TGeoTranslation(x,y,z));
         else        amother->AddNodeOverlap(volume,nr,new TGeoTranslation(x,y,z));
      }
   }
}

//_____________________________________________________________________________
void TGeoBuilder::Node(const char *name, Int_t nr, const char *mother,
                       Double_t x, Double_t y, Double_t z, Int_t irot,
                       Bool_t isOnly, Double_t *upar, Int_t npar)
{
// Create a node called <name_nr> pointing to the volume called <name>
// as daughter of the volume called <mother> (gspos). The relative matrix is
// made of : a translation (x,y,z) and a rotation matrix named <matIROT>.
// In case npar>0, create the volume to be positioned in mother, according
// its actual parameters (gsposp).
//  NAME   Volume name
//  NUMBER Copy number of the volume
//  MOTHER Mother volume name
//  X      X coord. of the volume in mother ref. sys.
//  Y      Y coord. of the volume in mother ref. sys.
//  Z      Z coord. of the volume in mother ref. sys.
//  IROT   Rotation matrix number w.r.t. mother ref. sys.
//  ISONLY ONLY/MANY flag
   TGeoVolume *amother= 0;
   TGeoVolume *volume = 0;

   // look into special volume list first
   amother = fGeometry->FindVolumeFast(mother,kTRUE);
   if (!amother) amother = fGeometry->FindVolumeFast(mother);
   if (!amother) {
      TString mname = mother;
      mname = mname.Strip();
      Error("Node","Mother VOLUME \"%s\" not defined",mname.Data());
      return;
   }
   Int_t i;
   if (npar<=0) {
   //---> acting as G3 gspos
      if (gDebug > 0) Info("Node","Calling gspos, mother=%s, name=%s, nr=%d, x=%g, y=%g, z=%g, irot=%d, konly=%i",mother,name,nr,x,y,z,irot,(Int_t)isOnly);
      // look into special volume list first
      volume  = fGeometry->FindVolumeFast(name,kTRUE);
      if (!volume) volume = fGeometry->FindVolumeFast(name);
      if (!volume) {
         TString vname = name;
         vname = vname.Strip();
         Error("Node","VOLUME: \"%s\" not defined",vname.Data());
         return;
      }
      if (((TObject*)volume)->TestBit(TGeoVolume::kVolumeMulti) && !volume->GetShape()) {
         Error("Node", "cannot add multiple-volume object %s as node", volume->GetName());
         return;
      }
   } else {
   //---> acting as G3 gsposp
      TGeoVolumeMulti *vmulti  = (TGeoVolumeMulti*)fGeometry->FindVolumeFast(name, kTRUE);
      if (!vmulti) {
         volume = fGeometry->FindVolumeFast(name);
         if (volume) {
            Warning("Node", "volume: %s is defined as single -> ignoring shape parameters", volume->GetName());
            Node(name,nr,mother,x,y,z,irot,isOnly, upar);
            return;
         }
         TString vname = name;
         vname = vname.Strip();
         Error("Node","VOLUME: \"%s\" not defined ",vname.Data());
         return;
      }
      TGeoMedium *medium = vmulti->GetMedium();
      TString sh    = vmulti->GetTitle();
      sh.ToLower();
      if (sh.Contains("box")) {
         volume = MakeBox(name,medium,upar[0],upar[1],upar[2]);
      } else if (sh.Contains("trd1")) {
         volume = MakeTrd1(name,medium,upar[0],upar[1],upar[2],upar[3]);
      } else if (sh.Contains("trd2")) {
         volume = MakeTrd2(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4]);
      } else if (sh.Contains("trap")) {
         volume = MakeTrap(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6],upar[7],upar[8],upar[9],upar[10]);
      } else if (sh.Contains("gtra")) {
         volume = MakeGtra(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6],upar[7],upar[8],upar[9],upar[10],upar[11]);
      } else if (sh.Contains("tube")) {
         volume = MakeTube(name,medium,upar[0],upar[1],upar[2]);
      } else if (sh.Contains("tubs")) {
         volume = MakeTubs(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4]);
      } else if (sh.Contains("cone")) {
         volume = MakeCone(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4]);
      } else if (sh.Contains("cons")) {
         volume = MakeCons(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6]);
      } else if (sh.Contains("pgon")) {
         volume = MakePgon(name,medium,upar[0],upar[1],(Int_t)upar[2],(Int_t)upar[3]);
         Int_t nz = (Int_t)upar[3];
         for (i=0;i<nz;i++) {
            ((TGeoPgon*)volume->GetShape())->DefineSection(i,upar[3*i+4],upar[3*i+5],upar[3*i+6]);
         }
      } else if (sh.Contains("pcon")) {
         volume = MakePcon(name,medium,upar[0],upar[1],(Int_t)upar[2]);
         Int_t nz = (Int_t)upar[2];
         for (i=0;i<nz;i++) {
            ((TGeoPcon*)volume->GetShape())->DefineSection(i,upar[3*i+3],upar[3*i+4],upar[3*i+5]);
         }
      } else if (sh.Contains("eltu")) {
         volume = MakeEltu(name,medium,upar[0],upar[1],upar[2]);
      } else if (sh.Contains("sphe")) {
         volume = MakeSphere(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5]);
      } else if (sh.Contains("ctub")) {
         volume = MakeCtub(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6],upar[7],upar[8],upar[9],upar[10]);
      } else if (sh.Contains("para")) {
         volume = MakePara(name,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5]);
      } else {
         Error("Node","cannot create shape %s",sh.Data());
      }

      if (!volume) return;
      vmulti->AddVolume(volume);
   }
   if (irot) {
      TGeoRotation *matrix = 0;
      TGeoMatrix *mat;
      TIter next(fGeometry->GetListOfMatrices());
      while ((mat=(TGeoMatrix*)next())) {
         if (mat->GetUniqueID()==UInt_t(irot)) {
            matrix = dynamic_cast<TGeoRotation*>(mat);
            break;
         }
      }
      if (!matrix) {
         Fatal("Node", "Node %s/%s_%d rotation %i not found",mother, name, nr ,irot);
         return;
      }
      if (isOnly) amother->AddNode(volume,nr,new TGeoCombiTrans(x,y,z,matrix));
      else        amother->AddNodeOverlap(volume,nr,new TGeoCombiTrans(x,y,z,matrix));
   } else {
      if (TMath::Abs(x)<TGeoShape::Tolerance() &&
          TMath::Abs(y)<TGeoShape::Tolerance() &&
          TMath::Abs(z)<TGeoShape::Tolerance()) {
         if (isOnly) amother->AddNode(volume,nr);
         else        amother->AddNodeOverlap(volume,nr);
      } else {
         if (isOnly) amother->AddNode(volume,nr,new TGeoTranslation(x,y,z));
         else        amother->AddNodeOverlap(volume,nr,new TGeoTranslation(x,y,z));
      }
   }
}

//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::Volume(const char *name, const char *shape, Int_t nmed,
                                Float_t *upar, Int_t npar)
{
// Create a volume in GEANT3 style.
//  NAME   Volume name
//  SHAPE  Volume type
//  NMED   Tracking medium number
//  NPAR   Number of shape parameters
//  UPAR   Vector containing shape parameters
   Int_t i;
   TGeoVolume *volume = 0;
   TGeoMedium *medium = fGeometry->GetMedium(nmed);
   if (!medium) {
      Error("Volume","cannot create volume: %s, medium: %d is unknown",name,nmed);
      return 0;
   }
   TString sh = shape;
   TString sname = name;
   sname = sname.Strip();
   const char *vname = sname.Data();
   if (npar <= 0) {
      //--- create a TGeoVolumeMulti
      volume = MakeVolumeMulti(vname,medium);
      volume->SetTitle(shape);
      TGeoVolumeMulti *vmulti  = (TGeoVolumeMulti*)fGeometry->GetListOfGVolumes()->FindObject(vname);
      if (!vmulti) {
         Error("Volume","volume multi: %s not created",vname);
         return 0;
      }
      return vmulti;
   }
   //---> create a normal volume
   sh.ToLower();
   if (sh.Contains("box")) {
      volume = MakeBox(vname,medium,upar[0],upar[1],upar[2]);
   } else if (sh.Contains("trd1")) {
      volume = MakeTrd1(vname,medium,upar[0],upar[1],upar[2],upar[3]);
   } else if (sh.Contains("trd2")) {
      volume = MakeTrd2(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4]);
   } else if (sh.Contains("trap")) {
      volume = MakeTrap(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6],upar[7],upar[8],upar[9],upar[10]);
   } else if (sh.Contains("gtra")) {
      volume = MakeGtra(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6],upar[7],upar[8],upar[9],upar[10],upar[11]);
   } else if (sh.Contains("tube")) {
      volume = MakeTube(vname,medium,upar[0],upar[1],upar[2]);
   } else if (sh.Contains("tubs")) {
      volume = MakeTubs(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4]);
   } else if (sh.Contains("cone")) {
      volume = MakeCone(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4]);
   } else if (sh.Contains("cons")) {
      volume = MakeCons(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6]);
   } else if (sh.Contains("pgon")) {
      volume = MakePgon(vname,medium,upar[0],upar[1],(Int_t)upar[2],(Int_t)upar[3]);
      Int_t nz = (Int_t)upar[3];
      for (i=0;i<nz;i++) {
         ((TGeoPgon*)volume->GetShape())->DefineSection(i,upar[3*i+4],upar[3*i+5],upar[3*i+6]);
      }
   } else if (sh.Contains("pcon")) {
      volume = MakePcon(vname,medium,upar[0],upar[1],(Int_t)upar[2]);
      Int_t nz = (Int_t)upar[2];
      for (i=0;i<nz;i++) {
         ((TGeoPcon*)volume->GetShape())->DefineSection(i,upar[3*i+3],upar[3*i+4],upar[3*i+5]);
      }
   } else if (sh.Contains("eltu")) {
      volume = MakeEltu(vname,medium,upar[0],upar[1],upar[2]);
   } else if (sh.Contains("sphe")) {
      volume = MakeSphere(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5]);
   } else if (sh.Contains("ctub")) {
      volume = MakeCtub(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6],upar[7],upar[8],upar[9],upar[10]);
   } else if (sh.Contains("para")) {
      volume = MakePara(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5]);
   } else if (sh.Contains("tor")) {
      volume = MakeTorus(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4]);
   }

   if (!volume) {
      Error("Volume","volume: %s not created",vname);
      return 0;
   }
   return volume;
}


//_____________________________________________________________________________
TGeoVolume *TGeoBuilder::Volume(const char *name, const char *shape, Int_t nmed,
                                Double_t *upar, Int_t npar)
{
// Create a volume in GEANT3 style.
//  NAME   Volume name
//  SHAPE  Volume type
//  NMED   Tracking medium number
//  NPAR   Number of shape parameters
//  UPAR   Vector containing shape parameters
   Int_t i;
   TGeoVolume *volume = 0;
   TGeoMedium *medium = fGeometry->GetMedium(nmed);
   if (!medium) {
      Error("Volume","cannot create volume: %s, medium: %d is unknown",name,nmed);
      return 0;
   }
   TString sh = shape;
   TString sname = name;
   sname = sname.Strip();
   const char *vname = sname.Data();
   if (npar <= 0) {
      //--- create a TGeoVolumeMulti
      volume = MakeVolumeMulti(vname,medium);
      volume->SetTitle(shape);
      TGeoVolumeMulti *vmulti  = (TGeoVolumeMulti*)fGeometry->GetListOfGVolumes()->FindObject(vname);
      if (!vmulti) {
         Error("Volume","volume multi: %s not created",vname);
         return 0;
      }
      return vmulti;
   }
   //---> create a normal volume
   sh.ToLower();
   if (sh.Contains("box")) {
      volume = MakeBox(vname,medium,upar[0],upar[1],upar[2]);
   } else if (sh.Contains("trd1")) {
      volume = MakeTrd1(vname,medium,upar[0],upar[1],upar[2],upar[3]);
   } else if (sh.Contains("trd2")) {
      volume = MakeTrd2(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4]);
   } else if (sh.Contains("trap")) {
      volume = MakeTrap(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6],upar[7],upar[8],upar[9],upar[10]);
   } else if (sh.Contains("gtra")) {
      volume = MakeGtra(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6],upar[7],upar[8],upar[9],upar[10],upar[11]);
   } else if (sh.Contains("tube")) {
      volume = MakeTube(vname,medium,upar[0],upar[1],upar[2]);
   } else if (sh.Contains("tubs")) {
      volume = MakeTubs(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4]);
   } else if (sh.Contains("cone")) {
      volume = MakeCone(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4]);
   } else if (sh.Contains("cons")) {
      volume = MakeCons(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6]);
   } else if (sh.Contains("pgon")) {
      volume = MakePgon(vname,medium,upar[0],upar[1],(Int_t)upar[2],(Int_t)upar[3]);
      Int_t nz = (Int_t)upar[3];
      for (i=0;i<nz;i++) {
         ((TGeoPgon*)volume->GetShape())->DefineSection(i,upar[3*i+4],upar[3*i+5],upar[3*i+6]);
      }
   } else if (sh.Contains("pcon")) {
      volume = MakePcon(vname,medium,upar[0],upar[1],(Int_t)upar[2]);
      Int_t nz = (Int_t)upar[2];
      for (i=0;i<nz;i++) {
         ((TGeoPcon*)volume->GetShape())->DefineSection(i,upar[3*i+3],upar[3*i+4],upar[3*i+5]);
      }
   } else if (sh.Contains("eltu")) {
      volume = MakeEltu(vname,medium,upar[0],upar[1],upar[2]);
   } else if (sh.Contains("sphe")) {
      volume = MakeSphere(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5]);
   } else if (sh.Contains("ctub")) {
      volume = MakeCtub(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5],upar[6],upar[7],upar[8],upar[9],upar[10]);
   } else if (sh.Contains("para")) {
      volume = MakePara(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4],upar[5]);
   } else if (sh.Contains("tor")) {
      volume = MakeTorus(vname,medium,upar[0],upar[1],upar[2],upar[3],upar[4]);
   }

   if (!volume) {
      Error("Volume","volume: %s not created",vname);
      return 0;
   }
   return volume;
}

 TGeoBuilder.cxx:1
 TGeoBuilder.cxx:2
 TGeoBuilder.cxx:3
 TGeoBuilder.cxx:4
 TGeoBuilder.cxx:5
 TGeoBuilder.cxx:6
 TGeoBuilder.cxx:7
 TGeoBuilder.cxx:8
 TGeoBuilder.cxx:9
 TGeoBuilder.cxx:10
 TGeoBuilder.cxx:11
 TGeoBuilder.cxx:12
 TGeoBuilder.cxx:13
 TGeoBuilder.cxx:14
 TGeoBuilder.cxx:15
 TGeoBuilder.cxx:16
 TGeoBuilder.cxx:17
 TGeoBuilder.cxx:18
 TGeoBuilder.cxx:19
 TGeoBuilder.cxx:20
 TGeoBuilder.cxx:21
 TGeoBuilder.cxx:22
 TGeoBuilder.cxx:23
 TGeoBuilder.cxx:24
 TGeoBuilder.cxx:25
 TGeoBuilder.cxx:26
 TGeoBuilder.cxx:27
 TGeoBuilder.cxx:28
 TGeoBuilder.cxx:29
 TGeoBuilder.cxx:30
 TGeoBuilder.cxx:31
 TGeoBuilder.cxx:32
 TGeoBuilder.cxx:33
 TGeoBuilder.cxx:34
 TGeoBuilder.cxx:35
 TGeoBuilder.cxx:36
 TGeoBuilder.cxx:37
 TGeoBuilder.cxx:38
 TGeoBuilder.cxx:39
 TGeoBuilder.cxx:40
 TGeoBuilder.cxx:41
 TGeoBuilder.cxx:42
 TGeoBuilder.cxx:43
 TGeoBuilder.cxx:44
 TGeoBuilder.cxx:45
 TGeoBuilder.cxx:46
 TGeoBuilder.cxx:47
 TGeoBuilder.cxx:48
 TGeoBuilder.cxx:49
 TGeoBuilder.cxx:50
 TGeoBuilder.cxx:51
 TGeoBuilder.cxx:52
 TGeoBuilder.cxx:53
 TGeoBuilder.cxx:54
 TGeoBuilder.cxx:55
 TGeoBuilder.cxx:56
 TGeoBuilder.cxx:57
 TGeoBuilder.cxx:58
 TGeoBuilder.cxx:59
 TGeoBuilder.cxx:60
 TGeoBuilder.cxx:61
 TGeoBuilder.cxx:62
 TGeoBuilder.cxx:63
 TGeoBuilder.cxx:64
 TGeoBuilder.cxx:65
 TGeoBuilder.cxx:66
 TGeoBuilder.cxx:67
 TGeoBuilder.cxx:68
 TGeoBuilder.cxx:69
 TGeoBuilder.cxx:70
 TGeoBuilder.cxx:71
 TGeoBuilder.cxx:72
 TGeoBuilder.cxx:73
 TGeoBuilder.cxx:74
 TGeoBuilder.cxx:75
 TGeoBuilder.cxx:76
 TGeoBuilder.cxx:77
 TGeoBuilder.cxx:78
 TGeoBuilder.cxx:79
 TGeoBuilder.cxx:80
 TGeoBuilder.cxx:81
 TGeoBuilder.cxx:82
 TGeoBuilder.cxx:83
 TGeoBuilder.cxx:84
 TGeoBuilder.cxx:85
 TGeoBuilder.cxx:86
 TGeoBuilder.cxx:87
 TGeoBuilder.cxx:88
 TGeoBuilder.cxx:89
 TGeoBuilder.cxx:90
 TGeoBuilder.cxx:91
 TGeoBuilder.cxx:92
 TGeoBuilder.cxx:93
 TGeoBuilder.cxx:94
 TGeoBuilder.cxx:95
 TGeoBuilder.cxx:96
 TGeoBuilder.cxx:97
 TGeoBuilder.cxx:98
 TGeoBuilder.cxx:99
 TGeoBuilder.cxx:100
 TGeoBuilder.cxx:101
 TGeoBuilder.cxx:102
 TGeoBuilder.cxx:103
 TGeoBuilder.cxx:104
 TGeoBuilder.cxx:105
 TGeoBuilder.cxx:106
 TGeoBuilder.cxx:107
 TGeoBuilder.cxx:108
 TGeoBuilder.cxx:109
 TGeoBuilder.cxx:110
 TGeoBuilder.cxx:111
 TGeoBuilder.cxx:112
 TGeoBuilder.cxx:113
 TGeoBuilder.cxx:114
 TGeoBuilder.cxx:115
 TGeoBuilder.cxx:116
 TGeoBuilder.cxx:117
 TGeoBuilder.cxx:118
 TGeoBuilder.cxx:119
 TGeoBuilder.cxx:120
 TGeoBuilder.cxx:121
 TGeoBuilder.cxx:122
 TGeoBuilder.cxx:123
 TGeoBuilder.cxx:124
 TGeoBuilder.cxx:125
 TGeoBuilder.cxx:126
 TGeoBuilder.cxx:127
 TGeoBuilder.cxx:128
 TGeoBuilder.cxx:129
 TGeoBuilder.cxx:130
 TGeoBuilder.cxx:131
 TGeoBuilder.cxx:132
 TGeoBuilder.cxx:133
 TGeoBuilder.cxx:134
 TGeoBuilder.cxx:135
 TGeoBuilder.cxx:136
 TGeoBuilder.cxx:137
 TGeoBuilder.cxx:138
 TGeoBuilder.cxx:139
 TGeoBuilder.cxx:140
 TGeoBuilder.cxx:141
 TGeoBuilder.cxx:142
 TGeoBuilder.cxx:143
 TGeoBuilder.cxx:144
 TGeoBuilder.cxx:145
 TGeoBuilder.cxx:146
 TGeoBuilder.cxx:147
 TGeoBuilder.cxx:148
 TGeoBuilder.cxx:149
 TGeoBuilder.cxx:150
 TGeoBuilder.cxx:151
 TGeoBuilder.cxx:152
 TGeoBuilder.cxx:153
 TGeoBuilder.cxx:154
 TGeoBuilder.cxx:155
 TGeoBuilder.cxx:156
 TGeoBuilder.cxx:157
 TGeoBuilder.cxx:158
 TGeoBuilder.cxx:159
 TGeoBuilder.cxx:160
 TGeoBuilder.cxx:161
 TGeoBuilder.cxx:162
 TGeoBuilder.cxx:163
 TGeoBuilder.cxx:164
 TGeoBuilder.cxx:165
 TGeoBuilder.cxx:166
 TGeoBuilder.cxx:167
 TGeoBuilder.cxx:168
 TGeoBuilder.cxx:169
 TGeoBuilder.cxx:170
 TGeoBuilder.cxx:171
 TGeoBuilder.cxx:172
 TGeoBuilder.cxx:173
 TGeoBuilder.cxx:174
 TGeoBuilder.cxx:175
 TGeoBuilder.cxx:176
 TGeoBuilder.cxx:177
 TGeoBuilder.cxx:178
 TGeoBuilder.cxx:179
 TGeoBuilder.cxx:180
 TGeoBuilder.cxx:181
 TGeoBuilder.cxx:182
 TGeoBuilder.cxx:183
 TGeoBuilder.cxx:184
 TGeoBuilder.cxx:185
 TGeoBuilder.cxx:186
 TGeoBuilder.cxx:187
 TGeoBuilder.cxx:188
 TGeoBuilder.cxx:189
 TGeoBuilder.cxx:190
 TGeoBuilder.cxx:191
 TGeoBuilder.cxx:192
 TGeoBuilder.cxx:193
 TGeoBuilder.cxx:194
 TGeoBuilder.cxx:195
 TGeoBuilder.cxx:196
 TGeoBuilder.cxx:197
 TGeoBuilder.cxx:198
 TGeoBuilder.cxx:199
 TGeoBuilder.cxx:200
 TGeoBuilder.cxx:201
 TGeoBuilder.cxx:202
 TGeoBuilder.cxx:203
 TGeoBuilder.cxx:204
 TGeoBuilder.cxx:205
 TGeoBuilder.cxx:206
 TGeoBuilder.cxx:207
 TGeoBuilder.cxx:208
 TGeoBuilder.cxx:209
 TGeoBuilder.cxx:210
 TGeoBuilder.cxx:211
 TGeoBuilder.cxx:212
 TGeoBuilder.cxx:213
 TGeoBuilder.cxx:214
 TGeoBuilder.cxx:215
 TGeoBuilder.cxx:216
 TGeoBuilder.cxx:217
 TGeoBuilder.cxx:218
 TGeoBuilder.cxx:219
 TGeoBuilder.cxx:220
 TGeoBuilder.cxx:221
 TGeoBuilder.cxx:222
 TGeoBuilder.cxx:223
 TGeoBuilder.cxx:224
 TGeoBuilder.cxx:225
 TGeoBuilder.cxx:226
 TGeoBuilder.cxx:227
 TGeoBuilder.cxx:228
 TGeoBuilder.cxx:229
 TGeoBuilder.cxx:230
 TGeoBuilder.cxx:231
 TGeoBuilder.cxx:232
 TGeoBuilder.cxx:233
 TGeoBuilder.cxx:234
 TGeoBuilder.cxx:235
 TGeoBuilder.cxx:236
 TGeoBuilder.cxx:237
 TGeoBuilder.cxx:238
 TGeoBuilder.cxx:239
 TGeoBuilder.cxx:240
 TGeoBuilder.cxx:241
 TGeoBuilder.cxx:242
 TGeoBuilder.cxx:243
 TGeoBuilder.cxx:244
 TGeoBuilder.cxx:245
 TGeoBuilder.cxx:246
 TGeoBuilder.cxx:247
 TGeoBuilder.cxx:248
 TGeoBuilder.cxx:249
 TGeoBuilder.cxx:250
 TGeoBuilder.cxx:251
 TGeoBuilder.cxx:252
 TGeoBuilder.cxx:253
 TGeoBuilder.cxx:254
 TGeoBuilder.cxx:255
 TGeoBuilder.cxx:256
 TGeoBuilder.cxx:257
 TGeoBuilder.cxx:258
 TGeoBuilder.cxx:259
 TGeoBuilder.cxx:260
 TGeoBuilder.cxx:261
 TGeoBuilder.cxx:262
 TGeoBuilder.cxx:263
 TGeoBuilder.cxx:264
 TGeoBuilder.cxx:265
 TGeoBuilder.cxx:266
 TGeoBuilder.cxx:267
 TGeoBuilder.cxx:268
 TGeoBuilder.cxx:269
 TGeoBuilder.cxx:270
 TGeoBuilder.cxx:271
 TGeoBuilder.cxx:272
 TGeoBuilder.cxx:273
 TGeoBuilder.cxx:274
 TGeoBuilder.cxx:275
 TGeoBuilder.cxx:276
 TGeoBuilder.cxx:277
 TGeoBuilder.cxx:278
 TGeoBuilder.cxx:279
 TGeoBuilder.cxx:280
 TGeoBuilder.cxx:281
 TGeoBuilder.cxx:282
 TGeoBuilder.cxx:283
 TGeoBuilder.cxx:284
 TGeoBuilder.cxx:285
 TGeoBuilder.cxx:286
 TGeoBuilder.cxx:287
 TGeoBuilder.cxx:288
 TGeoBuilder.cxx:289
 TGeoBuilder.cxx:290
 TGeoBuilder.cxx:291
 TGeoBuilder.cxx:292
 TGeoBuilder.cxx:293
 TGeoBuilder.cxx:294
 TGeoBuilder.cxx:295
 TGeoBuilder.cxx:296
 TGeoBuilder.cxx:297
 TGeoBuilder.cxx:298
 TGeoBuilder.cxx:299
 TGeoBuilder.cxx:300
 TGeoBuilder.cxx:301
 TGeoBuilder.cxx:302
 TGeoBuilder.cxx:303
 TGeoBuilder.cxx:304
 TGeoBuilder.cxx:305
 TGeoBuilder.cxx:306
 TGeoBuilder.cxx:307
 TGeoBuilder.cxx:308
 TGeoBuilder.cxx:309
 TGeoBuilder.cxx:310
 TGeoBuilder.cxx:311
 TGeoBuilder.cxx:312
 TGeoBuilder.cxx:313
 TGeoBuilder.cxx:314
 TGeoBuilder.cxx:315
 TGeoBuilder.cxx:316
 TGeoBuilder.cxx:317
 TGeoBuilder.cxx:318
 TGeoBuilder.cxx:319
 TGeoBuilder.cxx:320
 TGeoBuilder.cxx:321
 TGeoBuilder.cxx:322
 TGeoBuilder.cxx:323
 TGeoBuilder.cxx:324
 TGeoBuilder.cxx:325
 TGeoBuilder.cxx:326
 TGeoBuilder.cxx:327
 TGeoBuilder.cxx:328
 TGeoBuilder.cxx:329
 TGeoBuilder.cxx:330
 TGeoBuilder.cxx:331
 TGeoBuilder.cxx:332
 TGeoBuilder.cxx:333
 TGeoBuilder.cxx:334
 TGeoBuilder.cxx:335
 TGeoBuilder.cxx:336
 TGeoBuilder.cxx:337
 TGeoBuilder.cxx:338
 TGeoBuilder.cxx:339
 TGeoBuilder.cxx:340
 TGeoBuilder.cxx:341
 TGeoBuilder.cxx:342
 TGeoBuilder.cxx:343
 TGeoBuilder.cxx:344
 TGeoBuilder.cxx:345
 TGeoBuilder.cxx:346
 TGeoBuilder.cxx:347
 TGeoBuilder.cxx:348
 TGeoBuilder.cxx:349
 TGeoBuilder.cxx:350
 TGeoBuilder.cxx:351
 TGeoBuilder.cxx:352
 TGeoBuilder.cxx:353
 TGeoBuilder.cxx:354
 TGeoBuilder.cxx:355
 TGeoBuilder.cxx:356
 TGeoBuilder.cxx:357
 TGeoBuilder.cxx:358
 TGeoBuilder.cxx:359
 TGeoBuilder.cxx:360
 TGeoBuilder.cxx:361
 TGeoBuilder.cxx:362
 TGeoBuilder.cxx:363
 TGeoBuilder.cxx:364
 TGeoBuilder.cxx:365
 TGeoBuilder.cxx:366
 TGeoBuilder.cxx:367
 TGeoBuilder.cxx:368
 TGeoBuilder.cxx:369
 TGeoBuilder.cxx:370
 TGeoBuilder.cxx:371
 TGeoBuilder.cxx:372
 TGeoBuilder.cxx:373
 TGeoBuilder.cxx:374
 TGeoBuilder.cxx:375
 TGeoBuilder.cxx:376
 TGeoBuilder.cxx:377
 TGeoBuilder.cxx:378
 TGeoBuilder.cxx:379
 TGeoBuilder.cxx:380
 TGeoBuilder.cxx:381
 TGeoBuilder.cxx:382
 TGeoBuilder.cxx:383
 TGeoBuilder.cxx:384
 TGeoBuilder.cxx:385
 TGeoBuilder.cxx:386
 TGeoBuilder.cxx:387
 TGeoBuilder.cxx:388
 TGeoBuilder.cxx:389
 TGeoBuilder.cxx:390
 TGeoBuilder.cxx:391
 TGeoBuilder.cxx:392
 TGeoBuilder.cxx:393
 TGeoBuilder.cxx:394
 TGeoBuilder.cxx:395
 TGeoBuilder.cxx:396
 TGeoBuilder.cxx:397
 TGeoBuilder.cxx:398
 TGeoBuilder.cxx:399
 TGeoBuilder.cxx:400
 TGeoBuilder.cxx:401
 TGeoBuilder.cxx:402
 TGeoBuilder.cxx:403
 TGeoBuilder.cxx:404
 TGeoBuilder.cxx:405
 TGeoBuilder.cxx:406
 TGeoBuilder.cxx:407
 TGeoBuilder.cxx:408
 TGeoBuilder.cxx:409
 TGeoBuilder.cxx:410
 TGeoBuilder.cxx:411
 TGeoBuilder.cxx:412
 TGeoBuilder.cxx:413
 TGeoBuilder.cxx:414
 TGeoBuilder.cxx:415
 TGeoBuilder.cxx:416
 TGeoBuilder.cxx:417
 TGeoBuilder.cxx:418
 TGeoBuilder.cxx:419
 TGeoBuilder.cxx:420
 TGeoBuilder.cxx:421
 TGeoBuilder.cxx:422
 TGeoBuilder.cxx:423
 TGeoBuilder.cxx:424
 TGeoBuilder.cxx:425
 TGeoBuilder.cxx:426
 TGeoBuilder.cxx:427
 TGeoBuilder.cxx:428
 TGeoBuilder.cxx:429
 TGeoBuilder.cxx:430
 TGeoBuilder.cxx:431
 TGeoBuilder.cxx:432
 TGeoBuilder.cxx:433
 TGeoBuilder.cxx:434
 TGeoBuilder.cxx:435
 TGeoBuilder.cxx:436
 TGeoBuilder.cxx:437
 TGeoBuilder.cxx:438
 TGeoBuilder.cxx:439
 TGeoBuilder.cxx:440
 TGeoBuilder.cxx:441
 TGeoBuilder.cxx:442
 TGeoBuilder.cxx:443
 TGeoBuilder.cxx:444
 TGeoBuilder.cxx:445
 TGeoBuilder.cxx:446
 TGeoBuilder.cxx:447
 TGeoBuilder.cxx:448
 TGeoBuilder.cxx:449
 TGeoBuilder.cxx:450
 TGeoBuilder.cxx:451
 TGeoBuilder.cxx:452
 TGeoBuilder.cxx:453
 TGeoBuilder.cxx:454
 TGeoBuilder.cxx:455
 TGeoBuilder.cxx:456
 TGeoBuilder.cxx:457
 TGeoBuilder.cxx:458
 TGeoBuilder.cxx:459
 TGeoBuilder.cxx:460
 TGeoBuilder.cxx:461
 TGeoBuilder.cxx:462
 TGeoBuilder.cxx:463
 TGeoBuilder.cxx:464
 TGeoBuilder.cxx:465
 TGeoBuilder.cxx:466
 TGeoBuilder.cxx:467
 TGeoBuilder.cxx:468
 TGeoBuilder.cxx:469
 TGeoBuilder.cxx:470
 TGeoBuilder.cxx:471
 TGeoBuilder.cxx:472
 TGeoBuilder.cxx:473
 TGeoBuilder.cxx:474
 TGeoBuilder.cxx:475
 TGeoBuilder.cxx:476
 TGeoBuilder.cxx:477
 TGeoBuilder.cxx:478
 TGeoBuilder.cxx:479
 TGeoBuilder.cxx:480
 TGeoBuilder.cxx:481
 TGeoBuilder.cxx:482
 TGeoBuilder.cxx:483
 TGeoBuilder.cxx:484
 TGeoBuilder.cxx:485
 TGeoBuilder.cxx:486
 TGeoBuilder.cxx:487
 TGeoBuilder.cxx:488
 TGeoBuilder.cxx:489
 TGeoBuilder.cxx:490
 TGeoBuilder.cxx:491
 TGeoBuilder.cxx:492
 TGeoBuilder.cxx:493
 TGeoBuilder.cxx:494
 TGeoBuilder.cxx:495
 TGeoBuilder.cxx:496
 TGeoBuilder.cxx:497
 TGeoBuilder.cxx:498
 TGeoBuilder.cxx:499
 TGeoBuilder.cxx:500
 TGeoBuilder.cxx:501
 TGeoBuilder.cxx:502
 TGeoBuilder.cxx:503
 TGeoBuilder.cxx:504
 TGeoBuilder.cxx:505
 TGeoBuilder.cxx:506
 TGeoBuilder.cxx:507
 TGeoBuilder.cxx:508
 TGeoBuilder.cxx:509
 TGeoBuilder.cxx:510
 TGeoBuilder.cxx:511
 TGeoBuilder.cxx:512
 TGeoBuilder.cxx:513
 TGeoBuilder.cxx:514
 TGeoBuilder.cxx:515
 TGeoBuilder.cxx:516
 TGeoBuilder.cxx:517
 TGeoBuilder.cxx:518
 TGeoBuilder.cxx:519
 TGeoBuilder.cxx:520
 TGeoBuilder.cxx:521
 TGeoBuilder.cxx:522
 TGeoBuilder.cxx:523
 TGeoBuilder.cxx:524
 TGeoBuilder.cxx:525
 TGeoBuilder.cxx:526
 TGeoBuilder.cxx:527
 TGeoBuilder.cxx:528
 TGeoBuilder.cxx:529
 TGeoBuilder.cxx:530
 TGeoBuilder.cxx:531
 TGeoBuilder.cxx:532
 TGeoBuilder.cxx:533
 TGeoBuilder.cxx:534
 TGeoBuilder.cxx:535
 TGeoBuilder.cxx:536
 TGeoBuilder.cxx:537
 TGeoBuilder.cxx:538
 TGeoBuilder.cxx:539
 TGeoBuilder.cxx:540
 TGeoBuilder.cxx:541
 TGeoBuilder.cxx:542
 TGeoBuilder.cxx:543
 TGeoBuilder.cxx:544
 TGeoBuilder.cxx:545
 TGeoBuilder.cxx:546
 TGeoBuilder.cxx:547
 TGeoBuilder.cxx:548
 TGeoBuilder.cxx:549
 TGeoBuilder.cxx:550
 TGeoBuilder.cxx:551
 TGeoBuilder.cxx:552
 TGeoBuilder.cxx:553
 TGeoBuilder.cxx:554
 TGeoBuilder.cxx:555
 TGeoBuilder.cxx:556
 TGeoBuilder.cxx:557
 TGeoBuilder.cxx:558
 TGeoBuilder.cxx:559
 TGeoBuilder.cxx:560
 TGeoBuilder.cxx:561
 TGeoBuilder.cxx:562
 TGeoBuilder.cxx:563
 TGeoBuilder.cxx:564
 TGeoBuilder.cxx:565
 TGeoBuilder.cxx:566
 TGeoBuilder.cxx:567
 TGeoBuilder.cxx:568
 TGeoBuilder.cxx:569
 TGeoBuilder.cxx:570
 TGeoBuilder.cxx:571
 TGeoBuilder.cxx:572
 TGeoBuilder.cxx:573
 TGeoBuilder.cxx:574
 TGeoBuilder.cxx:575
 TGeoBuilder.cxx:576
 TGeoBuilder.cxx:577
 TGeoBuilder.cxx:578
 TGeoBuilder.cxx:579
 TGeoBuilder.cxx:580
 TGeoBuilder.cxx:581
 TGeoBuilder.cxx:582
 TGeoBuilder.cxx:583
 TGeoBuilder.cxx:584
 TGeoBuilder.cxx:585
 TGeoBuilder.cxx:586
 TGeoBuilder.cxx:587
 TGeoBuilder.cxx:588
 TGeoBuilder.cxx:589
 TGeoBuilder.cxx:590
 TGeoBuilder.cxx:591
 TGeoBuilder.cxx:592
 TGeoBuilder.cxx:593
 TGeoBuilder.cxx:594
 TGeoBuilder.cxx:595
 TGeoBuilder.cxx:596
 TGeoBuilder.cxx:597
 TGeoBuilder.cxx:598
 TGeoBuilder.cxx:599
 TGeoBuilder.cxx:600
 TGeoBuilder.cxx:601
 TGeoBuilder.cxx:602
 TGeoBuilder.cxx:603
 TGeoBuilder.cxx:604
 TGeoBuilder.cxx:605
 TGeoBuilder.cxx:606
 TGeoBuilder.cxx:607
 TGeoBuilder.cxx:608
 TGeoBuilder.cxx:609
 TGeoBuilder.cxx:610
 TGeoBuilder.cxx:611
 TGeoBuilder.cxx:612
 TGeoBuilder.cxx:613
 TGeoBuilder.cxx:614
 TGeoBuilder.cxx:615
 TGeoBuilder.cxx:616
 TGeoBuilder.cxx:617
 TGeoBuilder.cxx:618
 TGeoBuilder.cxx:619
 TGeoBuilder.cxx:620
 TGeoBuilder.cxx:621
 TGeoBuilder.cxx:622
 TGeoBuilder.cxx:623
 TGeoBuilder.cxx:624
 TGeoBuilder.cxx:625
 TGeoBuilder.cxx:626
 TGeoBuilder.cxx:627
 TGeoBuilder.cxx:628
 TGeoBuilder.cxx:629
 TGeoBuilder.cxx:630
 TGeoBuilder.cxx:631
 TGeoBuilder.cxx:632
 TGeoBuilder.cxx:633
 TGeoBuilder.cxx:634
 TGeoBuilder.cxx:635
 TGeoBuilder.cxx:636
 TGeoBuilder.cxx:637
 TGeoBuilder.cxx:638
 TGeoBuilder.cxx:639
 TGeoBuilder.cxx:640
 TGeoBuilder.cxx:641
 TGeoBuilder.cxx:642
 TGeoBuilder.cxx:643
 TGeoBuilder.cxx:644
 TGeoBuilder.cxx:645
 TGeoBuilder.cxx:646
 TGeoBuilder.cxx:647
 TGeoBuilder.cxx:648
 TGeoBuilder.cxx:649
 TGeoBuilder.cxx:650
 TGeoBuilder.cxx:651
 TGeoBuilder.cxx:652
 TGeoBuilder.cxx:653
 TGeoBuilder.cxx:654
 TGeoBuilder.cxx:655
 TGeoBuilder.cxx:656
 TGeoBuilder.cxx:657
 TGeoBuilder.cxx:658
 TGeoBuilder.cxx:659
 TGeoBuilder.cxx:660
 TGeoBuilder.cxx:661
 TGeoBuilder.cxx:662
 TGeoBuilder.cxx:663
 TGeoBuilder.cxx:664
 TGeoBuilder.cxx:665
 TGeoBuilder.cxx:666
 TGeoBuilder.cxx:667
 TGeoBuilder.cxx:668
 TGeoBuilder.cxx:669
 TGeoBuilder.cxx:670
 TGeoBuilder.cxx:671
 TGeoBuilder.cxx:672
 TGeoBuilder.cxx:673
 TGeoBuilder.cxx:674
 TGeoBuilder.cxx:675
 TGeoBuilder.cxx:676
 TGeoBuilder.cxx:677
 TGeoBuilder.cxx:678
 TGeoBuilder.cxx:679
 TGeoBuilder.cxx:680
 TGeoBuilder.cxx:681
 TGeoBuilder.cxx:682
 TGeoBuilder.cxx:683
 TGeoBuilder.cxx:684
 TGeoBuilder.cxx:685
 TGeoBuilder.cxx:686
 TGeoBuilder.cxx:687
 TGeoBuilder.cxx:688
 TGeoBuilder.cxx:689
 TGeoBuilder.cxx:690
 TGeoBuilder.cxx:691
 TGeoBuilder.cxx:692
 TGeoBuilder.cxx:693
 TGeoBuilder.cxx:694
 TGeoBuilder.cxx:695
 TGeoBuilder.cxx:696
 TGeoBuilder.cxx:697
 TGeoBuilder.cxx:698
 TGeoBuilder.cxx:699
 TGeoBuilder.cxx:700
 TGeoBuilder.cxx:701
 TGeoBuilder.cxx:702
 TGeoBuilder.cxx:703
 TGeoBuilder.cxx:704
 TGeoBuilder.cxx:705
 TGeoBuilder.cxx:706
 TGeoBuilder.cxx:707
 TGeoBuilder.cxx:708
 TGeoBuilder.cxx:709
 TGeoBuilder.cxx:710
 TGeoBuilder.cxx:711
 TGeoBuilder.cxx:712
 TGeoBuilder.cxx:713
 TGeoBuilder.cxx:714
 TGeoBuilder.cxx:715
 TGeoBuilder.cxx:716
 TGeoBuilder.cxx:717
 TGeoBuilder.cxx:718
 TGeoBuilder.cxx:719
 TGeoBuilder.cxx:720
 TGeoBuilder.cxx:721
 TGeoBuilder.cxx:722
 TGeoBuilder.cxx:723
 TGeoBuilder.cxx:724
 TGeoBuilder.cxx:725
 TGeoBuilder.cxx:726
 TGeoBuilder.cxx:727
 TGeoBuilder.cxx:728
 TGeoBuilder.cxx:729
 TGeoBuilder.cxx:730
 TGeoBuilder.cxx:731
 TGeoBuilder.cxx:732
 TGeoBuilder.cxx:733
 TGeoBuilder.cxx:734
 TGeoBuilder.cxx:735
 TGeoBuilder.cxx:736
 TGeoBuilder.cxx:737
 TGeoBuilder.cxx:738
 TGeoBuilder.cxx:739
 TGeoBuilder.cxx:740
 TGeoBuilder.cxx:741
 TGeoBuilder.cxx:742
 TGeoBuilder.cxx:743
 TGeoBuilder.cxx:744
 TGeoBuilder.cxx:745
 TGeoBuilder.cxx:746
 TGeoBuilder.cxx:747
 TGeoBuilder.cxx:748
 TGeoBuilder.cxx:749
 TGeoBuilder.cxx:750
 TGeoBuilder.cxx:751
 TGeoBuilder.cxx:752
 TGeoBuilder.cxx:753
 TGeoBuilder.cxx:754
 TGeoBuilder.cxx:755
 TGeoBuilder.cxx:756
 TGeoBuilder.cxx:757
 TGeoBuilder.cxx:758
 TGeoBuilder.cxx:759
 TGeoBuilder.cxx:760
 TGeoBuilder.cxx:761
 TGeoBuilder.cxx:762
 TGeoBuilder.cxx:763
 TGeoBuilder.cxx:764
 TGeoBuilder.cxx:765
 TGeoBuilder.cxx:766
 TGeoBuilder.cxx:767
 TGeoBuilder.cxx:768
 TGeoBuilder.cxx:769
 TGeoBuilder.cxx:770
 TGeoBuilder.cxx:771
 TGeoBuilder.cxx:772
 TGeoBuilder.cxx:773
 TGeoBuilder.cxx:774
 TGeoBuilder.cxx:775
 TGeoBuilder.cxx:776
 TGeoBuilder.cxx:777
 TGeoBuilder.cxx:778
 TGeoBuilder.cxx:779
 TGeoBuilder.cxx:780
 TGeoBuilder.cxx:781
 TGeoBuilder.cxx:782
 TGeoBuilder.cxx:783
 TGeoBuilder.cxx:784
 TGeoBuilder.cxx:785
 TGeoBuilder.cxx:786
 TGeoBuilder.cxx:787
 TGeoBuilder.cxx:788
 TGeoBuilder.cxx:789
 TGeoBuilder.cxx:790
 TGeoBuilder.cxx:791
 TGeoBuilder.cxx:792
 TGeoBuilder.cxx:793
 TGeoBuilder.cxx:794
 TGeoBuilder.cxx:795
 TGeoBuilder.cxx:796
 TGeoBuilder.cxx:797
 TGeoBuilder.cxx:798
 TGeoBuilder.cxx:799
 TGeoBuilder.cxx:800
 TGeoBuilder.cxx:801
 TGeoBuilder.cxx:802
 TGeoBuilder.cxx:803
 TGeoBuilder.cxx:804
 TGeoBuilder.cxx:805
 TGeoBuilder.cxx:806
 TGeoBuilder.cxx:807
 TGeoBuilder.cxx:808
 TGeoBuilder.cxx:809
 TGeoBuilder.cxx:810
 TGeoBuilder.cxx:811
 TGeoBuilder.cxx:812
 TGeoBuilder.cxx:813
 TGeoBuilder.cxx:814
 TGeoBuilder.cxx:815
 TGeoBuilder.cxx:816
 TGeoBuilder.cxx:817
 TGeoBuilder.cxx:818
 TGeoBuilder.cxx:819
 TGeoBuilder.cxx:820
 TGeoBuilder.cxx:821
 TGeoBuilder.cxx:822
 TGeoBuilder.cxx:823
 TGeoBuilder.cxx:824
 TGeoBuilder.cxx:825
 TGeoBuilder.cxx:826
 TGeoBuilder.cxx:827
 TGeoBuilder.cxx:828
 TGeoBuilder.cxx:829
 TGeoBuilder.cxx:830
 TGeoBuilder.cxx:831
 TGeoBuilder.cxx:832
 TGeoBuilder.cxx:833
 TGeoBuilder.cxx:834
 TGeoBuilder.cxx:835
 TGeoBuilder.cxx:836
 TGeoBuilder.cxx:837
 TGeoBuilder.cxx:838
 TGeoBuilder.cxx:839
 TGeoBuilder.cxx:840
 TGeoBuilder.cxx:841
 TGeoBuilder.cxx:842
 TGeoBuilder.cxx:843
 TGeoBuilder.cxx:844
 TGeoBuilder.cxx:845
 TGeoBuilder.cxx:846
 TGeoBuilder.cxx:847
 TGeoBuilder.cxx:848
 TGeoBuilder.cxx:849
 TGeoBuilder.cxx:850
 TGeoBuilder.cxx:851
 TGeoBuilder.cxx:852
 TGeoBuilder.cxx:853
 TGeoBuilder.cxx:854
 TGeoBuilder.cxx:855
 TGeoBuilder.cxx:856
 TGeoBuilder.cxx:857
 TGeoBuilder.cxx:858
 TGeoBuilder.cxx:859
 TGeoBuilder.cxx:860
 TGeoBuilder.cxx:861
 TGeoBuilder.cxx:862
 TGeoBuilder.cxx:863
 TGeoBuilder.cxx:864
 TGeoBuilder.cxx:865
 TGeoBuilder.cxx:866
 TGeoBuilder.cxx:867
 TGeoBuilder.cxx:868
 TGeoBuilder.cxx:869
 TGeoBuilder.cxx:870
 TGeoBuilder.cxx:871
 TGeoBuilder.cxx:872
 TGeoBuilder.cxx:873
 TGeoBuilder.cxx:874
 TGeoBuilder.cxx:875
 TGeoBuilder.cxx:876
 TGeoBuilder.cxx:877
 TGeoBuilder.cxx:878
 TGeoBuilder.cxx:879
 TGeoBuilder.cxx:880
 TGeoBuilder.cxx:881
 TGeoBuilder.cxx:882
 TGeoBuilder.cxx:883
 TGeoBuilder.cxx:884
 TGeoBuilder.cxx:885
 TGeoBuilder.cxx:886
 TGeoBuilder.cxx:887
 TGeoBuilder.cxx:888
 TGeoBuilder.cxx:889
 TGeoBuilder.cxx:890
 TGeoBuilder.cxx:891
 TGeoBuilder.cxx:892
 TGeoBuilder.cxx:893
 TGeoBuilder.cxx:894
 TGeoBuilder.cxx:895
 TGeoBuilder.cxx:896
 TGeoBuilder.cxx:897
 TGeoBuilder.cxx:898
 TGeoBuilder.cxx:899
 TGeoBuilder.cxx:900
 TGeoBuilder.cxx:901
 TGeoBuilder.cxx:902
 TGeoBuilder.cxx:903
 TGeoBuilder.cxx:904
 TGeoBuilder.cxx:905
 TGeoBuilder.cxx:906
 TGeoBuilder.cxx:907
 TGeoBuilder.cxx:908
 TGeoBuilder.cxx:909
 TGeoBuilder.cxx:910
 TGeoBuilder.cxx:911
 TGeoBuilder.cxx:912
 TGeoBuilder.cxx:913
 TGeoBuilder.cxx:914
 TGeoBuilder.cxx:915
 TGeoBuilder.cxx:916
 TGeoBuilder.cxx:917
 TGeoBuilder.cxx:918
 TGeoBuilder.cxx:919
 TGeoBuilder.cxx:920
 TGeoBuilder.cxx:921
 TGeoBuilder.cxx:922
 TGeoBuilder.cxx:923
 TGeoBuilder.cxx:924
 TGeoBuilder.cxx:925
 TGeoBuilder.cxx:926
 TGeoBuilder.cxx:927
 TGeoBuilder.cxx:928
 TGeoBuilder.cxx:929
 TGeoBuilder.cxx:930
 TGeoBuilder.cxx:931
 TGeoBuilder.cxx:932
 TGeoBuilder.cxx:933
 TGeoBuilder.cxx:934
 TGeoBuilder.cxx:935
 TGeoBuilder.cxx:936
 TGeoBuilder.cxx:937
 TGeoBuilder.cxx:938
 TGeoBuilder.cxx:939
 TGeoBuilder.cxx:940
 TGeoBuilder.cxx:941
 TGeoBuilder.cxx:942
 TGeoBuilder.cxx:943
 TGeoBuilder.cxx:944
 TGeoBuilder.cxx:945
 TGeoBuilder.cxx:946
 TGeoBuilder.cxx:947
 TGeoBuilder.cxx:948
 TGeoBuilder.cxx:949
 TGeoBuilder.cxx:950
 TGeoBuilder.cxx:951
 TGeoBuilder.cxx:952
 TGeoBuilder.cxx:953
 TGeoBuilder.cxx:954
 TGeoBuilder.cxx:955
 TGeoBuilder.cxx:956
 TGeoBuilder.cxx:957
 TGeoBuilder.cxx:958
 TGeoBuilder.cxx:959
 TGeoBuilder.cxx:960
 TGeoBuilder.cxx:961
 TGeoBuilder.cxx:962
 TGeoBuilder.cxx:963
 TGeoBuilder.cxx:964
 TGeoBuilder.cxx:965
 TGeoBuilder.cxx:966
 TGeoBuilder.cxx:967
 TGeoBuilder.cxx:968
 TGeoBuilder.cxx:969
 TGeoBuilder.cxx:970
 TGeoBuilder.cxx:971
 TGeoBuilder.cxx:972
 TGeoBuilder.cxx:973
 TGeoBuilder.cxx:974
 TGeoBuilder.cxx:975
 TGeoBuilder.cxx:976
 TGeoBuilder.cxx:977
 TGeoBuilder.cxx:978
 TGeoBuilder.cxx:979
 TGeoBuilder.cxx:980
 TGeoBuilder.cxx:981
 TGeoBuilder.cxx:982
 TGeoBuilder.cxx:983
 TGeoBuilder.cxx:984
 TGeoBuilder.cxx:985
 TGeoBuilder.cxx:986
 TGeoBuilder.cxx:987
 TGeoBuilder.cxx:988
 TGeoBuilder.cxx:989
 TGeoBuilder.cxx:990
 TGeoBuilder.cxx:991
 TGeoBuilder.cxx:992
 TGeoBuilder.cxx:993
 TGeoBuilder.cxx:994
 TGeoBuilder.cxx:995
 TGeoBuilder.cxx:996
 TGeoBuilder.cxx:997
 TGeoBuilder.cxx:998
 TGeoBuilder.cxx:999
 TGeoBuilder.cxx:1000
 TGeoBuilder.cxx:1001
 TGeoBuilder.cxx:1002
 TGeoBuilder.cxx:1003
 TGeoBuilder.cxx:1004
 TGeoBuilder.cxx:1005
 TGeoBuilder.cxx:1006
 TGeoBuilder.cxx:1007
 TGeoBuilder.cxx:1008
 TGeoBuilder.cxx:1009
 TGeoBuilder.cxx:1010
 TGeoBuilder.cxx:1011
 TGeoBuilder.cxx:1012
 TGeoBuilder.cxx:1013
 TGeoBuilder.cxx:1014
 TGeoBuilder.cxx:1015