```// @(#)root/geom:\$Id\$
// Author: Andrei Gheata   24/10/01
// TGeoTube::Contains() and DistFromInside/In() implemented by Mihaela Gheata

/*************************************************************************
*                                                                       *
* For the licensing terms see \$ROOTSYS/LICENSE.                         *
* For the list of contributors see \$ROOTSYS/README/CREDITS.             *
*************************************************************************/

//_____________________________________________________________________________
// TGeoTube - cylindrical tube class. It takes 3 parameters :
//
//_____________________________________________________________________________
//Begin_Html
/*
<img src="gif/t_tube.gif">
*/
//End_Html
//Begin_Html
/*
<img src="gif/t_tubedivR.gif">
*/
//End_Html
//Begin_Html
/*
<img src="gif/t_tubedivstepR.gif">
*/
//End_Html
//Begin_Html
/*
<img src="gif/t_tubedivPHI.gif">
*/
//End_Html
//Begin_Html
/*
<img src="gif/t_tubedivstepPHI.gif">
*/
//End_Html
//Begin_Html
/*
<img src="gif/t_tubedivZ.gif">
*/
//End_Html
//Begin_Html
/*
<img src="gif/t_tubedivstepZ.gif">
*/
//End_Html
//_____________________________________________________________________________
// TGeoTubeSeg - a phi segment of a tube. Has 5 parameters :
//            - the same 3 as a tube;
//            - first phi limit (in degrees)
//            - second phi limit
// The segment will be be placed from the first angle (first phi limit)
// to the second angle (second phi limit)
//_____________________________________________________________________________
//Begin_Html
/*
<img src="gif/t_tubseg.gif">
*/
//End_Html
//Begin_Html
/*
<img src="gif/t_tubsegdivstepR.gif">
*/
//End_Html
//Begin_Html
/*
<img src="gif/t_tubsegdivPHI.gif">
*/
//End_Html
//Begin_Html
/*
<img src="gif/t_tubsegdivZ.gif">
*/
//End_Html
//_____________________________________________________________________________
// TGeoCtub - a tube segment cut with 2 planes. Has 11 parameters :
//            - the same 5 as a tube segment;
//            - x, y, z components of the normal to the -dZ cut plane in
//              point (0, 0, -dZ);
//            - x, y, z components of the normal to the +dZ cut plane in
//              point (0, 0, dZ);
//
//_____________________________________________________________________________
//Begin_Html
/*
<img src="gif/t_ctub.gif">
*/
//End_Html

#include "Riostream.h"

#include "TGeoManager.h"
#include "TGeoVolume.h"
#include "TVirtualGeoPainter.h"
#include "TGeoTube.h"
#include "TBuffer3D.h"
#include "TBuffer3DTypes.h"
#include "TMath.h"

ClassImp(TGeoTube)

//_____________________________________________________________________________
TGeoTube::TGeoTube()
{
// Default constructor
SetShapeBit(TGeoShape::kGeoTube);
fRmin = 0.0;
fRmax = 0.0;
fDz   = 0.0;
}

//_____________________________________________________________________________
TGeoTube::TGeoTube(Double_t rmin, Double_t rmax, Double_t dz)
:TGeoBBox(0, 0, 0)
{
// Default constructor specifying minimum and maximum radius
SetShapeBit(TGeoShape::kGeoTube);
SetTubeDimensions(rmin, rmax, dz);
if ((fDz<0) || (fRmin<0) || (fRmax<0)) {
SetShapeBit(kGeoRunTimeShape);
//      if (fRmax<=fRmin) SetShapeBit(kGeoInvalidShape);
//      printf("tube : dz=%f rmin=%f rmax=%f\n", dz, rmin, rmax);
}
ComputeBBox();
}
//_____________________________________________________________________________
TGeoTube::TGeoTube(const char *name, Double_t rmin, Double_t rmax, Double_t dz)
:TGeoBBox(name, 0, 0, 0)
{
// Default constructor specifying minimum and maximum radius
SetShapeBit(TGeoShape::kGeoTube);
SetTubeDimensions(rmin, rmax, dz);
if ((fDz<0) || (fRmin<0) || (fRmax<0)) {
SetShapeBit(kGeoRunTimeShape);
//      if (fRmax<=fRmin) SetShapeBit(kGeoInvalidShape);
//      printf("tube : dz=%f rmin=%f rmax=%f\n", dz, rmin, rmax);
}
ComputeBBox();
}

//_____________________________________________________________________________
TGeoTube::TGeoTube(Double_t *param)
:TGeoBBox(0, 0, 0)
{
// Default constructor specifying minimum and maximum radius
// param[0] = Rmin
// param[1] = Rmax
// param[2] = dz
SetShapeBit(TGeoShape::kGeoTube);
SetDimensions(param);
if ((fDz<0) || (fRmin<0) || (fRmax<0)) SetShapeBit(kGeoRunTimeShape);
ComputeBBox();
}

//_____________________________________________________________________________
TGeoTube::~TGeoTube()
{
// destructor
}

//_____________________________________________________________________________
Double_t TGeoTube::Capacity() const
{
// Computes capacity of the shape in [length^3]
return TGeoTube::Capacity(fRmin,fRmax, fDz);
}

//_____________________________________________________________________________
Double_t TGeoTube::Capacity(Double_t rmin, Double_t rmax, Double_t dz)
{
// Computes capacity of the shape in [length^3]
Double_t capacity = 2.*TMath::Pi()*(rmax*rmax-rmin*rmin)*dz;
return capacity;
}

//_____________________________________________________________________________
void TGeoTube::ComputeBBox()
{
// compute bounding box of the tube
fDX = fDY = fRmax;
fDZ = fDz;
}

//_____________________________________________________________________________
void TGeoTube::ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm)
{
// Compute normal to closest surface from POINT.
Double_t saf[3];
Double_t rsq = point[0]*point[0]+point[1]*point[1];
Double_t r = TMath::Sqrt(rsq);
saf[0] = TMath::Abs(fDz-TMath::Abs(point[2]));
saf[1] = (fRmin>1E-10)?TMath::Abs(r-fRmin):TGeoShape::Big();
saf[2] = TMath::Abs(fRmax-r);
Int_t i = TMath::LocMin(3,saf);
if (i==0) {
norm[0] = norm[1] = 0.;
norm[2] = TMath::Sign(1.,dir[2]);
return;
}
norm[2] = 0;
Double_t phi = TMath::ATan2(point[1], point[0]);
norm[0] = TMath::Cos(phi);
norm[1] = TMath::Sin(phi);
if (norm[0]*dir[0]+norm[1]*dir[1]<0) {
norm[0] = -norm[0];
norm[1] = -norm[1];
}
}

//_____________________________________________________________________________
void TGeoTube::ComputeNormalS(const Double_t *point, const Double_t *dir, Double_t *norm,
Double_t /*rmin*/, Double_t /*rmax*/, Double_t /*dz*/)
{
// Compute normal to closest surface from POINT.
norm[2] = 0;
Double_t phi = TMath::ATan2(point[1], point[0]);
norm[0] = TMath::Cos(phi);
norm[1] = TMath::Sin(phi);
if (norm[0]*dir[0]+norm[1]*dir[1]<0) {
norm[0] = -norm[0];
norm[1] = -norm[1];
}
}

//_____________________________________________________________________________
Bool_t TGeoTube::Contains(const Double_t *point) const
{
// test if point is inside this tube
if (TMath::Abs(point[2]) > fDz) return kFALSE;
Double_t r2 = point[0]*point[0]+point[1]*point[1];
if ((r2<fRmin*fRmin) || (r2>fRmax*fRmax)) return kFALSE;
return kTRUE;
}

//_____________________________________________________________________________
Int_t TGeoTube::DistancetoPrimitive(Int_t px, Int_t py)
{
// compute closest distance from point px,py to each corner
Int_t n = gGeoManager->GetNsegments();
Int_t numPoints = 4*n;
if (!HasRmin()) numPoints = 2*(n+1);
return ShapeDistancetoPrimitive(numPoints, px, py);
}

//_____________________________________________________________________________
Double_t TGeoTube::DistFromInsideS(const Double_t *point, const Double_t *dir, Double_t rmin, Double_t rmax, Double_t dz)
{
// Compute distance from inside point to surface of the tube (static)
// Boundary safe algorithm.
// compute distance to surface
// Do Z
Double_t sz = TGeoShape::Big();
if (dir[2]) {
sz = (TMath::Sign(dz, dir[2])-point[2])/dir[2];
if (sz<=0) return 0.0;
}
// Do R
Double_t nsq=dir[0]*dir[0]+dir[1]*dir[1];
if (TMath::Abs(nsq)<TGeoShape::Tolerance()) return sz;
Double_t rsq=point[0]*point[0]+point[1]*point[1];
Double_t rdotn=point[0]*dir[0]+point[1]*dir[1];
Double_t b,d;
Double_t sr = TGeoShape::Big();
// inner cylinder
if (rmin>0) {
// Protection in case point is actually outside the tube
if (rsq <= rmin*rmin+TGeoShape::Tolerance()) {
if (rdotn<0) return 0.0;
} else {
if (rdotn<0) {
DistToTube(rsq,nsq,rdotn,rmin,b,d);
if (d>0) {
sr=-b-d;
if (sr>0) return TMath::Min(sz,sr);
}
}
}
}
// outer cylinder
if (rsq >= rmax*rmax-TGeoShape::Tolerance()) {
if (rdotn>=0) return 0.0;
}
DistToTube(rsq,nsq,rdotn,rmax,b,d);
if (d>0) {
sr=-b+d;
if (sr>0) return TMath::Min(sz,sr);
}
return 0.;
}

//_____________________________________________________________________________
Double_t TGeoTube::DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact, Double_t step, Double_t *safe) const
{
// Compute distance from inside point to surface of the tube
// Boundary safe algorithm.
if (iact<3 && safe) {
*safe = Safety(point, kTRUE);
if (iact==0) return TGeoShape::Big();
if ((iact==1) && (*safe>step)) return TGeoShape::Big();
}
// compute distance to surface
return DistFromInsideS(point, dir, fRmin, fRmax, fDz);
}

//_____________________________________________________________________________
Double_t TGeoTube::DistFromOutsideS(const Double_t *point, const Double_t *dir, Double_t rmin, Double_t rmax, Double_t dz)
{
// Static method to compute distance from outside point to a tube with given parameters
// Boundary safe algorithm.
// check Z planes
Double_t xi,yi,zi;
Double_t rmaxsq = rmax*rmax;
Double_t rminsq = rmin*rmin;
zi = dz - TMath::Abs(point[2]);
Double_t s = TGeoShape::Big();
Bool_t in = kFALSE;
Bool_t inz = (zi<0)?kFALSE:kTRUE;
if (!inz) {
if (point[2]*dir[2]>=0) return TGeoShape::Big();
s  = -zi/TMath::Abs(dir[2]);
xi = point[0]+s*dir[0];
yi = point[1]+s*dir[1];
Double_t r2=xi*xi+yi*yi;
if ((rminsq<=r2) && (r2<=rmaxsq)) return s;
}

Double_t rsq = point[0]*point[0]+point[1]*point[1];
// check outer cyl. surface
Double_t nsq=dir[0]*dir[0]+dir[1]*dir[1];
Double_t rdotn=point[0]*dir[0]+point[1]*dir[1];
Double_t b,d;
Bool_t inrmax = kFALSE;
Bool_t inrmin = kFALSE;
if (rsq<=rmaxsq+TGeoShape::Tolerance()) inrmax = kTRUE;
if (rsq>=rminsq-TGeoShape::Tolerance()) inrmin = kTRUE;
in = inz & inrmin & inrmax;
// If inside, we are most likely on a boundary within machine precision.
if (in) {
Bool_t checkout = kFALSE;
Double_t r = TMath::Sqrt(rsq);
if (zi<rmax-r) {
if ((TGeoShape::IsSameWithinTolerance(rmin,0)) || (zi<r-rmin)) {
if (point[2]*dir[2]<0) return 0.0;
return TGeoShape::Big();
}
}
if ((rmaxsq-rsq) < (rsq-rminsq)) checkout = kTRUE;
if (checkout) {
if (rdotn>=0) return TGeoShape::Big();
return 0.0;
}
if (TGeoShape::IsSameWithinTolerance(rmin,0)) return 0.0;
if (rdotn>=0) return 0.0;
// Ray exiting rmin -> check (+) solution for inner tube
if (TMath::Abs(nsq)<TGeoShape::Tolerance()) return TGeoShape::Big();
DistToTube(rsq, nsq, rdotn, rmin, b, d);
if (d>0) {
s=-b+d;
if (s>0) {
zi=point[2]+s*dir[2];
if (TMath::Abs(zi)<=dz) return s;
}
}
return TGeoShape::Big();
}
// Check outer cylinder (only r>rmax has to be considered)
if (TMath::Abs(nsq)<TGeoShape::Tolerance()) return TGeoShape::Big();
if (!inrmax) {
DistToTube(rsq, nsq, rdotn, rmax, b, d);
if (d>0) {
s=-b-d;
if (s>0) {
zi=point[2]+s*dir[2];
if (TMath::Abs(zi)<=dz) return s;
}
}
}
// check inner cylinder
if (rmin>0) {
DistToTube(rsq, nsq, rdotn, rmin, b, d);
if (d>0) {
s=-b+d;
if (s>0) {
zi=point[2]+s*dir[2];
if (TMath::Abs(zi)<=dz) return s;
}
}
}
return TGeoShape::Big();
}

//_____________________________________________________________________________
Double_t TGeoTube::DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact, Double_t step, Double_t *safe) const
{
// Compute distance from outside point to surface of the tube and safe distance
// Boundary safe algorithm.
// fist localize point w.r.t tube
if (iact<3 && safe) {
*safe = Safety(point, kFALSE);
if (iact==0) return TGeoShape::Big();
if ((iact==1) && (step<=*safe)) return TGeoShape::Big();
}
// Check if the bounding box is crossed within the requested distance
Double_t sdist = TGeoBBox::DistFromOutside(point,dir, fDX, fDY, fDZ, fOrigin, step);
if (sdist>=step) return TGeoShape::Big();
// find distance to shape
return DistFromOutsideS(point, dir, fRmin, fRmax, fDz);
}

//_____________________________________________________________________________
void TGeoTube::DistToTube(Double_t rsq, Double_t nsq, Double_t rdotn, Double_t radius, Double_t &b, Double_t &delta)
{
// Static method computing the distance to a tube with given radius, starting from
// POINT along DIR director cosines. The distance is computed as :
//    RSQ   = point[0]*point[0]+point[1]*point[1]
//    NSQ   = dir[0]*dir[0]+dir[1]*dir[1]  ---> should NOT be 0 !!!
//    RDOTN = point[0]*dir[0]+point[1]*dir[1]
// The distance can be computed as :
//    D = -B +/- DELTA
// where DELTA.GT.0 and D.GT.0

Double_t t1 = 1./nsq;
b          = t1*rdotn;
Double_t c =t1*t3;
delta = b*b-c;
if (delta>0) {
delta=TMath::Sqrt(delta);
} else {
delta = -1;
}
}

//_____________________________________________________________________________
TGeoVolume *TGeoTube::Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv,
Double_t start, Double_t step)
{
//--- Divide this tube shape belonging to volume "voldiv" into ndiv volumes
// called divname, from start position with the given step. Returns pointer
// to created division cell volume in case of Z divisions. For radial division
// creates all volumes with different shapes and returns pointer to volume that
// was divided. In case a wrong division axis is supplied, returns pointer to
// volume that was divided.
TGeoShape *shape;           //--- shape to be created
TGeoVolume *vol;            //--- division volume to be created
TGeoVolumeMulti *vmulti;    //--- generic divided volume
TGeoPatternFinder *finder;  //--- finder to be attached
TString opt = "";           //--- option to be attached
Int_t id;
Double_t end = start+ndiv*step;
switch (iaxis) {
case 1:  //---                R division
finder = new TGeoPatternCylR(voldiv, ndiv, start, end);
vmulti = gGeoManager->MakeVolumeMulti(divname, voldiv->GetMedium());
voldiv->SetFinder(finder);
finder->SetDivIndex(voldiv->GetNdaughters());
for (id=0; id<ndiv; id++) {
shape = new TGeoTube(start+id*step, start+(id+1)*step, fDz);
vol = new TGeoVolume(divname, shape, voldiv->GetMedium());
opt = "R";
((TGeoNodeOffset*)voldiv->GetNodes()->At(voldiv->GetNdaughters()-1))->SetFinder(finder);
}
return vmulti;
case 2:  //---                Phi division
finder = new TGeoPatternCylPhi(voldiv, ndiv, start, end);
voldiv->SetFinder(finder);
finder->SetDivIndex(voldiv->GetNdaughters());
shape = new TGeoTubeSeg(fRmin, fRmax, fDz, -step/2, step/2);
vol = new TGeoVolume(divname, shape, voldiv->GetMedium());
vmulti = gGeoManager->MakeVolumeMulti(divname, voldiv->GetMedium());
opt = "Phi";
for (id=0; id<ndiv; id++) {
((TGeoNodeOffset*)voldiv->GetNodes()->At(voldiv->GetNdaughters()-1))->SetFinder(finder);
}
return vmulti;
case 3: //---                  Z division
finder = new TGeoPatternZ(voldiv, ndiv, start, start+ndiv*step);
voldiv->SetFinder(finder);
finder->SetDivIndex(voldiv->GetNdaughters());
shape = new TGeoTube(fRmin, fRmax, step/2);
vol = new TGeoVolume(divname, shape, voldiv->GetMedium());
vmulti = gGeoManager->MakeVolumeMulti(divname, voldiv->GetMedium());
opt = "Z";
for (id=0; id<ndiv; id++) {
((TGeoNodeOffset*)voldiv->GetNodes()->At(voldiv->GetNdaughters()-1))->SetFinder(finder);
}
return vmulti;
default:
Error("Divide", "In shape %s wrong axis type for division", GetName());
return 0;
}
}

//_____________________________________________________________________________
const char *TGeoTube::GetAxisName(Int_t iaxis) const
{
// Returns name of axis IAXIS.
switch (iaxis) {
case 1:
return "R";
case 2:
return "PHI";
case 3:
return "Z";
default:
return "UNDEFINED";
}
}

//_____________________________________________________________________________
Double_t TGeoTube::GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const
{
// Get range of shape for a given axis.
xlo = 0;
xhi = 0;
Double_t dx = 0;
switch (iaxis) {
case 1:
xlo = fRmin;
xhi = fRmax;
dx = xhi-xlo;
return dx;
case 2:
xlo = 0;
xhi = 360;
dx = 360;
return dx;
case 3:
xlo = -fDz;
xhi = fDz;
dx = xhi-xlo;
return dx;
}
return dx;
}

//_____________________________________________________________________________
void TGeoTube::GetBoundingCylinder(Double_t *param) const
{
//--- Fill vector param[4] with the bounding cylinder parameters. The order
// is the following : Rmin, Rmax, Phi1, Phi2, dZ
param[0] = fRmin; // Rmin
param[0] *= param[0];
param[1] = fRmax; // Rmax
param[1] *= param[1];
param[2] = 0.;    // Phi1
param[3] = 360.;  // Phi2
}

//_____________________________________________________________________________
TGeoShape *TGeoTube::GetMakeRuntimeShape(TGeoShape *mother, TGeoMatrix * /*mat*/) const
{
// in case shape has some negative parameters, these has to be computed
// in order to fit the mother
if (!TestShapeBit(kGeoRunTimeShape)) return 0;
Double_t rmin, rmax, dz;
Double_t xmin,xmax;
rmin = fRmin;
rmax = fRmax;
dz = fDz;
if (fDz<0) {
mother->GetAxisRange(3,xmin,xmax);
if (xmax<0) return 0;
dz=xmax;
}
mother->GetAxisRange(1,xmin,xmax);
if (fRmin<0) {
if (xmin<0) return 0;
rmin = xmin;
}
if (fRmax<0) {
if (xmax<=0) return 0;
rmax = xmax;
}

return (new TGeoTube(GetName(), rmin, rmax, dz));
}

//_____________________________________________________________________________
void TGeoTube::InspectShape() const
{
// print shape parameters
printf("*** Shape %s: TGeoTube ***\n", GetName());
printf("    Rmin = %11.5f\n", fRmin);
printf("    Rmax = %11.5f\n", fRmax);
printf("    dz   = %11.5f\n", fDz);
printf(" Bounding box:\n");
TGeoBBox::InspectShape();
}

//_____________________________________________________________________________
TBuffer3D *TGeoTube::MakeBuffer3D() const
{
// Creates a TBuffer3D describing *this* shape.
// Coordinates are in local reference frame.

Int_t n = gGeoManager->GetNsegments();
Int_t nbPnts = 4*n;
Int_t nbSegs = 8*n;
Int_t nbPols = 4*n;
if (!HasRmin()) {
nbPnts = 2*(n+1);
nbSegs = 5*n;
nbPols = 3*n;
}
TBuffer3D* buff = new TBuffer3D(TBuffer3DTypes::kGeneric,
nbPnts, 3*nbPnts, nbSegs, 3*nbSegs, nbPols, 6*nbPols);
if (buff)
{
SetPoints(buff->fPnts);
SetSegsAndPols(*buff);
}

return buff;
}

//_____________________________________________________________________________
void TGeoTube::SetSegsAndPols(TBuffer3D &buffer) const
{
// Fill TBuffer3D structure for segments and polygons.
Int_t i, j,indx;
Int_t n = gGeoManager->GetNsegments();
Int_t c = (((buffer.fColor) %8) -1) * 4;
if (c < 0) c = 0;

if (HasRmin()) {
// circle segments:
// lower rmin circle: i=0, (0, n-1)
// lower rmax circle: i=1, (n, 2n-1)
// upper rmin circle: i=2, (2n, 3n-1)
// upper rmax circle: i=1, (3n, 4n-1)
for (i = 0; i < 4; i++) {
for (j = 0; j < n; j++) {
indx = 3*(i*n+j);
buffer.fSegs[indx  ] = c;
buffer.fSegs[indx+1] = i*n+j;
buffer.fSegs[indx+2] = i*n+(j+1)%n;
}
}
// Z-parallel segments
// inner: i=4, (4n, 5n-1)
// outer: i=5, (5n, 6n-1)
for (i = 4; i < 6; i++) {
for (j = 0; j < n; j++) {
indx = 3*(i*n+j);
buffer.fSegs[indx  ] = c+1;
buffer.fSegs[indx+1] = (i-4)*n+j;
buffer.fSegs[indx+2] = (i-2)*n+j;
}
}
// lower: i=6, (6n, 7n-1)
// upper: i=7, (7n, 8n-1)
for (i = 6; i < 8; i++) {
for (j = 0; j < n; j++) {
indx = 3*(i*n+j);
buffer.fSegs[indx  ] = c;
buffer.fSegs[indx+1] = 2*(i-6)*n+j;
buffer.fSegs[indx+2] = (2*(i-6)+1)*n+j;
}
}
// Polygons
i=0;
// Inner lateral (0, n-1)
for (j = 0; j < n; j++) {
indx = 6*(i*n+j);
buffer.fPols[indx  ] = c;
buffer.fPols[indx+1] = 4;
buffer.fPols[indx+2] = j;
buffer.fPols[indx+3] = 4*n+(j+1)%n;
buffer.fPols[indx+4] = 2*n+j;
buffer.fPols[indx+5] = 4*n+j;
}
i=1;
// Outer lateral (n,2n-1)
for (j = 0; j < n; j++) {
indx = 6*(i*n+j);
buffer.fPols[indx  ] = c+1;
buffer.fPols[indx+1] = 4;
buffer.fPols[indx+2] = n+j;
buffer.fPols[indx+3] = 5*n+j;
buffer.fPols[indx+4] = 3*n+j;
buffer.fPols[indx+5] = 5*n+(j+1)%n;
}
i=2;
// lower disc (2n, 3n-1)
for (j = 0; j < n; j++) {
indx = 6*(i*n+j);
buffer.fPols[indx  ] = c;
buffer.fPols[indx+1] = 4;
buffer.fPols[indx+2] = j;
buffer.fPols[indx+3] = 6*n+j;
buffer.fPols[indx+4] = n+j;
buffer.fPols[indx+5] = 6*n+(j+1)%n;
}
i=3;
// upper disc (3n, 4n-1)
for (j = 0; j < n; j++) {
indx = 6*(i*n+j);
buffer.fPols[indx  ] = c;
buffer.fPols[indx+1] = 4;
buffer.fPols[indx+2] = 2*n+j;
buffer.fPols[indx+3] = 7*n+(j+1)%n;
buffer.fPols[indx+4] = 3*n+j;
buffer.fPols[indx+5] = 7*n+j;
}
return;
}
// Rmin=0 tubes
// circle segments
// lower rmax circle: i=0, (0, n-1)
// upper rmax circle: i=1, (n, 2n-1)
for (i = 0; i < 2; i++) {
for (j = 0; j < n; j++) {
indx = 3*(i*n+j);
buffer.fSegs[indx  ] = c;
buffer.fSegs[indx+1] = 2+i*n+j;
buffer.fSegs[indx+2] = 2+i*n+(j+1)%n;
}
}
// Z-parallel segments (2n,3n-1)
for (j = 0; j < n; j++) {
indx = 3*(2*n+j);
buffer.fSegs[indx  ] = c+1;
buffer.fSegs[indx+1] = 2+j;
buffer.fSegs[indx+2] = 2+n+j;
}
// Lower circle: i=3, (3n,4n-1)
// Upper circle: i=4, (4n,5n-1)
for (i = 3; i < 5; i++) {
for (j = 0; j < n; j++) {
indx = 3*(i*n+j);
buffer.fSegs[indx  ] = c;
buffer.fSegs[indx+1] = i-3;
buffer.fSegs[indx+2] = 2+(i-3)*n+j;
}
}
// Polygons
// lateral (0,n-1)
for (j = 0; j < n; j++) {
indx = 6*j;
buffer.fPols[indx  ] = c+1;
buffer.fPols[indx+1] = 4;
buffer.fPols[indx+2] = j;
buffer.fPols[indx+3] = 2*n+j;
buffer.fPols[indx+4] = n+j;
buffer.fPols[indx+5] = 2*n+(j+1)%n;
}
// bottom triangles (n,2n-1)
for (j = 0; j < n; j++) {
indx = 6*n + 5*j;
buffer.fPols[indx  ] = c;
buffer.fPols[indx+1] = 3;
buffer.fPols[indx+2] = j;
buffer.fPols[indx+3] = 3*n+(j+1)%n;
buffer.fPols[indx+4] = 3*n+j;
}
// top triangles (2n,3n-1)
for (j = 0; j < n; j++) {
indx = 6*n + 5*n + 5*j;
buffer.fPols[indx  ] = c;
buffer.fPols[indx+1] = 3;
buffer.fPols[indx+2] = n+j;
buffer.fPols[indx+3] = 4*n+j;
buffer.fPols[indx+4] = 4*n+(j+1)%n;
}
}

//_____________________________________________________________________________
Double_t TGeoTube::Safety(const Double_t *point, Bool_t in) const
{
// computes the closest distance from given point to this shape, according
// to option. The matching point on the shape is stored in spoint.
#ifndef NEVER
Double_t r = TMath::Sqrt(point[0]*point[0]+point[1]*point[1]);
Double_t safe, safrmin, safrmax;
if (in) {
safe    = fDz-TMath::Abs(point[2]); // positive if inside
if (fRmin>1E-10) {
safrmin = r-fRmin;
if (safrmin < safe) safe = safrmin;
}
safrmax = fRmax-r;
if (safrmax < safe) safe = safrmax;
} else {
safe    = -fDz+TMath::Abs(point[2]);
if (fRmin>1E-10) {
safrmin = -r+fRmin;
if (safrmin > safe) safe = safrmin;
}
safrmax = -fRmax+r;
if (safrmax > safe) safe = safrmax;
}
return safe;
#else
Double_t saf[3];
Double_t rsq = point[0]*point[0]+point[1]*point[1];
Double_t r = TMath::Sqrt(rsq);
saf[0] = fDz-TMath::Abs(point[2]); // positive if inside
saf[1] = (fRmin>1E-10)?(r-fRmin):TGeoShape::Big();
saf[2] = fRmax-r;
if (in) return saf[TMath::LocMin(3,saf)];
for (Int_t i=0; i<3; i++) saf[i]=-saf[i];
return saf[TMath::LocMax(3,saf)];
#endif
}

//_____________________________________________________________________________
Double_t TGeoTube::SafetyS(const Double_t *point, Bool_t in, Double_t rmin, Double_t rmax, Double_t dz, Int_t skipz)
{
// computes the closest distance from given point to this shape, according
// to option. The matching point on the shape is stored in spoint.
Double_t saf[3];
Double_t rsq = point[0]*point[0]+point[1]*point[1];
Double_t r = TMath::Sqrt(rsq);
switch (skipz) {
case 1: // skip lower Z plane
saf[0] = dz - point[2];
break;
case 2: // skip upper Z plane
saf[0] = dz + point[2];
break;
case 3: // skip both
saf[0] = TGeoShape::Big();
break;
default:
saf[0] = dz-TMath::Abs(point[2]);
}
saf[1] = (rmin>1E-10)?(r-rmin):TGeoShape::Big();
saf[2] = rmax-r;
//   printf("saf0=%g saf1=%g saf2=%g in=%d skipz=%d\n", saf[0],saf[1],saf[2],in,skipz);
if (in) return saf[TMath::LocMin(3,saf)];
for (Int_t i=0; i<3; i++) saf[i]=-saf[i];
return saf[TMath::LocMax(3,saf)];
}

//_____________________________________________________________________________
void TGeoTube::SavePrimitive(std::ostream &out, Option_t * /*option*/ /*= ""*/)
{
// Save a primitive as a C++ statement(s) on output stream "out".
if (TObject::TestBit(kGeoSavePrimitive)) return;
out << "   // Shape: " << GetName() << " type: " << ClassName() << std::endl;
out << "   rmin = " << fRmin << ";" << std::endl;
out << "   rmax = " << fRmax << ";" << std::endl;
out << "   dz   = " << fDz << ";" << std::endl;
out << "   TGeoShape *" << GetPointerName() << " = new TGeoTube(\"" << GetName() << "\",rmin,rmax,dz);" << std::endl;
TObject::SetBit(TGeoShape::kGeoSavePrimitive);
}

//_____________________________________________________________________________
void TGeoTube::SetTubeDimensions(Double_t rmin, Double_t rmax, Double_t dz)
{
// Set tube dimensions.
fRmin = rmin;
fRmax = rmax;
fDz   = dz;
if (fRmin>0 && fRmax>0 && fRmin>=fRmax)
Error("SetTubeDimensions", "In shape %s wrong rmin=%g rmax=%g", GetName(), rmin,rmax);
}

//_____________________________________________________________________________
void TGeoTube::SetDimensions(Double_t *param)
{
// Set tube dimensions starting from a list.
Double_t rmin = param[0];
Double_t rmax = param[1];
Double_t dz   = param[2];
SetTubeDimensions(rmin, rmax, dz);
}

//_____________________________________________________________________________
Bool_t TGeoTube::GetPointsOnSegments(Int_t npoints, Double_t *array) const
{
// Fills array with n random points located on the line segments of the shape mesh.
// The output array must be provided with a length of minimum 3*npoints. Returns
// true if operation is implemented.
if (npoints > (npoints/2)*2) {
Error("GetPointsOnSegments","Npoints must be even number");
return kFALSE;
}
Int_t nc = 0;
if (HasRmin()) nc = (Int_t)TMath::Sqrt(0.5*npoints);
else           nc = (Int_t)TMath::Sqrt(1.*npoints);
Double_t dphi = TMath::TwoPi()/nc;
Double_t phi = 0;
Int_t ntop = 0;
if (HasRmin()) ntop = npoints/2 - nc*(nc-1);
else           ntop = npoints - nc*(nc-1);
Double_t dz = 2*fDz/(nc-1);
Double_t z = 0;
Int_t icrt = 0;
Int_t nphi = nc;
// loop z sections
for (Int_t i=0; i<nc; i++) {
if (i == (nc-1)) nphi = ntop;
z = -fDz + i*dz;
// loop points on circle sections
for (Int_t j=0; j<nphi; j++) {
phi = j*dphi;
if (HasRmin()) {
array[icrt++] = fRmin * TMath::Cos(phi);
array[icrt++] = fRmin * TMath::Sin(phi);
array[icrt++] = z;
}
array[icrt++] = fRmax * TMath::Cos(phi);
array[icrt++] = fRmax * TMath::Sin(phi);
array[icrt++] = z;
}
}
return kTRUE;
}

//_____________________________________________________________________________
void TGeoTube::SetPoints(Double_t *points) const
{
// create tube mesh points
Double_t dz;
Int_t j, n;
n = gGeoManager->GetNsegments();
Double_t dphi = 360./n;
Double_t phi = 0;
dz = fDz;
Int_t indx = 0;
if (points) {
if (HasRmin()) {
// 4*n points
// (0,n-1) lower rmin circle
// (2n, 3n-1) upper rmin circle
for (j = 0; j < n; j++) {
points[indx+6*n] = points[indx] = fRmin * TMath::Cos(phi);
indx++;
points[indx+6*n] = points[indx] = fRmin * TMath::Sin(phi);
indx++;
points[indx+6*n] = dz;
points[indx]     =-dz;
indx++;
}
// (n, 2n-1) lower rmax circle
// (3n, 4n-1) upper rmax circle
for (j = 0; j < n; j++) {
points[indx+6*n] = points[indx] = fRmax * TMath::Cos(phi);
indx++;
points[indx+6*n] = points[indx] = fRmax * TMath::Sin(phi);
indx++;
points[indx+6*n]= dz;
points[indx]    =-dz;
indx++;
}
} else {
// centers of lower/upper circles (0,1)
points[indx++] = 0.;
points[indx++] = 0.;
points[indx++] = -dz;
points[indx++] = 0.;
points[indx++] = 0.;
points[indx++] = dz;
// lower rmax circle (2, 2+n-1)
// upper rmax circle (2+n, 2+2n-1)
for (j = 0; j < n; j++) {
points[indx+3*n] = points[indx] = fRmax * TMath::Cos(phi);
indx++;
points[indx+3*n] = points[indx] = fRmax * TMath::Sin(phi);
indx++;
points[indx+3*n]= dz;
points[indx]    =-dz;
indx++;
}
}
}
}

//_____________________________________________________________________________
void TGeoTube::SetPoints(Float_t *points) const
{
// create tube mesh points
Double_t dz;
Int_t j, n;
n = gGeoManager->GetNsegments();
Double_t dphi = 360./n;
Double_t phi = 0;
dz = fDz;
Int_t indx = 0;
if (points) {
if (HasRmin()) {
// 4*n points
// (0,n-1) lower rmin circle
// (2n, 3n-1) upper rmin circle
for (j = 0; j < n; j++) {
points[indx+6*n] = points[indx] = fRmin * TMath::Cos(phi);
indx++;
points[indx+6*n] = points[indx] = fRmin * TMath::Sin(phi);
indx++;
points[indx+6*n] = dz;
points[indx]     =-dz;
indx++;
}
// (n, 2n-1) lower rmax circle
// (3n, 4n-1) upper rmax circle
for (j = 0; j < n; j++) {
points[indx+6*n] = points[indx] = fRmax * TMath::Cos(phi);
indx++;
points[indx+6*n] = points[indx] = fRmax * TMath::Sin(phi);
indx++;
points[indx+6*n]= dz;
points[indx]    =-dz;
indx++;
}
} else {
// centers of lower/upper circles (0,1)
points[indx++] = 0.;
points[indx++] = 0.;
points[indx++] = -dz;
points[indx++] = 0.;
points[indx++] = 0.;
points[indx++] = dz;
// lower rmax circle (2, 2+n-1)
// upper rmax circle (2+n, 2+2n-1)
for (j = 0; j < n; j++) {
points[indx+3*n] = points[indx] = fRmax * TMath::Cos(phi);
indx++;
points[indx+3*n] = points[indx] = fRmax * TMath::Sin(phi);
indx++;
points[indx+3*n]= dz;
points[indx]    =-dz;
indx++;
}
}
}
}

//_____________________________________________________________________________
Int_t TGeoTube::GetNmeshVertices() const
{
// Return number of vertices of the mesh representation
Int_t n = gGeoManager->GetNsegments();
Int_t numPoints = n*4;
if (!HasRmin()) numPoints = 2*(n+1);
return numPoints;
}

//_____________________________________________________________________________
void TGeoTube::GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const
{
// Returns numbers of vertices, segments and polygons composing the shape mesh.
Int_t n = gGeoManager->GetNsegments();
nvert = n*4;
nsegs = n*8;
npols = n*4;
if (!HasRmin()) {
nvert = 2*(n+1);
nsegs = 5*n;
npols = 3*n;
} else {
nvert = n*4;
nsegs = n*8;
npols = n*4;
}
}

//_____________________________________________________________________________
void TGeoTube::Sizeof3D() const
{
///// fill size of this 3-D object
///    TVirtualGeoPainter *painter = gGeoManager->GetGeomPainter();
///    if (!painter) return;
///    Int_t n = gGeoManager->GetNsegments();
///    Int_t numPoints = n*4;
///    Int_t numSegs   = n*8;
///    Int_t numPolys  = n*4;
}

//_____________________________________________________________________________
const TBuffer3D & TGeoTube::GetBuffer3D(Int_t reqSections, Bool_t localFrame) const
{
// Fills a static 3D buffer and returns a reference.
static TBuffer3DTube buffer;
TGeoBBox::FillBuffer3D(buffer, reqSections, localFrame);

if (reqSections & TBuffer3D::kShapeSpecific) {
buffer.fHalfLength   = fDz;
buffer.SetSectionsValid(TBuffer3D::kShapeSpecific);
}
if (reqSections & TBuffer3D::kRawSizes) {
Int_t n = gGeoManager->GetNsegments();
Int_t nbPnts = 4*n;
Int_t nbSegs = 8*n;
Int_t nbPols = 4*n;
if (!HasRmin()) {
nbPnts = 2*(n+1);
nbSegs = 5*n;
nbPols = 3*n;
}
if (buffer.SetRawSizes(nbPnts, 3*nbPnts, nbSegs, 3*nbSegs, nbPols, 6*nbPols)) {
buffer.SetSectionsValid(TBuffer3D::kRawSizes);
}
}
if ((reqSections & TBuffer3D::kRaw) && buffer.SectionsValid(TBuffer3D::kRawSizes)) {
SetPoints(buffer.fPnts);
if (!buffer.fLocalFrame) {
TransformPoints(buffer.fPnts, buffer.NbPnts());
}
SetSegsAndPols(buffer);
buffer.SetSectionsValid(TBuffer3D::kRaw);
}

return buffer;
}

//_____________________________________________________________________________
void TGeoTube::Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const
{
// Check the inside status for each of the points in the array.
// Input: Array of point coordinates + vector size
// Output: Array of Booleans for the inside of each point
for (Int_t i=0; i<vecsize; i++) inside[i] = Contains(&points[3*i]);
}

//_____________________________________________________________________________
void TGeoTube::ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize)
{
// Compute the normal for an array o points so that norm.dot.dir is positive
// Input: Arrays of point coordinates and directions + vector size
// Output: Array of normal directions
for (Int_t i=0; i<vecsize; i++) ComputeNormal(&points[3*i], &dirs[3*i], &norms[3*i]);
}

//_____________________________________________________________________________
void TGeoTube::DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t* step) const
{
// Compute distance from array of input points having directions specisied by dirs. Store output in dists
for (Int_t i=0; i<vecsize; i++) dists[i] = DistFromInside(&points[3*i], &dirs[3*i], 3, step[i]);
}

//_____________________________________________________________________________
void TGeoTube::DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t* step) const
{
// Compute distance from array of input points having directions specisied by dirs. Store output in dists
for (Int_t i=0; i<vecsize; i++) dists[i] = DistFromOutside(&points[3*i], &dirs[3*i], 3, step[i]);
}

//_____________________________________________________________________________
void TGeoTube::Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const
{
// Compute safe distance from each of the points in the input array.
// Input: Array of point coordinates, array of statuses for these points, size of the arrays
// Output: Safety values
for (Int_t i=0; i<vecsize; i++) safe[i] = Safety(&points[3*i], inside[i]);
}

ClassImp(TGeoTubeSeg)

//_____________________________________________________________________________
TGeoTubeSeg::TGeoTubeSeg()
:TGeoTube(),
fPhi1(0.), fPhi2(0.), fS1(0.), fC1(0.), fS2(0.), fC2(0.), fSm(0.), fCm(0.), fCdfi(0.)
{
// Default constructor
SetShapeBit(TGeoShape::kGeoTubeSeg);
}

//_____________________________________________________________________________
TGeoTubeSeg::TGeoTubeSeg(Double_t rmin, Double_t rmax, Double_t dz,
Double_t phiStart, Double_t phiEnd)
:TGeoTube(rmin, rmax, dz),
fPhi1(0.), fPhi2(0.), fS1(0.), fC1(0.), fS2(0.), fC2(0.), fSm(0.), fCm(0.), fCdfi(0.)
{
// Default constructor specifying minimum and maximum radius.
// The segment will be from phiStart to phiEnd expressed in degree.
SetShapeBit(TGeoShape::kGeoTubeSeg);
SetTubsDimensions(rmin, rmax, dz, phiStart, phiEnd);
ComputeBBox();
}

//_____________________________________________________________________________
TGeoTubeSeg::TGeoTubeSeg(const char *name, Double_t rmin, Double_t rmax, Double_t dz,
Double_t phiStart, Double_t phiEnd)
:TGeoTube(name, rmin, rmax, dz)
{
// Default constructor specifying minimum and maximum radius
// The segment will be from phiStart to phiEnd expressed in degree.
SetShapeBit(TGeoShape::kGeoTubeSeg);
SetTubsDimensions(rmin, rmax, dz, phiStart, phiEnd);
ComputeBBox();
}

//_____________________________________________________________________________
TGeoTubeSeg::TGeoTubeSeg(Double_t *param)
:TGeoTube(0, 0, 0)
{
// Default constructor specifying minimum and maximum radius
// param[0] = Rmin
// param[1] = Rmax
// param[2] = dz
// param[3] = phi1
// param[4] = phi2
SetShapeBit(TGeoShape::kGeoTubeSeg);
SetDimensions(param);
ComputeBBox();
}

//_____________________________________________________________________________
TGeoTubeSeg::~TGeoTubeSeg()
{
// destructor
}

//_____________________________________________________________________________
void TGeoTubeSeg::AfterStreamer()
{
// Function called after streaming an object of this class.
InitTrigonometry();
}

//_____________________________________________________________________________
void TGeoTubeSeg::InitTrigonometry()
{
// Init frequently used trigonometric values
fC1 = TMath::Cos(phi1);
fS1 = TMath::Sin(phi1);
fC2 = TMath::Cos(phi2);
fS2 = TMath::Sin(phi2);
Double_t fio = 0.5*(phi1+phi2);
fCm = TMath::Cos(fio);
fSm = TMath::Sin(fio);
Double_t dfi = 0.5*(phi2-phi1);
fCdfi = TMath::Cos(dfi);
}

//_____________________________________________________________________________
Double_t TGeoTubeSeg::Capacity() const
{
// Computes capacity of the shape in [length^3]
return TGeoTubeSeg::Capacity(fRmin,fRmax,fDz,fPhi1,fPhi2);
}

//_____________________________________________________________________________
Double_t TGeoTubeSeg::Capacity(Double_t rmin, Double_t rmax, Double_t dz, Double_t phiStart, Double_t phiEnd)
{
// Computes capacity of the shape in [length^3]
return capacity;
}

//_____________________________________________________________________________
void TGeoTubeSeg::ComputeBBox()
{
// compute bounding box of the tube segment
Double_t xc[4];
Double_t yc[4];
xc[0] = fRmax*fC1;
yc[0] = fRmax*fS1;
xc[1] = fRmax*fC2;
yc[1] = fRmax*fS2;
xc[2] = fRmin*fC1;
yc[2] = fRmin*fS1;
xc[3] = fRmin*fC2;
yc[3] = fRmin*fS2;

Double_t xmin = xc[TMath::LocMin(4, &xc[0])];
Double_t xmax = xc[TMath::LocMax(4, &xc[0])];
Double_t ymin = yc[TMath::LocMin(4, &yc[0])];
Double_t ymax = yc[TMath::LocMax(4, &yc[0])];

Double_t dp = fPhi2-fPhi1;
if (dp<0) dp+=360;
Double_t ddp = -fPhi1;
if (ddp<0) ddp+= 360;
if (ddp>360) ddp-=360;
if (ddp<=dp) xmax = fRmax;
ddp = 90-fPhi1;
if (ddp<0) ddp+= 360;
if (ddp>360) ddp-=360;
if (ddp<=dp) ymax = fRmax;
ddp = 180-fPhi1;
if (ddp<0) ddp+= 360;
if (ddp>360) ddp-=360;
if (ddp<=dp) xmin = -fRmax;
ddp = 270-fPhi1;
if (ddp<0) ddp+= 360;
if (ddp>360) ddp-=360;
if (ddp<=dp) ymin = -fRmax;
fOrigin[0] = (xmax+xmin)/2;
fOrigin[1] = (ymax+ymin)/2;
fOrigin[2] = 0;
fDX = (xmax-xmin)/2;
fDY = (ymax-ymin)/2;
fDZ = fDz;
}

//_____________________________________________________________________________
void TGeoTubeSeg::ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm)
{
// Compute normal to closest surface from POINT.
Double_t saf[3];
Double_t rsq = point[0]*point[0]+point[1]*point[1];
Double_t r = TMath::Sqrt(rsq);
saf[0] = TMath::Abs(fDz-TMath::Abs(point[2]));
saf[1] = (fRmin>1E-10)?TMath::Abs(r-fRmin):TGeoShape::Big();
saf[2] = TMath::Abs(fRmax-r);
Int_t i = TMath::LocMin(3,saf);
if (((fPhi2-fPhi1)<360.) && TGeoShape::IsCloseToPhi(saf[i], point,fC1,fS1,fC2,fS2)) {
TGeoShape::NormalPhi(point,dir,norm,fC1,fS1,fC2,fS2);
return;
}
if (i==0) {
norm[0] = norm[1] = 0.;
norm[2] = TMath::Sign(1.,dir[2]);
return;
};
norm[2] = 0;
Double_t phi = TMath::ATan2(point[1], point[0]);
norm[0] = TMath::Cos(phi);
norm[1] = TMath::Sin(phi);
if (norm[0]*dir[0]+norm[1]*dir[1]<0) {
norm[0] = -norm[0];
norm[1] = -norm[1];
}
}

//_____________________________________________________________________________
void TGeoTubeSeg::ComputeNormalS(const Double_t *point, const Double_t *dir, Double_t *norm,
Double_t rmin, Double_t rmax, Double_t /*dz*/,
Double_t c1, Double_t s1, Double_t c2, Double_t s2)
{
// Compute normal to closest surface from POINT.
Double_t saf[2];
Double_t rsq = point[0]*point[0]+point[1]*point[1];
Double_t r = TMath::Sqrt(rsq);
saf[0] = (rmin>1E-10)?TMath::Abs(r-rmin):TGeoShape::Big();
saf[1] = TMath::Abs(rmax-r);
Int_t i = TMath::LocMin(2,saf);
if (TGeoShape::IsCloseToPhi(saf[i], point,c1,s1,c2,s2)) {
TGeoShape::NormalPhi(point,dir,norm,c1,s1,c2,s2);
return;
}
norm[2] = 0;
Double_t phi = TMath::ATan2(point[1], point[0]);
norm[0] = TMath::Cos(phi);
norm[1] = TMath::Sin(phi);
if (norm[0]*dir[0]+norm[1]*dir[1]<0) {
norm[0] = -norm[0];
norm[1] = -norm[1];
}
}

//_____________________________________________________________________________
Bool_t TGeoTubeSeg::Contains(const Double_t *point) const
{
// test if point is inside this tube segment
// first check if point is inside the tube
if (!TGeoTube::Contains(point)) return kFALSE;
return IsInPhiRange(point, fPhi1, fPhi2);
}

//_____________________________________________________________________________
Int_t TGeoTubeSeg::DistancetoPrimitive(Int_t px, Int_t py)
{
// compute closest distance from point px,py to each corner
Int_t n = gGeoManager->GetNsegments()+1;
const Int_t numPoints = 4*n;
return ShapeDistancetoPrimitive(numPoints, px, py);
}

//_____________________________________________________________________________
Double_t TGeoTubeSeg::DistFromInsideS(const Double_t *point, const Double_t *dir, Double_t rmin, Double_t rmax, Double_t dz,
Double_t c1, Double_t s1, Double_t c2, Double_t s2, Double_t cm, Double_t sm, Double_t cdfi)
{
// Compute distance from inside point to surface of the tube segment (static)
// Boundary safe algorithm.
// Do Z
Double_t stube = TGeoTube::DistFromInsideS(point,dir,rmin,rmax,dz);
if (stube<=0) return 0.0;
Double_t sfmin = TGeoShape::Big();
Double_t rsq = point[0]*point[0]+point[1]*point[1];
Double_t r = TMath::Sqrt(rsq);
Double_t cpsi=point[0]*cm+point[1]*sm;
if (cpsi>r*cdfi+TGeoShape::Tolerance())  {
sfmin = TGeoShape::DistToPhiMin(point, dir, s1, c1, s2, c2, sm, cm);
return TMath::Min(stube,sfmin);
}
// Point on the phi boundary or outside
// which one: phi1 or phi2
Double_t ddotn, xi, yi;
if (TMath::Abs(point[1]-s1*r) < TMath::Abs(point[1]-s2*r)) {
ddotn = s1*dir[0]-c1*dir[1];
if (ddotn>=0) return 0.0;
ddotn = -s2*dir[0]+c2*dir[1];
if (ddotn<=0) return stube;
sfmin = s2*point[0]-c2*point[1];
if (sfmin<=0) return stube;
sfmin /= ddotn;
if (sfmin >= stube) return stube;
xi = point[0]+sfmin*dir[0];
yi = point[1]+sfmin*dir[1];
if (yi*cm-xi*sm<0) return stube;
return sfmin;
}
ddotn = -s2*dir[0]+c2*dir[1];
if (ddotn>=0) return 0.0;
ddotn = s1*dir[0]-c1*dir[1];
if (ddotn<=0) return stube;
sfmin = -s1*point[0]+c1*point[1];
if (sfmin<=0) return stube;
sfmin /= ddotn;
if (sfmin >= stube) return stube;
xi = point[0]+sfmin*dir[0];
yi = point[1]+sfmin*dir[1];
if (yi*cm-xi*sm>0) return stube;
return sfmin;
}

//_____________________________________________________________________________
Double_t TGeoTubeSeg::DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact, Double_t step, Double_t *safe) const
{
// Compute distance from inside point to surface of the tube segment
// Boundary safe algorithm.
if (iact<3 && safe) {
*safe = SafetyS(point, kTRUE, fRmin, fRmax, fDz, fPhi1, fPhi2);
if (iact==0) return TGeoShape::Big();
if ((iact==1) && (*safe>step)) return TGeoShape::Big();
}
if ((fPhi2-fPhi1)>=360.) return TGeoTube::DistFromInsideS(point,dir,fRmin,fRmax,fDz);

// compute distance to surface
return TGeoTubeSeg::DistFromInsideS(point,dir,fRmin,fRmax,fDz,fC1,fS1,fC2,fS2,fCm,fSm,fCdfi);
}

//_____________________________________________________________________________
Double_t TGeoTubeSeg::DistFromOutsideS(const Double_t *point, const Double_t *dir, Double_t rmin, Double_t rmax,
Double_t dz, Double_t c1, Double_t s1, Double_t c2, Double_t s2,
Double_t cm, Double_t sm, Double_t cdfi)
{
// Static method to compute distance to arbitrary tube segment from outside point
// Boundary safe algorithm.
Double_t r2, cpsi;
// check Z planes
Double_t xi, yi, zi;
zi = dz - TMath::Abs(point[2]);
Double_t rmaxsq = rmax*rmax;
Double_t rminsq = rmin*rmin;
Double_t s = TGeoShape::Big();
Double_t snxt=TGeoShape::Big();
Bool_t in = kFALSE;
Bool_t inz = (zi<0)?kFALSE:kTRUE;
if (!inz) {
if (point[2]*dir[2]>=0) return TGeoShape::Big();
s = -zi/TMath::Abs(dir[2]);
xi = point[0]+s*dir[0];
yi = point[1]+s*dir[1];
r2=xi*xi+yi*yi;
if ((rminsq<=r2) && (r2<=rmaxsq)) {
cpsi=(xi*cm+yi*sm)/TMath::Sqrt(r2);
if (cpsi>=cdfi) return s;
}
}

// check outer cyl. surface
Double_t rsq = point[0]*point[0]+point[1]*point[1];
Double_t r = TMath::Sqrt(rsq);
Double_t nsq=dir[0]*dir[0]+dir[1]*dir[1];
Double_t rdotn=point[0]*dir[0]+point[1]*dir[1];
Double_t b,d;
Bool_t inrmax = kFALSE;
Bool_t inrmin = kFALSE;
Bool_t inphi  = kFALSE;
if (rsq<=rmaxsq+TGeoShape::Tolerance()) inrmax = kTRUE;
if (rsq>=rminsq-TGeoShape::Tolerance()) inrmin = kTRUE;
cpsi=point[0]*cm+point[1]*sm;
if (cpsi>r*cdfi-TGeoShape::Tolerance())  inphi = kTRUE;
in = inz & inrmin & inrmax & inphi;
// If inside, we are most likely on a boundary within machine precision.
if (in) {
Bool_t checkout = kFALSE;
Double_t safphi = (cpsi-r*cdfi)*TMath::Sqrt(1.-cdfi*cdfi);
//      Double_t sch, cch;
// check if on Z boundaries
if (zi<rmax-r) {
if (TGeoShape::IsSameWithinTolerance(rmin,0) || (zi<r-rmin)) {
if (zi<safphi) {
if (point[2]*dir[2]<0) return 0.0;
return TGeoShape::Big();
}
}
}
if ((rmaxsq-rsq) < (rsq-rminsq)) checkout = kTRUE;
// check if on Rmax boundary
if (checkout && (rmax-r<safphi)) {
if (rdotn>=0) return TGeoShape::Big();
return 0.0;
}
if (TMath::Abs(nsq)<TGeoShape::Tolerance()) return TGeoShape::Big();
// check if on phi boundary
if (TGeoShape::IsSameWithinTolerance(rmin,0) || (safphi<r-rmin)) {
// We may cross again a phi of rmin boundary
// check first if we are on phi1 or phi2
Double_t un;
if (TMath::Abs(point[1]-s1*r) < TMath::Abs(point[1]-s2*r)) {
un = dir[0]*s1-dir[1]*c1;
if (un < 0) return 0.0;
if (cdfi>=0) return TGeoShape::Big();
un = -dir[0]*s2+dir[1]*c2;
if (un<0) {
s = -point[0]*s2+point[1]*c2;
if (s>0) {
s /= (-un);
zi = point[2]+s*dir[2];
if (TMath::Abs(zi)<=dz) {
xi = point[0]+s*dir[0];
yi = point[1]+s*dir[1];
r2=xi*xi+yi*yi;
if ((rminsq<=r2) && (r2<=rmaxsq)) {
if ((yi*cm-xi*sm)>0) return s;
}
}
}
}
} else {
un = -dir[0]*s2+dir[1]*c2;
if (un < 0) return 0.0;
if (cdfi>=0) return TGeoShape::Big();
un = dir[0]*s1-dir[1]*c1;
if (un<0) {
s = point[0]*s1-point[1]*c1;
if (s>0) {
s /= (-un);
zi = point[2]+s*dir[2];
if (TMath::Abs(zi)<=dz) {
xi = point[0]+s*dir[0];
yi = point[1]+s*dir[1];
r2=xi*xi+yi*yi;
if ((rminsq<=r2) && (r2<=rmaxsq)) {
if ((yi*cm-xi*sm)<0) return s;
}
}
}
}
}
// We may also cross rmin, (+) solution
if (rdotn>=0) return TGeoShape::Big();
if (cdfi>=0) return TGeoShape::Big();
DistToTube(rsq, nsq, rdotn, rmin, b, d);
if (d>0) {
s=-b+d;
if (s>0) {
zi=point[2]+s*dir[2];
if (TMath::Abs(zi)<=dz) {
xi=point[0]+s*dir[0];
yi=point[1]+s*dir[1];
if ((xi*cm+yi*sm) >= rmin*cdfi) return s;
}
}
}
return TGeoShape::Big();
}
// we are on rmin boundary: we may cross again rmin or a phi facette
if (rdotn>=0) return 0.0;
DistToTube(rsq, nsq, rdotn, rmin, b, d);
if (d>0) {
s=-b+d;
if (s>0) {
zi=point[2]+s*dir[2];
if (TMath::Abs(zi)<=dz) {
// now check phi range
xi=point[0]+s*dir[0];
yi=point[1]+s*dir[1];
r2=xi*xi+yi*yi;
if ((xi*cm+yi*sm) >= rmin*cdfi) return s;
// now we really have to check any phi crossing
Double_t un=-dir[0]*s1+dir[1]*c1;
if (un > 0) {
s=point[0]*s1-point[1]*c1;
if (s>=0) {
s /= un;
zi=point[2]+s*dir[2];
if (TMath::Abs(zi)<=dz) {
xi=point[0]+s*dir[0];
yi=point[1]+s*dir[1];
r2=xi*xi+yi*yi;
if ((rminsq<=r2) && (r2<=rmaxsq)) {
if ((yi*cm-xi*sm)<=0) {
if (s<snxt) snxt=s;
}
}
}
}
}
un=dir[0]*s2-dir[1]*c2;
if (un > 0) {
s=(point[1]*c2-point[0]*s2)/un;
if (s>=0 && s<snxt) {
zi=point[2]+s*dir[2];
if (TMath::Abs(zi)<=dz) {
xi=point[0]+s*dir[0];
yi=point[1]+s*dir[1];
r2=xi*xi+yi*yi;
if ((rminsq<=r2) && (r2<=rmaxsq)) {
if ((yi*cm-xi*sm)>=0) {
return s;
}
}
}
}
}
return snxt;
}
}
}
return TGeoShape::Big();
}
// only r>rmax has to be considered
if (TMath::Abs(nsq)<TGeoShape::Tolerance()) return TGeoShape::Big();
if (rsq>=rmax*rmax) {
if (rdotn>=0) return TGeoShape::Big();
TGeoTube::DistToTube(rsq, nsq, rdotn, rmax, b, d);
if (d>0) {
s=-b-d;
if (s>0) {
zi=point[2]+s*dir[2];
if (TMath::Abs(zi)<=dz) {
xi=point[0]+s*dir[0];
yi=point[1]+s*dir[1];
cpsi = xi*cm+yi*sm;
if (cpsi>=rmax*cdfi) return s;
}
}
}
}
// check inner cylinder
if (rmin>0) {
TGeoTube::DistToTube(rsq, nsq, rdotn, rmin, b, d);
if (d>0) {
s=-b+d;
if (s>0) {
zi=point[2]+s*dir[2];
if (TMath::Abs(zi)<=dz) {
xi=point[0]+s*dir[0];
yi=point[1]+s*dir[1];
cpsi = xi*cm+yi*sm;
if (cpsi>=rmin*cdfi) snxt=s;
}
}
}
}
// check phi planes
Double_t un=-dir[0]*s1+dir[1]*c1;
if (un > 0) {
s=point[0]*s1-point[1]*c1;
if (s>=0) {
s /= un;
zi=point[2]+s*dir[2];
if (TMath::Abs(zi)<=dz) {
xi=point[0]+s*dir[0];
yi=point[1]+s*dir[1];
r2=xi*xi+yi*yi;
if ((rminsq<=r2) && (r2<=rmaxsq)) {
if ((yi*cm-xi*sm)<=0) {
if (s<snxt) snxt=s;
}
}
}
}
}
un=dir[0]*s2-dir[1]*c2;
if (un > 0) {
s=point[1]*c2-point[0]*s2;
if (s>=0) {
s /= un;
zi=point[2]+s*dir[2];
if (TMath::Abs(zi)<=dz) {
xi=point[0]+s*dir[0];
yi=point[1]+s*dir[1];
r2=xi*xi+yi*yi;
if ((rminsq<=r2) && (r2<=rmaxsq)) {
if ((yi*cm-xi*sm)>=0) {
if (s<snxt) snxt=s;
}
}
}
}
}
return snxt;
}

//_____________________________________________________________________________
Double_t TGeoTubeSeg::DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact, Double_t step, Double_t *safe) const
{
// compute distance from outside point to surface of the tube segment
// fist localize point w.r.t tube
if (iact<3 && safe) {
*safe = SafetyS(point, kFALSE, fRmin, fRmax, fDz, fPhi1, fPhi2);
if (iact==0) return TGeoShape::Big();
if ((iact==1) && (step<=*safe)) return TGeoShape::Big();
}
// Check if the bounding box is crossed within the requested distance
Double_t sdist = TGeoBBox::DistFromOutside(point,dir, fDX, fDY, fDZ, fOrigin, step);
if (sdist>=step) return TGeoShape::Big();
if ((fPhi2-fPhi1)>=360.) return TGeoTube::DistFromOutsideS(point,dir,fRmin,fRmax,fDz);

// find distance to shape
return TGeoTubeSeg::DistFromOutsideS(point, dir, fRmin, fRmax, fDz, fC1, fS1, fC2, fS2, fCm, fSm, fCdfi);
}

//_____________________________________________________________________________
TGeoVolume *TGeoTubeSeg::Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv,
Double_t start, Double_t step)
{
//--- Divide this tube segment shape belonging to volume "voldiv" into ndiv volumes
// called divname, from start position with the given step. Returns pointer
// to created division cell volume in case of Z divisions. For radialdivision
// creates all volumes with different shapes and returns pointer to volume that
// was divided. In case a wrong division axis is supplied, returns pointer to
// volume that was divided.
TGeoShape *shape;           //--- shape to be created
TGeoVolume *vol;            //--- division volume to be created
TGeoVolumeMulti *vmulti;    //--- generic divided volume
TGeoPatternFinder *finder;  //--- finder to be attached
TString opt = "";           //--- option to be attached
Double_t dphi;
Int_t id;
Double_t end = start+ndiv*step;
switch (iaxis) {
case 1:  //---                 R division
finder = new TGeoPatternCylR(voldiv, ndiv, start, end);
vmulti = gGeoManager->MakeVolumeMulti(divname, voldiv->GetMedium());
voldiv->SetFinder(finder);
finder->SetDivIndex(voldiv->GetNdaughters());
for (id=0; id<ndiv; id++) {
shape = new TGeoTubeSeg(start+id*step, start+(id+1)*step, fDz, fPhi1, fPhi2);
vol = new TGeoVolume(divname, shape, voldiv->GetMedium());
opt = "R";
((TGeoNodeOffset*)voldiv->GetNodes()->At(voldiv->GetNdaughters()-1))->SetFinder(finder);
}
return vmulti;
case 2:  //---                 Phi division
dphi = fPhi2-fPhi1;
if (dphi<0) dphi+=360.;
if (step<=0) {step=dphi/ndiv; start=fPhi1; end=fPhi2;}
finder = new TGeoPatternCylPhi(voldiv, ndiv, start, end);
voldiv->SetFinder(finder);
finder->SetDivIndex(voldiv->GetNdaughters());
shape = new TGeoTubeSeg(fRmin, fRmax, fDz, -step/2, step/2);
vol = new TGeoVolume(divname, shape, voldiv->GetMedium());
vmulti = gGeoManager->MakeVolumeMulti(divname, voldiv->GetMedium());
opt = "Phi";
for (id=0; id<ndiv; id++) {
((TGeoNodeOffset*)voldiv->GetNodes()->At(voldiv->GetNdaughters()-1))->SetFinder(finder);
}
return vmulti;
case 3: //---                  Z division
finder = new TGeoPatternZ(voldiv, ndiv, start, end);
voldiv->SetFinder(finder);
finder->SetDivIndex(voldiv->GetNdaughters());
shape = new TGeoTubeSeg(fRmin, fRmax, step/2, fPhi1, fPhi2);
vol = new TGeoVolume(divname, shape, voldiv->GetMedium());
vmulti = gGeoManager->MakeVolumeMulti(divname, voldiv->GetMedium());
opt = "Z";
for (id=0; id<ndiv; id++) {
((TGeoNodeOffset*)voldiv->GetNodes()->At(voldiv->GetNdaughters()-1))->SetFinder(finder);
}
return vmulti;
default:
Error("Divide", "In shape %s wrong axis type for division", GetName());
return 0;
}
}

//_____________________________________________________________________________
Double_t TGeoTubeSeg::GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const
{
// Get range of shape for a given axis.
xlo = 0;
xhi = 0;
Double_t dx = 0;
switch (iaxis) {
case 1:
xlo = fRmin;
xhi = fRmax;
dx = xhi-xlo;
return dx;
case 2:
xlo = fPhi1;
xhi = fPhi2;
dx = xhi-xlo;
return dx;
case 3:
xlo = -fDz;
xhi = fDz;
dx = xhi-xlo;
return dx;
}
return dx;
}

//_____________________________________________________________________________
void TGeoTubeSeg::GetBoundingCylinder(Double_t *param) const
{
//--- Fill vector param[4] with the bounding cylinder parameters. The order
// is the following : Rmin, Rmax, Phi1, Phi2
param[0] = fRmin;
param[0] *= param[0];
param[1] = fRmax;
param[1] *= param[1];
param[2] = fPhi1;
param[3] = fPhi2;
}

//_____________________________________________________________________________
TGeoShape *TGeoTubeSeg::GetMakeRuntimeShape(TGeoShape *mother, TGeoMatrix * /*mat*/) const
{
// in case shape has some negative parameters, these has to be computed
// in order to fit the mother
if (!TestShapeBit(kGeoRunTimeShape)) return 0;
if (!mother->TestShapeBit(kGeoTube)) {
Error("GetMakeRuntimeShape", "Invalid mother for shape %s", GetName());
return 0;
}
Double_t rmin, rmax, dz;
rmin = fRmin;
rmax = fRmax;
dz = fDz;
if (fDz<0) dz=((TGeoTube*)mother)->GetDz();
if (fRmin<0)
rmin = ((TGeoTube*)mother)->GetRmin();
if ((fRmax<0) || (fRmax<=fRmin))
rmax = ((TGeoTube*)mother)->GetRmax();

return (new TGeoTubeSeg(GetName(),rmin, rmax, dz, fPhi1, fPhi2));
}

//_____________________________________________________________________________
void TGeoTubeSeg::InspectShape() const
{
// print shape parameters
printf("*** Shape %s: TGeoTubeSeg ***\n", GetName());
printf("    Rmin = %11.5f\n", fRmin);
printf("    Rmax = %11.5f\n", fRmax);
printf("    dz   = %11.5f\n", fDz);
printf("    phi1 = %11.5f\n", fPhi1);
printf("    phi2 = %11.5f\n", fPhi2);
printf(" Bounding box:\n");
TGeoBBox::InspectShape();
}

//_____________________________________________________________________________
TBuffer3D *TGeoTubeSeg::MakeBuffer3D() const
{
// Creates a TBuffer3D describing *this* shape.
// Coordinates are in local reference frame.

Int_t n = gGeoManager->GetNsegments()+1;
Int_t nbPnts = 4*n;
Int_t nbSegs = 2*nbPnts;
Int_t nbPols = nbPnts-2;

TBuffer3D* buff = new TBuffer3D(TBuffer3DTypes::kGeneric,
nbPnts, 3*nbPnts, nbSegs, 3*nbSegs, nbPols, 6*nbPols);
if (buff)
{
SetPoints(buff->fPnts);
SetSegsAndPols(*buff);
}

return buff;
}

//_____________________________________________________________________________
void TGeoTubeSeg::SetSegsAndPols(TBuffer3D &buff) const
{
// Fill TBuffer3D structure for segments and polygons.
Int_t i, j;
Int_t n = gGeoManager->GetNsegments()+1;
Int_t c = GetBasicColor();

memset(buff.fSegs, 0, buff.NbSegs()*3*sizeof(Int_t));
for (i = 0; i < 4; i++) {
for (j = 1; j < n; j++) {
buff.fSegs[(i*n+j-1)*3  ] = c;
buff.fSegs[(i*n+j-1)*3+1] = i*n+j-1;
buff.fSegs[(i*n+j-1)*3+2] = i*n+j;
}
}
for (i = 4; i < 6; i++) {
for (j = 0; j < n; j++) {
buff.fSegs[(i*n+j)*3  ] = c+1;
buff.fSegs[(i*n+j)*3+1] = (i-4)*n+j;
buff.fSegs[(i*n+j)*3+2] = (i-2)*n+j;
}
}
for (i = 6; i < 8; i++) {
for (j = 0; j < n; j++) {
buff.fSegs[(i*n+j)*3  ] = c;
buff.fSegs[(i*n+j)*3+1] = 2*(i-6)*n+j;
buff.fSegs[(i*n+j)*3+2] = (2*(i-6)+1)*n+j;
}
}

Int_t indx = 0;
memset(buff.fPols, 0, buff.NbPols()*6*sizeof(Int_t));
i = 0;
for (j = 0; j < n-1; j++) {
buff.fPols[indx++] = c;
buff.fPols[indx++] = 4;
buff.fPols[indx++] = (4+i)*n+j+1;
buff.fPols[indx++] = (2+i)*n+j;
buff.fPols[indx++] = (4+i)*n+j;
buff.fPols[indx++] = i*n+j;
}
i = 1;
for (j = 0; j < n-1; j++) {
buff.fPols[indx++] = c;
buff.fPols[indx++] = 4;
buff.fPols[indx++] = i*n+j;
buff.fPols[indx++] = (4+i)*n+j;
buff.fPols[indx++] = (2+i)*n+j;
buff.fPols[indx++] = (4+i)*n+j+1;
}
i = 2;
for (j = 0; j < n-1; j++) {
buff.fPols[indx++] = c+i;
buff.fPols[indx++] = 4;
buff.fPols[indx++] = (i-2)*2*n+j;
buff.fPols[indx++] = (4+i)*n+j;
buff.fPols[indx++] = ((i-2)*2+1)*n+j;
buff.fPols[indx++] = (4+i)*n+j+1;
}
i = 3;
for (j = 0; j < n-1; j++) {
buff.fPols[indx++] = c+i;
buff.fPols[indx++] = 4;
buff.fPols[indx++] = (4+i)*n+j+1;
buff.fPols[indx++] = ((i-2)*2+1)*n+j;
buff.fPols[indx++] = (4+i)*n+j;
buff.fPols[indx++] = (i-2)*2*n+j;
}
buff.fPols[indx++] = c+2;
buff.fPols[indx++] = 4;
buff.fPols[indx++] = 6*n;
buff.fPols[indx++] = 4*n;
buff.fPols[indx++] = 7*n;
buff.fPols[indx++] = 5*n;
buff.fPols[indx++] = c+2;
buff.fPols[indx++] = 4;
buff.fPols[indx++] = 6*n-1;
buff.fPols[indx++] = 8*n-1;
buff.fPols[indx++] = 5*n-1;
buff.fPols[indx++] = 7*n-1;
}

//_____________________________________________________________________________
Double_t TGeoTubeSeg::Safety(const Double_t *point, Bool_t in) const
{
// computes the closest distance from given point InitTrigonometry();to this shape, according
// to option. The matching point on the shape is stored in spoint.
Double_t safe = TGeoShape::Big();
Double_t saf[3];
Double_t rsq = point[0]*point[0]+point[1]*point[1];
Double_t r = TMath::Sqrt(rsq);
if (in) {
saf[0] = fDz-TMath::Abs(point[2]);
saf[1] = r-fRmin;
saf[2] = fRmax-r;
safe   = saf[TMath::LocMin(3,saf)];
if ((fPhi2-fPhi1)>=360.) return safe;
Double_t safphi = TGeoShape::SafetyPhi(point,in,fPhi1,fPhi2);
return TMath::Min(safe, safphi);
}
// Point expected to be outside
Bool_t inphi  = kFALSE;
Double_t cpsi=point[0]*fCm+point[1]*fSm;
saf[0] = TMath::Abs(point[2])-fDz;
if (cpsi>r*fCdfi-TGeoShape::Tolerance())  inphi = kTRUE;
if (inphi) {
saf[1] = fRmin-r;
saf[2] = r-fRmax;
safe = saf[TMath::LocMax(3,saf)];
safe = TMath::Max(0., safe);
return safe;
}
// Point outside the phi range
// Compute projected radius of the (r,phi) position vector onto
// phi1 and phi2 edges and take the maximum for chosing the side.
Double_t rproj = TMath::Max(point[0]*fC1+point[1]*fS1, point[0]*fC2+point[1]*fS2);
saf[1] = fRmin-rproj;
saf[2] = rproj-fRmax;
safe = TMath::Max(saf[1], saf[2]);
if ((fPhi2-fPhi1)>=360.) return TMath::Max(safe,saf[0]);
if (safe>0) {
// rproj not within (rmin,rmax) - > no need to calculate safphi
safe = TMath::Sqrt(rsq-rproj*rproj+safe*safe);
return (saf[0]<0) ? safe : TMath::Sqrt(safe*safe+saf[0]*saf[0]);
}
Double_t safphi = TGeoShape::SafetyPhi(point,in,fPhi1,fPhi2);
return (saf[0]<0) ? safphi : TMath::Sqrt(saf[0]*saf[0]+safphi*safphi);
}

//_____________________________________________________________________________
Double_t TGeoTubeSeg::SafetyS(const Double_t *point, Bool_t in, Double_t rmin, Double_t rmax, Double_t dz,
Double_t phi1d, Double_t phi2d, Int_t skipz)
{
// Static method to compute the closest distance from given point to this shape.
Double_t safe = TGeoShape::Big();
Double_t saf[3];
Double_t rsq = point[0]*point[0]+point[1]*point[1];
Double_t r = TMath::Sqrt(rsq);

switch (skipz) {
case 1: // skip lower Z plane
saf[0] = dz - point[2];
break;
case 2: // skip upper Z plane
saf[0] = dz + point[2];
break;
case 3: // skip both
saf[0] = TGeoShape::Big();
break;
default:
saf[0] = dz-TMath::Abs(point[2]);
}

if (in) {
saf[1] = r-rmin;
saf[2] = rmax-r;
safe   = saf[TMath::LocMin(3,saf)];
if ((phi2d-phi1d)>=360.) return safe;
Double_t safphi = TGeoShape::SafetyPhi(point,in,phi1d,phi2d);
return TMath::Min(safe, safphi);
}
// Point expected to be outside
saf[0] = -saf[0];
Bool_t inphi  = kFALSE;

Double_t fio = 0.5*(phi1+phi2);
Double_t cm = TMath::Cos(fio);
Double_t sm = TMath::Sin(fio);
Double_t cpsi=point[0]*cm+point[1]*sm;
Double_t dfi = 0.5*(phi2-phi1);
Double_t cdfi = TMath::Cos(dfi);
if (cpsi>r*cdfi-TGeoShape::Tolerance())  inphi = kTRUE;
if (inphi) {
saf[1] = rmin-r;
saf[2] = r-rmax;
safe = saf[TMath::LocMax(3,saf)];
safe = TMath::Max(0., safe);
return safe;
}
// Point outside the phi range
// Compute projected radius of the (r,phi) position vector onto
// phi1 and phi2 edges and take the maximum for chosing the side.
Double_t c1 = TMath::Cos(phi1);
Double_t s1 = TMath::Sin(phi1);
Double_t c2 = TMath::Cos(phi2);
Double_t s2 = TMath::Sin(phi2);

Double_t rproj = TMath::Max(point[0]*c1+point[1]*s1, point[0]*c2+point[1]*s2);
saf[1] = rmin-rproj;
saf[2] = rproj-rmax;
safe   = TMath::Max(saf[1], saf[2]);
if ((phi2d-phi1d)>=360.) return TMath::Max(safe,saf[0]);
if (safe>0) {
// rproj not within (rmin,rmax) - > no need to calculate safphi
safe = TMath::Sqrt(rsq-rproj*rproj+safe*safe);
return (saf[0]<0) ? safe : TMath::Sqrt(safe*safe+saf[0]*saf[0]);
}
Double_t safphi = TGeoShape::SafetyPhi(point,in,phi1d,phi2d);
return (saf[0]<0) ? safphi : TMath::Sqrt(saf[0]*saf[0]+safphi*safphi);
}

//_____________________________________________________________________________
void TGeoTubeSeg::SavePrimitive(std::ostream &out, Option_t * /*option*/ /*= ""*/)
{
// Save a primitive as a C++ statement(s) on output stream "out".
if (TObject::TestBit(kGeoSavePrimitive)) return;
out << "   // Shape: " << GetName() << " type: " << ClassName() << std::endl;
out << "   rmin = " << fRmin << ";" << std::endl;
out << "   rmax = " << fRmax << ";" << std::endl;
out << "   dz   = " << fDz << ";" << std::endl;
out << "   phi1 = " << fPhi1 << ";" << std::endl;
out << "   phi2 = " << fPhi2 << ";" << std::endl;
out << "   TGeoShape *" << GetPointerName() << " = new TGeoTubeSeg(\"" << GetName() << "\",rmin,rmax,dz,phi1,phi2);" << std::endl;
TObject::SetBit(TGeoShape::kGeoSavePrimitive);
}

//_____________________________________________________________________________
void TGeoTubeSeg::SetTubsDimensions(Double_t rmin, Double_t rmax, Double_t dz,
Double_t phiStart, Double_t phiEnd)
{
// Set dimensions of the tube segment.
// The segment will be from phiStart to phiEnd expressed in degree.
fRmin = rmin;
fRmax = rmax;
fDz   = dz;
fPhi1 = phiStart;
if (fPhi1 < 0) fPhi1 += 360.;
fPhi2 = phiEnd;
while (fPhi2<=fPhi1) fPhi2+=360.;
if (TGeoShape::IsSameWithinTolerance(fPhi1,fPhi2)) Fatal("SetTubsDimensions", "In shape %s invalid phi1=%g, phi2=%g\n", GetName(), fPhi1, fPhi2);
InitTrigonometry();
}

//_____________________________________________________________________________
void TGeoTubeSeg::SetDimensions(Double_t *param)
{
// Set dimensions of the tube segment starting from a list.
Double_t rmin = param[0];
Double_t rmax = param[1];
Double_t dz   = param[2];
Double_t phi1 = param[3];
Double_t phi2 = param[4];
SetTubsDimensions(rmin, rmax, dz, phi1, phi2);
}

//_____________________________________________________________________________
Bool_t TGeoTubeSeg::GetPointsOnSegments(Int_t npoints, Double_t *array) const
{
// Fills array with n random points located on the line segments of the shape mesh.
// The output array must be provided with a length of minimum 3*npoints. Returns
// true if operation is implemented.
if (npoints > (npoints/2)*2) {
Error("GetPointsOnSegments","Npoints must be even number");
return kFALSE;
}
Int_t nc = (Int_t)TMath::Sqrt(0.5*npoints);
Double_t phi = 0;
Double_t phi1 = fPhi1 * TMath::DegToRad();
Int_t ntop = npoints/2 - nc*(nc-1);
Double_t dz = 2*fDz/(nc-1);
Double_t z = 0;
Int_t icrt = 0;
Int_t nphi = nc;
// loop z sections
for (Int_t i=0; i<nc; i++) {
if (i == (nc-1)) {
nphi = ntop;
}
z = -fDz + i*dz;
// loop points on circle sections
for (Int_t j=0; j<nphi; j++) {
phi = phi1 + j*dphi;
array[icrt++] = fRmin * TMath::Cos(phi);
array[icrt++] = fRmin * TMath::Sin(phi);
array[icrt++] = z;
array[icrt++] = fRmax * TMath::Cos(phi);
array[icrt++] = fRmax * TMath::Sin(phi);
array[icrt++] = z;
}
}
return kTRUE;
}

//_____________________________________________________________________________
void TGeoTubeSeg::SetPoints(Double_t *points) const
{
// Create tube segment mesh points.
Double_t dz;
Int_t j, n;
Double_t phi, phi1, phi2, dphi;
phi1 = fPhi1;
phi2 = fPhi2;
if (phi2<phi1) phi2+=360.;
n = gGeoManager->GetNsegments()+1;

dphi = (phi2-phi1)/(n-1);
dz   = fDz;

if (points) {
Int_t indx = 0;

for (j = 0; j < n; j++) {
points[indx+6*n] = points[indx] = fRmin * TMath::Cos(phi);
indx++;
points[indx+6*n] = points[indx] = fRmin * TMath::Sin(phi);
indx++;
points[indx+6*n] = dz;
points[indx]     =-dz;
indx++;
}
for (j = 0; j < n; j++) {
points[indx+6*n] = points[indx] = fRmax * TMath::Cos(phi);
indx++;
points[indx+6*n] = points[indx] = fRmax * TMath::Sin(phi);
indx++;
points[indx+6*n]= dz;
points[indx]    =-dz;
indx++;
}
}
}

//_____________________________________________________________________________
void TGeoTubeSeg::SetPoints(Float_t *points) const
{
// Create tube segment mesh points.
Double_t dz;
Int_t j, n;
Double_t phi, phi1, phi2, dphi;
phi1 = fPhi1;
phi2 = fPhi2;
if (phi2<phi1) phi2+=360.;
n = gGeoManager->GetNsegments()+1;

dphi = (phi2-phi1)/(n-1);
dz   = fDz;

if (points) {
Int_t indx = 0;

for (j = 0; j < n; j++) {
points[indx+6*n] = points[indx] = fRmin * TMath::Cos(phi);
indx++;
points[indx+6*n] = points[indx] = fRmin * TMath::Sin(phi);
indx++;
points[indx+6*n] = dz;
points[indx]     =-dz;
indx++;
}
for (j = 0; j < n; j++) {
points[indx+6*n] = points[indx] = fRmax * TMath::Cos(phi);
indx++;
points[indx+6*n] = points[indx] = fRmax * TMath::Sin(phi);
indx++;
points[indx+6*n]= dz;
points[indx]    =-dz;
indx++;
}
}
}

//_____________________________________________________________________________
void TGeoTubeSeg::GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const
{
// Returns numbers of vertices, segments and polygons composing the shape mesh.
Int_t n = gGeoManager->GetNsegments()+1;
nvert = n*4;
nsegs = n*8;
npols = n*4 - 2;
}

//_____________________________________________________________________________
Int_t TGeoTubeSeg::GetNmeshVertices() const
{
// Return number of vertices of the mesh representation
Int_t n = gGeoManager->GetNsegments()+1;
Int_t numPoints = n*4;
return numPoints;
}

//_____________________________________________________________________________
void TGeoTubeSeg::Sizeof3D() const
{
///// fill size of this 3-D object
///    TVirtualGeoPainter *painter = gGeoManager->GetGeomPainter();
///    if (!painter) return;
///
///    Int_t n = gGeoManager->GetNsegments()+1;
///    Int_t numPoints = n*4;
///    Int_t numSegs   = n*8;
///    Int_t numPolys  = n*4-2;
///
}

//_____________________________________________________________________________
const TBuffer3D & TGeoTubeSeg::GetBuffer3D(Int_t reqSections, Bool_t localFrame) const
{
// Fills a static 3D buffer and returns a reference.
static TBuffer3DTubeSeg buffer;
TGeoBBox::FillBuffer3D(buffer, reqSections, localFrame);

if (reqSections & TBuffer3D::kShapeSpecific) {
// These from TBuffer3DTube / TGeoTube
buffer.fHalfLength   = fDz;
buffer.fPhiMin       = fPhi1;
buffer.fPhiMax       = fPhi2;
buffer.SetSectionsValid(TBuffer3D::kShapeSpecific);
}
if (reqSections & TBuffer3D::kRawSizes) {
Int_t n = gGeoManager->GetNsegments()+1;
Int_t nbPnts = 4*n;
Int_t nbSegs = 2*nbPnts;
Int_t nbPols = nbPnts-2;
if (buffer.SetRawSizes(nbPnts, 3*nbPnts, nbSegs, 3*nbSegs, nbPols, 6*nbPols)) {
buffer.SetSectionsValid(TBuffer3D::kRawSizes);
}
}
if ((reqSections & TBuffer3D::kRaw) && buffer.SectionsValid(TBuffer3D::kRawSizes)) {
SetPoints(buffer.fPnts);
if (!buffer.fLocalFrame) {
TransformPoints(buffer.fPnts, buffer.NbPnts());
}
SetSegsAndPols(buffer);
buffer.SetSectionsValid(TBuffer3D::kRaw);
}

return buffer;
}

//_____________________________________________________________________________
void TGeoTubeSeg::Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const
{
// Check the inside status for each of the points in the array.
// Input: Array of point coordinates + vector size
// Output: Array of Booleans for the inside of each point
for (Int_t i=0; i<vecsize; i++) inside[i] = Contains(&points[3*i]);
}

//_____________________________________________________________________________
void TGeoTubeSeg::ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize)
{
// Compute the normal for an array o points so that norm.dot.dir is positive
// Input: Arrays of point coordinates and directions + vector size
// Output: Array of normal directions
for (Int_t i=0; i<vecsize; i++) ComputeNormal(&points[3*i], &dirs[3*i], &norms[3*i]);
}

//_____________________________________________________________________________
void TGeoTubeSeg::DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t* step) const
{
// Compute distance from array of input points having directions specisied by dirs. Store output in dists
for (Int_t i=0; i<vecsize; i++) dists[i] = DistFromInside(&points[3*i], &dirs[3*i], 3, step[i]);
}

//_____________________________________________________________________________
void TGeoTubeSeg::DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t* step) const
{
// Compute distance from array of input points having directions specisied by dirs. Store output in dists
for (Int_t i=0; i<vecsize; i++) dists[i] = DistFromOutside(&points[3*i], &dirs[3*i], 3, step[i]);
}

//_____________________________________________________________________________
void TGeoTubeSeg::Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const
{
// Compute safe distance from each of the points in the input array.
// Input: Array of point coordinates, array of statuses for these points, size of the arrays
// Output: Safety values
for (Int_t i=0; i<vecsize; i++) safe[i] = Safety(&points[3*i], inside[i]);
}

ClassImp(TGeoCtub)

TGeoCtub::TGeoCtub()
{
// default ctor
fNlow[0] = fNlow[1] = fNhigh[0] = fNhigh[1] = 0.;
fNlow[2] = -1;
fNhigh[2] = 1;
}

//_____________________________________________________________________________
TGeoCtub::TGeoCtub(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)
:TGeoTubeSeg(rmin, rmax, dz, phi1, phi2)
{
// constructor
fNlow[0] = lx;
fNlow[1] = ly;
fNlow[2] = lz;
fNhigh[0] = tx;
fNhigh[1] = ty;
fNhigh[2] = tz;
SetShapeBit(kGeoCtub);
ComputeBBox();
}

//_____________________________________________________________________________
TGeoCtub::TGeoCtub(const char *name, 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)
:TGeoTubeSeg(name, rmin, rmax, dz, phi1, phi2)
{
// constructor
fNlow[0] = lx;
fNlow[1] = ly;
fNlow[2] = lz;
fNhigh[0] = tx;
fNhigh[1] = ty;
fNhigh[2] = tz;
SetShapeBit(kGeoCtub);
ComputeBBox();
}

//_____________________________________________________________________________
TGeoCtub::TGeoCtub(Double_t *params)
:TGeoTubeSeg(0,0,0,0,0)
{
// ctor with parameters
SetCtubDimensions(params[0], params[1], params[2], params[3], params[4], params[5],
params[6], params[7], params[8], params[9], params[10]);
SetShapeBit(kGeoCtub);
}

//_____________________________________________________________________________
TGeoCtub::~TGeoCtub()
{
// destructor
}

//_____________________________________________________________________________
Double_t TGeoCtub::Capacity() const
{
// Computes capacity of the shape in [length^3]
Double_t capacity = TGeoTubeSeg::Capacity();
return capacity;
}

//_____________________________________________________________________________
void TGeoCtub::ComputeBBox()
{
// compute minimum bounding box of the ctub
TGeoTubeSeg::ComputeBBox();
if ((fNlow[2]>-(1E-10)) || (fNhigh[2]<1E-10)) {
Error("ComputeBBox", "In shape %s wrong definition of cut planes", GetName());
return;
}
Double_t xc=0, yc=0;
Double_t zmin=0, zmax=0;
Double_t z1;
Double_t z[8];
// check if nxy is in the phi range
Double_t phi_low = TMath::ATan2(fNlow[1], fNlow[0]) *TMath::RadToDeg();
Double_t phi_hi = TMath::ATan2(fNhigh[1], fNhigh[0]) *TMath::RadToDeg();
Bool_t in_range_low = kFALSE;
Bool_t in_range_hi = kFALSE;

Int_t i;
for (i=0; i<2; i++) {
if (phi_low<0) phi_low+=360.;
Double_t dphi = fPhi2 -fPhi1;
if (dphi < 0) dphi+=360.;
Double_t ddp = phi_low-fPhi1;
if (ddp<0) ddp += 360.;
if (ddp <= dphi) {
z1 = GetZcoord(xc, yc, -fDz);
z1 = TMath::Min(z1, GetZcoord(xc, yc, -fDz));
if (in_range_low)
zmin = TMath::Min(zmin, z1);
else
zmin = z1;
in_range_low = kTRUE;
}
phi_low += 180;
if (phi_low>360) phi_low-=360.;
}

for (i=0; i<2; i++) {
if (phi_hi<0) phi_hi+=360.;
Double_t dphi = fPhi2 -fPhi1;
if (dphi < 0) dphi+=360.;
Double_t ddp = phi_hi-fPhi1;
if (ddp<0) ddp += 360.;
if (ddp <= dphi) {
z1 = GetZcoord(xc, yc, fDz);
z1 = TMath::Max(z1, GetZcoord(xc, yc, fDz));
if (in_range_hi)
zmax = TMath::Max(zmax, z1);
else
zmax = z1;
in_range_hi = kTRUE;
}
phi_hi += 180;
if (phi_hi>360) phi_hi-=360.;
}

xc = fRmin*fC1;
yc = fRmin*fS1;
z[0] = GetZcoord(xc, yc, -fDz);
z[4] = GetZcoord(xc, yc, fDz);

xc = fRmin*fC2;
yc = fRmin*fS2;
z[1] = GetZcoord(xc, yc, -fDz);
z[5] = GetZcoord(xc, yc, fDz);

xc = fRmax*fC1;
yc = fRmax*fS1;
z[2] = GetZcoord(xc, yc, -fDz);
z[6] = GetZcoord(xc, yc, fDz);

xc = fRmax*fC2;
yc = fRmax*fS2;
z[3] = GetZcoord(xc, yc, -fDz);
z[7] = GetZcoord(xc, yc, fDz);

z1 = z[TMath::LocMin(4, &z[0])];
if (in_range_low)
zmin = TMath::Min(zmin, z1);
else
zmin = z1;

z1 = z[TMath::LocMax(4, &z[4])+4];
if (in_range_hi)
zmax = TMath::Max(zmax, z1);
else
zmax = z1;

fDZ = 0.5*(zmax-zmin);
fOrigin[2] = 0.5*(zmax+zmin);
}

//_____________________________________________________________________________
void TGeoCtub::ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm)
{
// Compute normal to closest surface from POINT.
Double_t saf[4];
Bool_t isseg = kTRUE;
if (TMath::Abs(fPhi2-fPhi1-360.)<1E-8) isseg=kFALSE;
Double_t rsq = point[0]*point[0]+point[1]*point[1];
Double_t r = TMath::Sqrt(rsq);

saf[0] = TMath::Abs(point[0]*fNlow[0] + point[1]*fNlow[1] + (fDz+point[2])*fNlow[2]);
saf[1] = TMath::Abs(point[0]*fNhigh[0] + point[1]*fNhigh[1] - (fDz-point[2])*fNhigh[2]);
saf[2] = (fRmin>1E-10)?TMath::Abs(r-fRmin):TGeoShape::Big();
saf[3] = TMath::Abs(fRmax-r);
Int_t i = TMath::LocMin(4,saf);
if (isseg) {
if (TGeoShape::IsCloseToPhi(saf[i], point,fC1,fS1,fC2,fS2)) {
TGeoShape::NormalPhi(point,dir,norm,fC1,fS1,fC2,fS2);
return;
}
}
if (i==0) {
memcpy(norm, fNlow, 3*sizeof(Double_t));
if (norm[0]*dir[0]+norm[1]*dir[1]+norm[2]*dir[2]<0) {
norm[0] = -norm[0];
norm[1] = -norm[1];
norm[2] = -norm[2];
}
return;
}
if (i==1) {
memcpy(norm, fNhigh, 3*sizeof(Double_t));
if (norm[0]*dir[0]+norm[1]*dir[1]+norm[2]*dir[2]<0) {
norm[0] = -norm[0];
norm[1] = -norm[1];
norm[2] = -norm[2];
}
return;
}

norm[2] = 0;
Double_t phi = TMath::ATan2(point[1], point[0]);
norm[0] = TMath::Cos(phi);
norm[1] = TMath::Sin(phi);
if (norm[0]*dir[0]+norm[1]*dir[1]<0) {
norm[0] = -norm[0];
norm[1] = -norm[1];
}
}

//_____________________________________________________________________________
Bool_t TGeoCtub::Contains(const Double_t *point) const
{
// check if point is contained in the cut tube
// check the lower cut plane
Double_t zin = point[0]*fNlow[0]+point[1]*fNlow[1]+(point[2]+fDz)*fNlow[2];
if (zin>0) return kFALSE;
// check the higher cut plane
zin = point[0]*fNhigh[0]+point[1]*fNhigh[1]+(point[2]-fDz)*fNhigh[2];
if (zin>0) return kFALSE;
Double_t r2 = point[0]*point[0]+point[1]*point[1];
if ((r2<fRmin*fRmin) || (r2>fRmax*fRmax)) return kFALSE;
// check phi
Double_t phi = TMath::ATan2(point[1], point[0]) * TMath::RadToDeg();
if (phi < 0 ) phi+=360.;
Double_t dphi = fPhi2 -fPhi1;
Double_t ddp = phi-fPhi1;
if (ddp<0) ddp += 360.;
//   if (ddp>360) ddp-=360;
if (ddp > dphi) return kFALSE;
return kTRUE;
}

//_____________________________________________________________________________
Double_t TGeoCtub::GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const
{
// Get range of shape for a given axis.
xlo = 0;
xhi = 0;
Double_t dx = 0;
switch (iaxis) {
case 1:
xlo = fRmin;
xhi = fRmax;
dx = xhi-xlo;
return dx;
case 2:
xlo = fPhi1;
xhi = fPhi2;
dx = xhi-xlo;
return dx;
}
return dx;
}

//_____________________________________________________________________________
Double_t TGeoCtub::GetZcoord(Double_t xc, Double_t yc, Double_t zc) const
{
// compute real Z coordinate of a point belonging to either lower or
// higher caps (z should be either +fDz or -fDz)
Double_t newz = 0;
if (zc<0) newz =  -fDz-(xc*fNlow[0]+yc*fNlow[1])/fNlow[2];
else      newz = fDz-(xc*fNhigh[0]+yc*fNhigh[1])/fNhigh[2];
return newz;
}

//_____________________________________________________________________________
Double_t TGeoCtub::DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact, Double_t step, Double_t *safe) const
{
// compute distance from outside point to surface of the cut tube
if (iact<3 && safe) {
*safe = Safety(point, kFALSE);
if (iact==0) return TGeoShape::Big();
if ((iact==1) && (step<=*safe)) return TGeoShape::Big();
}
// Check if the bounding box is crossed within the requested distance
Double_t sdist = TGeoBBox::DistFromOutside(point,dir, fDX, fDY, fDZ, fOrigin, step);
if (sdist>=step) return TGeoShape::Big();
Double_t saf[2];
saf[0] = point[0]*fNlow[0] + point[1]*fNlow[1] + (fDz+point[2])*fNlow[2];
saf[1] = point[0]*fNhigh[0] + point[1]*fNhigh[1] + (point[2]-fDz)*fNhigh[2];
Double_t rsq = point[0]*point[0]+point[1]*point[1];
Double_t r = TMath::Sqrt(rsq);
Double_t cpsi=0;
Bool_t tub = kFALSE;
if (TMath::Abs(fPhi2-fPhi1-360.)<1E-8) tub = kTRUE;

// find distance to shape
Double_t r2;
Double_t calf = dir[0]*fNlow[0]+dir[1]*fNlow[1]+dir[2]*fNlow[2];
// check Z planes
Double_t xi, yi, zi;
Double_t s = TGeoShape::Big();
if (saf[0]>0) {
if (calf<0) {
s = -saf[0]/calf;
xi = point[0]+s*dir[0];
yi = point[1]+s*dir[1];
r2=xi*xi+yi*yi;
if (((fRmin*fRmin)<=r2) && (r2<=(fRmax*fRmax))) {
if (tub) return s;
cpsi=(xi*fCm+yi*fSm)/TMath::Sqrt(r2);
if (cpsi>=fCdfi) return s;
}
}
}
calf = dir[0]*fNhigh[0]+dir[1]*fNhigh[1]+dir[2]*fNhigh[2];
if (saf[1]>0) {
if (calf<0) {
s = -saf[1]/calf;
xi = point[0]+s*dir[0];
yi = point[1]+s*dir[1];
r2=xi*xi+yi*yi;
if (((fRmin*fRmin)<=r2) && (r2<=(fRmax*fRmax))) {
if (tub) return s;
cpsi=(xi*fCm+yi*fSm)/TMath::Sqrt(r2);
if (cpsi>=fCdfi) return s;
}
}
}

// check outer cyl. surface
Double_t nsq=dir[0]*dir[0]+dir[1]*dir[1];
if (TMath::Abs(nsq)<1E-10) return TGeoShape::Big();
Double_t rdotn=point[0]*dir[0]+point[1]*dir[1];
Double_t b,d;
// only r>fRmax coming inwards has to be considered
if (r>fRmax && rdotn<0) {
TGeoTube::DistToTube(rsq, nsq, rdotn, fRmax, b, d);
if (d>0) {
s=-b-d;
if (s>0) {
xi=point[0]+s*dir[0];
yi=point[1]+s*dir[1];
zi=point[2]+s*dir[2];
if ((-xi*fNlow[0]-yi*fNlow[1]-(zi+fDz)*fNlow[2])>0) {
if ((-xi*fNhigh[0]-yi*fNhigh[1]+(fDz-zi)*fNhigh[2])>0) {
if (tub) return s;
cpsi=(xi*fCm+yi*fSm)/fRmax;
if (cpsi>=fCdfi) return s;
}
}
}
}
}
// check inner cylinder
Double_t snxt=TGeoShape::Big();
if (fRmin>0) {
TGeoTube::DistToTube(rsq, nsq, rdotn, fRmin, b, d);
if (d>0) {
s=-b+d;
if (s>0) {
xi=point[0]+s*dir[0];
yi=point[1]+s*dir[1];
zi=point[2]+s*dir[2];
if ((-xi*fNlow[0]-yi*fNlow[1]-(zi+fDz)*fNlow[2])>0) {
if ((-xi*fNhigh[0]-yi*fNhigh[1]+(fDz-zi)*fNhigh[2])>0) {
if (tub) return s;
cpsi=(xi*fCm+yi*fSm)/fRmin;
if (cpsi>=fCdfi) snxt=s;
}
}
}
}
}
// check phi planes
if (tub) return snxt;
Double_t un=dir[0]*fS1-dir[1]*fC1;
if (un<-TGeoShape::Tolerance()) {
s=(point[1]*fC1-point[0]*fS1)/un;
if (s>=0) {
xi=point[0]+s*dir[0];
yi=point[1]+s*dir[1];
zi=point[2]+s*dir[2];
if ((-xi*fNlow[0]-yi*fNlow[1]-(zi+fDz)*fNlow[2])>0) {
if ((-xi*fNhigh[0]-yi*fNhigh[1]+(fDz-zi)*fNhigh[2])>0) {
r2=xi*xi+yi*yi;
if ((fRmin*fRmin<=r2) && (r2<=fRmax*fRmax)) {
if ((yi*fCm-xi*fSm)<=0) {
if (s<snxt) snxt=s;
}
}
}
}
}
}
un=dir[0]*fS2-dir[1]*fC2;
if (un>TGeoShape::Tolerance()) {
s=(point[1]*fC2-point[0]*fS2)/un;
if (s>=0) {
xi=point[0]+s*dir[0];
yi=point[1]+s*dir[1];
zi=point[2]+s*dir[2];
if ((-xi*fNlow[0]-yi*fNlow[1]-(zi+fDz)*fNlow[2])>0) {
if ((-xi*fNhigh[0]-yi*fNhigh[1]+(fDz-zi)*fNhigh[2])>0) {
r2=xi*xi+yi*yi;
if ((fRmin*fRmin<=r2) && (r2<=fRmax*fRmax)) {
if ((yi*fCm-xi*fSm)>=0) {
if (s<snxt) snxt=s;
}
}
}
}
}
}
return snxt;
}

//_____________________________________________________________________________
Double_t TGeoCtub::DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact, Double_t step, Double_t *safe) const
{
// compute distance from inside point to surface of the cut tube
if (iact<3 && safe) *safe = Safety(point, kTRUE);
if (iact==0) return TGeoShape::Big();
if ((iact==1) && (*safe>step)) return TGeoShape::Big();
Double_t rsq = point[0]*point[0]+point[1]*point[1];
Bool_t tub = kFALSE;
if (TMath::Abs(fPhi2-fPhi1-360.)<1E-8) tub = kTRUE;
// compute distance to surface
// Do Z
Double_t sz = TGeoShape::Big();
Double_t saf[2];
saf[0] = -point[0]*fNlow[0] - point[1]*fNlow[1] - (fDz+point[2])*fNlow[2];
saf[1] = -point[0]*fNhigh[0] - point[1]*fNhigh[1] + (fDz-point[2])*fNhigh[2];
Double_t calf = dir[0]*fNlow[0]+dir[1]*fNlow[1]+dir[2]*fNlow[2];
if (calf>0) sz = saf[0]/calf;

Double_t sz1=TGeoShape::Big();
calf = dir[0]*fNhigh[0]+dir[1]*fNhigh[1]+dir[2]*fNhigh[2];
if (calf>0) {
sz1 = saf[1]/calf;
if (sz1<sz) sz = sz1;
}

// Do R
Double_t nsq=dir[0]*dir[0]+dir[1]*dir[1];
// track parallel to Z
if (TMath::Abs(nsq)<1E-10) return sz;
Double_t rdotn=point[0]*dir[0]+point[1]*dir[1];
Double_t sr=TGeoShape::Big();
Double_t b, d;
Bool_t skip_outer = kFALSE;
// inner cylinder
if (fRmin>1E-10) {
TGeoTube::DistToTube(rsq, nsq, rdotn, fRmin, b, d);
if (d>0) {
sr=-b-d;
if (sr>0) skip_outer = kTRUE;
}
}
// outer cylinder
if (!skip_outer) {
TGeoTube::DistToTube(rsq, nsq, rdotn, fRmax, b, d);
if (d>0) {
sr=-b+d;
if (sr<0) sr=TGeoShape::Big();
} else {
}
}
// phi planes
Double_t sfmin = TGeoShape::Big();
if (!tub) sfmin=TGeoShape::DistToPhiMin(point, dir, fS1, fC1, fS2, fC2, fSm, fCm);
return TMath::Min(TMath::Min(sz,sr), sfmin);
}

//_____________________________________________________________________________
TGeoVolume *TGeoCtub::Divide(TGeoVolume * /*voldiv*/, const char * /*divname*/, Int_t /*iaxis*/, Int_t /*ndiv*/,
Double_t /*start*/, Double_t /*step*/)
{
// Divide the tube along one axis.
Warning("Divide", "In shape %s division of a cut tube not implemented", GetName());
return 0;
}

//_____________________________________________________________________________
TGeoShape *TGeoCtub::GetMakeRuntimeShape(TGeoShape *mother, TGeoMatrix * /*mat*/) const
{
// in case shape has some negative parameters, these has to be computed
// in order to fit the mother
if (!TestShapeBit(kGeoRunTimeShape)) return 0;
if (!mother->TestShapeBit(kGeoTube)) {
Error("GetMakeRuntimeShape", "Invalid mother for shape %s", GetName());
return 0;
}
Double_t rmin, rmax, dz;
rmin = fRmin;
rmax = fRmax;
dz = fDz;
if (fDz<0) dz=((TGeoTube*)mother)->GetDz();
if (fRmin<0)
rmin = ((TGeoTube*)mother)->GetRmin();
if ((fRmax<0) || (fRmax<=fRmin))
rmax = ((TGeoTube*)mother)->GetRmax();

return (new TGeoCtub(rmin, rmax, dz, fPhi1, fPhi2, fNlow[0], fNlow[1], fNlow[2],
fNhigh[0], fNhigh[1], fNhigh[2]));
}

//_____________________________________________________________________________
void TGeoCtub::InspectShape() const
{
// print shape parameters
printf("*** Shape %s: TGeoCtub ***\n", GetName());
printf("    lx = %11.5f\n", fNlow[0]);
printf("    ly = %11.5f\n", fNlow[1]);
printf("    lz = %11.5f\n", fNlow[2]);
printf("    tx = %11.5f\n", fNhigh[0]);
printf("    ty = %11.5f\n", fNhigh[1]);
printf("    tz = %11.5f\n", fNhigh[2]);
TGeoTubeSeg::InspectShape();
}

//_____________________________________________________________________________
Double_t TGeoCtub::Safety(const Double_t *point, Bool_t in) const
{
// computes the closest distance from given point to this shape, according
// to option. The matching point on the shape is stored in spoint.
Double_t saf[4];
Double_t rsq = point[0]*point[0]+point[1]*point[1];
Double_t r = TMath::Sqrt(rsq);
Bool_t isseg = kTRUE;
if (TMath::Abs(fPhi2-fPhi1-360.)<1E-8) isseg=kFALSE;

saf[0] = -point[0]*fNlow[0] - point[1]*fNlow[1] - (fDz+point[2])*fNlow[2];
saf[1] = -point[0]*fNhigh[0] - point[1]*fNhigh[1] + (fDz-point[2])*fNhigh[2];
saf[2] = (fRmin<1E-10 && !isseg)?TGeoShape::Big():(r-fRmin);
saf[3] = fRmax-r;
Double_t safphi = TGeoShape::Big();
Double_t safe = TGeoShape::Big();
if (isseg) safphi =  TGeoShape::SafetyPhi(point, in, fPhi1, fPhi2);

if (in) {
safe = saf[TMath::LocMin(4,saf)];
return TMath::Min(safe, safphi);
}
for (Int_t i=0; i<4; i++) saf[i]=-saf[i];
safe = saf[TMath::LocMax(4,saf)];
if (isseg) return TMath::Max(safe, safphi);
return safe;
}

//_____________________________________________________________________________
void TGeoCtub::SetCtubDimensions(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)
{
// set dimensions of a cut tube
SetTubsDimensions(rmin, rmax, dz, phi1, phi2);
fNlow[0] = lx;
fNlow[1] = ly;
fNlow[2] = lz;
fNhigh[0] = tx;
fNhigh[1] = ty;
fNhigh[2] = tz;
ComputeBBox();
}

//_____________________________________________________________________________
void TGeoCtub::SavePrimitive(std::ostream &out, Option_t * /*option*/ /*= ""*/)
{
// Save a primitive as a C++ statement(s) on output stream "out".
if (TObject::TestBit(kGeoSavePrimitive)) return;
out << "   // Shape: " << GetName() << " type: " << ClassName() << std::endl;
out << "   rmin = " << fRmin << ";" << std::endl;
out << "   rmax = " << fRmax << ";" << std::endl;
out << "   dz   = " << fDz << ";" << std::endl;
out << "   phi1 = " << fPhi1 << ";" << std::endl;
out << "   phi2 = " << fPhi2 << ";" << std::endl;
out << "   lx   = " << fNlow[0] << ";" << std::endl;
out << "   ly   = " << fNlow[1] << ";" << std::endl;
out << "   lz   = " << fNlow[2] << ";" << std::endl;
out << "   tx   = " << fNhigh[0] << ";" << std::endl;
out << "   ty   = " << fNhigh[1] << ";" << std::endl;
out << "   tz   = " << fNhigh[2] << ";" << std::endl;
out << "   TGeoShape *" << GetPointerName() << " = new TGeoCtub(\"" << GetName() << "\",rmin,rmax,dz,phi1,phi2,lx,ly,lz,tx,ty,tz);" << std::endl;   TObject::SetBit(TGeoShape::kGeoSavePrimitive);
}

//_____________________________________________________________________________
void TGeoCtub::SetDimensions(Double_t *param)
{
// Set dimensions of the cut tube starting from a list.
SetCtubDimensions(param[0], param[1], param[2], param[3], param[4], param[5],
param[6], param[7], param[8], param[9], param[10]);
ComputeBBox();
}

//_____________________________________________________________________________
Bool_t TGeoCtub::GetPointsOnSegments(Int_t /*npoints*/, Double_t * /*array*/) const
{
// Fills array with n random points located on the line segments of the shape mesh.
// The output array must be provided with a length of minimum 3*npoints. Returns
// true if operation is implemented.
return kFALSE;
}

//_____________________________________________________________________________
void TGeoCtub::SetPoints(Double_t *points) const
{
// Create mesh points for the cut tube.
Double_t dz;
Int_t j, n;
Double_t phi, phi1, phi2, dphi;
phi1 = fPhi1;
phi2 = fPhi2;
if (phi2<phi1) phi2+=360.;
n = gGeoManager->GetNsegments()+1;

dphi = (phi2-phi1)/(n-1);
dz   = fDz;

if (points) {
Int_t indx = 0;

for (j = 0; j < n; j++) {
points[indx+6*n] = points[indx] = fRmin * TMath::Cos(phi);
indx++;
points[indx+6*n] = points[indx] = fRmin * TMath::Sin(phi);
indx++;
points[indx+6*n] = GetZcoord(points[indx-2], points[indx-1], dz);
points[indx]     = GetZcoord(points[indx-2], points[indx-1], -dz);
indx++;
}
for (j = 0; j < n; j++) {
points[indx+6*n] = points[indx] = fRmax * TMath::Cos(phi);
indx++;
points[indx+6*n] = points[indx] = fRmax * TMath::Sin(phi);
indx++;
points[indx+6*n]= GetZcoord(points[indx-2], points[indx-1], dz);
points[indx]    = GetZcoord(points[indx-2], points[indx-1], -dz);
indx++;
}
}
}

//_____________________________________________________________________________
void TGeoCtub::SetPoints(Float_t *points) const
{
// Create mesh points for the cut tube.
Double_t dz;
Int_t j, n;
Double_t phi, phi1, phi2, dphi;
phi1 = fPhi1;
phi2 = fPhi2;
if (phi2<phi1) phi2+=360.;
n = gGeoManager->GetNsegments()+1;

dphi = (phi2-phi1)/(n-1);
dz   = fDz;

if (points) {
Int_t indx = 0;

for (j = 0; j < n; j++) {
points[indx+6*n] = points[indx] = fRmin * TMath::Cos(phi);
indx++;
points[indx+6*n] = points[indx] = fRmin * TMath::Sin(phi);
indx++;
points[indx+6*n] = GetZcoord(points[indx-2], points[indx-1], dz);
points[indx]     = GetZcoord(points[indx-2], points[indx-1], -dz);
indx++;
}
for (j = 0; j < n; j++) {
points[indx+6*n] = points[indx] = fRmax * TMath::Cos(phi);
indx++;
points[indx+6*n] = points[indx] = fRmax * TMath::Sin(phi);
indx++;
points[indx+6*n]= GetZcoord(points[indx-2], points[indx-1], dz);
points[indx]    = GetZcoord(points[indx-2], points[indx-1], -dz);
indx++;
}
}
}

//_____________________________________________________________________________
void TGeoCtub::GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const
{
// Returns numbers of vertices, segments and polygons composing the shape mesh.
TGeoTubeSeg::GetMeshNumbers(nvert,nsegs,npols);
}

//_____________________________________________________________________________
Int_t TGeoCtub::GetNmeshVertices() const
{
// Return number of vertices of the mesh representation
Int_t n = gGeoManager->GetNsegments()+1;
Int_t numPoints = n*4;
return numPoints;
}

//_____________________________________________________________________________
const TBuffer3D & TGeoCtub::GetBuffer3D(Int_t reqSections, Bool_t localFrame) const
{
// Fills a static 3D buffer and returns a reference.
static TBuffer3DCutTube buffer;

TGeoBBox::FillBuffer3D(buffer, reqSections, localFrame);

if (reqSections & TBuffer3D::kShapeSpecific) {
// These from TBuffer3DCutTube / TGeoCtub
buffer.fHalfLength   = fDz;
buffer.fPhiMin       = fPhi1;
buffer.fPhiMax       = fPhi2;

for (UInt_t i = 0; i < 3; i++ ) {
buffer.fLowPlaneNorm[i] = fNlow[i];
buffer.fHighPlaneNorm[i] = fNhigh[i];
}
buffer.SetSectionsValid(TBuffer3D::kShapeSpecific);
}
if (reqSections & TBuffer3D::kRawSizes) {
Int_t n = gGeoManager->GetNsegments()+1;
Int_t nbPnts = 4*n;
Int_t nbSegs = 2*nbPnts;
Int_t nbPols = nbPnts-2;
if (buffer.SetRawSizes(nbPnts, 3*nbPnts, nbSegs, 3*nbSegs, nbPols, 6*nbPols)) {
buffer.SetSectionsValid(TBuffer3D::kRawSizes);
}
}
if ((reqSections & TBuffer3D::kRaw) && buffer.SectionsValid(TBuffer3D::kRawSizes)) {
SetPoints(buffer.fPnts);
if (!buffer.fLocalFrame) {
TransformPoints(buffer.fPnts, buffer.NbPnts());
}
SetSegsAndPols(buffer);
buffer.SetSectionsValid(TBuffer3D::kRaw);
}

return buffer;
}

//_____________________________________________________________________________
void TGeoCtub::Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const
{
// Check the inside status for each of the points in the array.
// Input: Array of point coordinates + vector size
// Output: Array of Booleans for the inside of each point
for (Int_t i=0; i<vecsize; i++) inside[i] = Contains(&points[3*i]);
}

//_____________________________________________________________________________
void TGeoCtub::ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize)
{
// Compute the normal for an array o points so that norm.dot.dir is positive
// Input: Arrays of point coordinates and directions + vector size
// Output: Array of normal directions
for (Int_t i=0; i<vecsize; i++) ComputeNormal(&points[3*i], &dirs[3*i], &norms[3*i]);
}

//_____________________________________________________________________________
void TGeoCtub::DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t* step) const
{
// Compute distance from array of input points having directions specisied by dirs. Store output in dists
for (Int_t i=0; i<vecsize; i++) dists[i] = DistFromInside(&points[3*i], &dirs[3*i], 3, step[i]);
}

//_____________________________________________________________________________
void TGeoCtub::DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t* step) const
{
// Compute distance from array of input points having directions specisied by dirs. Store output in dists
for (Int_t i=0; i<vecsize; i++) dists[i] = DistFromOutside(&points[3*i], &dirs[3*i], 3, step[i]);
}

//_____________________________________________________________________________
void TGeoCtub::Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const
{
// Compute safe distance from each of the points in the input array.
// Input: Array of point coordinates, array of statuses for these points, size of the arrays
// Output: Safety values
for (Int_t i=0; i<vecsize; i++) safe[i] = Safety(&points[3*i], inside[i]);
}
```
TGeoTube.cxx:1
TGeoTube.cxx:2
TGeoTube.cxx:3
TGeoTube.cxx:4
TGeoTube.cxx:5
TGeoTube.cxx:6
TGeoTube.cxx:7
TGeoTube.cxx:8
TGeoTube.cxx:9
TGeoTube.cxx:10
TGeoTube.cxx:11
TGeoTube.cxx:12
TGeoTube.cxx:13
TGeoTube.cxx:14
TGeoTube.cxx:15
TGeoTube.cxx:16
TGeoTube.cxx:17
TGeoTube.cxx:18
TGeoTube.cxx:19
TGeoTube.cxx:20
TGeoTube.cxx:21
TGeoTube.cxx:22
TGeoTube.cxx:23
TGeoTube.cxx:24
TGeoTube.cxx:25
TGeoTube.cxx:26
TGeoTube.cxx:27
TGeoTube.cxx:28
TGeoTube.cxx:29
TGeoTube.cxx:30
TGeoTube.cxx:31
TGeoTube.cxx:32
TGeoTube.cxx:33
TGeoTube.cxx:34
TGeoTube.cxx:35
TGeoTube.cxx:36
TGeoTube.cxx:37
TGeoTube.cxx:38
TGeoTube.cxx:39
TGeoTube.cxx:40
TGeoTube.cxx:41
TGeoTube.cxx:42
TGeoTube.cxx:43
TGeoTube.cxx:44
TGeoTube.cxx:45
TGeoTube.cxx:46
TGeoTube.cxx:47
TGeoTube.cxx:48
TGeoTube.cxx:49
TGeoTube.cxx:50
TGeoTube.cxx:51
TGeoTube.cxx:52
TGeoTube.cxx:53
TGeoTube.cxx:54
TGeoTube.cxx:55
TGeoTube.cxx:56
TGeoTube.cxx:57
TGeoTube.cxx:58
TGeoTube.cxx:59
TGeoTube.cxx:60
TGeoTube.cxx:61
TGeoTube.cxx:62
TGeoTube.cxx:63
TGeoTube.cxx:64
TGeoTube.cxx:65
TGeoTube.cxx:66
TGeoTube.cxx:67
TGeoTube.cxx:68
TGeoTube.cxx:69
TGeoTube.cxx:70
TGeoTube.cxx:71
TGeoTube.cxx:72
TGeoTube.cxx:73
TGeoTube.cxx:74
TGeoTube.cxx:75
TGeoTube.cxx:76
TGeoTube.cxx:77
TGeoTube.cxx:78
TGeoTube.cxx:79
TGeoTube.cxx:80
TGeoTube.cxx:81
TGeoTube.cxx:82
TGeoTube.cxx:83
TGeoTube.cxx:84
TGeoTube.cxx:85
TGeoTube.cxx:86
TGeoTube.cxx:87
TGeoTube.cxx:88
TGeoTube.cxx:89
TGeoTube.cxx:90
TGeoTube.cxx:91
TGeoTube.cxx:92
TGeoTube.cxx:93
TGeoTube.cxx:94
TGeoTube.cxx:95
TGeoTube.cxx:96
TGeoTube.cxx:97
TGeoTube.cxx:98
TGeoTube.cxx:99
TGeoTube.cxx:100
TGeoTube.cxx:101
TGeoTube.cxx:102
TGeoTube.cxx:103
TGeoTube.cxx:104
TGeoTube.cxx:105
TGeoTube.cxx:106
TGeoTube.cxx:107
TGeoTube.cxx:108
TGeoTube.cxx:109
TGeoTube.cxx:110
TGeoTube.cxx:111
TGeoTube.cxx:112
TGeoTube.cxx:113
TGeoTube.cxx:114
TGeoTube.cxx:115
TGeoTube.cxx:116
TGeoTube.cxx:117
TGeoTube.cxx:118
TGeoTube.cxx:119
TGeoTube.cxx:120
TGeoTube.cxx:121
TGeoTube.cxx:122
TGeoTube.cxx:123
TGeoTube.cxx:124
TGeoTube.cxx:125
TGeoTube.cxx:126
TGeoTube.cxx:127
TGeoTube.cxx:128
TGeoTube.cxx:129
TGeoTube.cxx:130
TGeoTube.cxx:131
TGeoTube.cxx:132
TGeoTube.cxx:133
TGeoTube.cxx:134
TGeoTube.cxx:135
TGeoTube.cxx:136
TGeoTube.cxx:137
TGeoTube.cxx:138
TGeoTube.cxx:139
TGeoTube.cxx:140
TGeoTube.cxx:141
TGeoTube.cxx:142
TGeoTube.cxx:143
TGeoTube.cxx:144
TGeoTube.cxx:145
TGeoTube.cxx:146
TGeoTube.cxx:147
TGeoTube.cxx:148
TGeoTube.cxx:149
TGeoTube.cxx:150
TGeoTube.cxx:151
TGeoTube.cxx:152
TGeoTube.cxx:153
TGeoTube.cxx:154
TGeoTube.cxx:155
TGeoTube.cxx:156
TGeoTube.cxx:157
TGeoTube.cxx:158
TGeoTube.cxx:159
TGeoTube.cxx:160
TGeoTube.cxx:161
TGeoTube.cxx:162
TGeoTube.cxx:163
TGeoTube.cxx:164
TGeoTube.cxx:165
TGeoTube.cxx:166
TGeoTube.cxx:167
TGeoTube.cxx:168
TGeoTube.cxx:169
TGeoTube.cxx:170
TGeoTube.cxx:171
TGeoTube.cxx:172
TGeoTube.cxx:173
TGeoTube.cxx:174
TGeoTube.cxx:175
TGeoTube.cxx:176
TGeoTube.cxx:177
TGeoTube.cxx:178
TGeoTube.cxx:179
TGeoTube.cxx:180
TGeoTube.cxx:181
TGeoTube.cxx:182
TGeoTube.cxx:183
TGeoTube.cxx:184
TGeoTube.cxx:185
TGeoTube.cxx:186
TGeoTube.cxx:187
TGeoTube.cxx:188
TGeoTube.cxx:189
TGeoTube.cxx:190
TGeoTube.cxx:191
TGeoTube.cxx:192
TGeoTube.cxx:193
TGeoTube.cxx:194
TGeoTube.cxx:195
TGeoTube.cxx:196
TGeoTube.cxx:197
TGeoTube.cxx:198
TGeoTube.cxx:199
TGeoTube.cxx:200
TGeoTube.cxx:201
TGeoTube.cxx:202
TGeoTube.cxx:203
TGeoTube.cxx:204
TGeoTube.cxx:205
TGeoTube.cxx:206
TGeoTube.cxx:207
TGeoTube.cxx:208
TGeoTube.cxx:209
TGeoTube.cxx:210
TGeoTube.cxx:211
TGeoTube.cxx:212
TGeoTube.cxx:213
TGeoTube.cxx:214
TGeoTube.cxx:215
TGeoTube.cxx:216
TGeoTube.cxx:217
TGeoTube.cxx:218
TGeoTube.cxx:219
TGeoTube.cxx:220
TGeoTube.cxx:221
TGeoTube.cxx:222
TGeoTube.cxx:223
TGeoTube.cxx:224
TGeoTube.cxx:225
TGeoTube.cxx:226
TGeoTube.cxx:227
TGeoTube.cxx:228
TGeoTube.cxx:229
TGeoTube.cxx:230
TGeoTube.cxx:231
TGeoTube.cxx:232
TGeoTube.cxx:233
TGeoTube.cxx:234
TGeoTube.cxx:235
TGeoTube.cxx:236
TGeoTube.cxx:237
TGeoTube.cxx:238
TGeoTube.cxx:239
TGeoTube.cxx:240
TGeoTube.cxx:241
TGeoTube.cxx:242
TGeoTube.cxx:243
TGeoTube.cxx:244
TGeoTube.cxx:245
TGeoTube.cxx:246
TGeoTube.cxx:247
TGeoTube.cxx:248
TGeoTube.cxx:249
TGeoTube.cxx:250
TGeoTube.cxx:251
TGeoTube.cxx:252
TGeoTube.cxx:253
TGeoTube.cxx:254
TGeoTube.cxx:255
TGeoTube.cxx:256
TGeoTube.cxx:257
TGeoTube.cxx:258
TGeoTube.cxx:259
TGeoTube.cxx:260
TGeoTube.cxx:261
TGeoTube.cxx:262
TGeoTube.cxx:263
TGeoTube.cxx:264
TGeoTube.cxx:265
TGeoTube.cxx:266
TGeoTube.cxx:267
TGeoTube.cxx:268
TGeoTube.cxx:269
TGeoTube.cxx:270
TGeoTube.cxx:271
TGeoTube.cxx:272
TGeoTube.cxx:273
TGeoTube.cxx:274
TGeoTube.cxx:275
TGeoTube.cxx:276
TGeoTube.cxx:277
TGeoTube.cxx:278
TGeoTube.cxx:279
TGeoTube.cxx:280
TGeoTube.cxx:281
TGeoTube.cxx:282
TGeoTube.cxx:283
TGeoTube.cxx:284
TGeoTube.cxx:285
TGeoTube.cxx:286
TGeoTube.cxx:287
TGeoTube.cxx:288
TGeoTube.cxx:289
TGeoTube.cxx:290
TGeoTube.cxx:291
TGeoTube.cxx:292
TGeoTube.cxx:293
TGeoTube.cxx:294
TGeoTube.cxx:295
TGeoTube.cxx:296
TGeoTube.cxx:297
TGeoTube.cxx:298
TGeoTube.cxx:299
TGeoTube.cxx:300
TGeoTube.cxx:301
TGeoTube.cxx:302
TGeoTube.cxx:303
TGeoTube.cxx:304
TGeoTube.cxx:305
TGeoTube.cxx:306
TGeoTube.cxx:307
TGeoTube.cxx:308
TGeoTube.cxx:309
TGeoTube.cxx:310
TGeoTube.cxx:311
TGeoTube.cxx:312
TGeoTube.cxx:313
TGeoTube.cxx:314
TGeoTube.cxx:315
TGeoTube.cxx:316
TGeoTube.cxx:317
TGeoTube.cxx:318
TGeoTube.cxx:319
TGeoTube.cxx:320
TGeoTube.cxx:321
TGeoTube.cxx:322
TGeoTube.cxx:323
TGeoTube.cxx:324
TGeoTube.cxx:325
TGeoTube.cxx:326
TGeoTube.cxx:327
TGeoTube.cxx:328
TGeoTube.cxx:329
TGeoTube.cxx:330
TGeoTube.cxx:331
TGeoTube.cxx:332
TGeoTube.cxx:333
TGeoTube.cxx:334
TGeoTube.cxx:335
TGeoTube.cxx:336
TGeoTube.cxx:337
TGeoTube.cxx:338
TGeoTube.cxx:339
TGeoTube.cxx:340
TGeoTube.cxx:341
TGeoTube.cxx:342
TGeoTube.cxx:343
TGeoTube.cxx:344
TGeoTube.cxx:345
TGeoTube.cxx:346
TGeoTube.cxx:347
TGeoTube.cxx:348
TGeoTube.cxx:349
TGeoTube.cxx:350
TGeoTube.cxx:351
TGeoTube.cxx:352
TGeoTube.cxx:353
TGeoTube.cxx:354
TGeoTube.cxx:355
TGeoTube.cxx:356
TGeoTube.cxx:357
TGeoTube.cxx:358
TGeoTube.cxx:359
TGeoTube.cxx:360
TGeoTube.cxx:361
TGeoTube.cxx:362
TGeoTube.cxx:363
TGeoTube.cxx:364
TGeoTube.cxx:365
TGeoTube.cxx:366
TGeoTube.cxx:367
TGeoTube.cxx:368
TGeoTube.cxx:369
TGeoTube.cxx:370
TGeoTube.cxx:371
TGeoTube.cxx:372
TGeoTube.cxx:373
TGeoTube.cxx:374
TGeoTube.cxx:375
TGeoTube.cxx:376
TGeoTube.cxx:377
TGeoTube.cxx:378
TGeoTube.cxx:379
TGeoTube.cxx:380
TGeoTube.cxx:381
TGeoTube.cxx:382
TGeoTube.cxx:383
TGeoTube.cxx:384
TGeoTube.cxx:385
TGeoTube.cxx:386
TGeoTube.cxx:387
TGeoTube.cxx:388
TGeoTube.cxx:389
TGeoTube.cxx:390
TGeoTube.cxx:391
TGeoTube.cxx:392
TGeoTube.cxx:393
TGeoTube.cxx:394
TGeoTube.cxx:395
TGeoTube.cxx:396
TGeoTube.cxx:397
TGeoTube.cxx:398
TGeoTube.cxx:399
TGeoTube.cxx:400
TGeoTube.cxx:401
TGeoTube.cxx:402
TGeoTube.cxx:403
TGeoTube.cxx:404
TGeoTube.cxx:405
TGeoTube.cxx:406
TGeoTube.cxx:407
TGeoTube.cxx:408
TGeoTube.cxx:409
TGeoTube.cxx:410
TGeoTube.cxx:411
TGeoTube.cxx:412
TGeoTube.cxx:413
TGeoTube.cxx:414
TGeoTube.cxx:415
TGeoTube.cxx:416
TGeoTube.cxx:417
TGeoTube.cxx:418
TGeoTube.cxx:419
TGeoTube.cxx:420
TGeoTube.cxx:421
TGeoTube.cxx:422
TGeoTube.cxx:423
TGeoTube.cxx:424
TGeoTube.cxx:425
TGeoTube.cxx:426
TGeoTube.cxx:427
TGeoTube.cxx:428
TGeoTube.cxx:429
TGeoTube.cxx:430
TGeoTube.cxx:431
TGeoTube.cxx:432
TGeoTube.cxx:433
TGeoTube.cxx:434
TGeoTube.cxx:435
TGeoTube.cxx:436
TGeoTube.cxx:437
TGeoTube.cxx:438
TGeoTube.cxx:439
TGeoTube.cxx:440
TGeoTube.cxx:441
TGeoTube.cxx:442
TGeoTube.cxx:443
TGeoTube.cxx:444
TGeoTube.cxx:445
TGeoTube.cxx:446
TGeoTube.cxx:447
TGeoTube.cxx:448
TGeoTube.cxx:449
TGeoTube.cxx:450
TGeoTube.cxx:451
TGeoTube.cxx:452
TGeoTube.cxx:453
TGeoTube.cxx:454
TGeoTube.cxx:455
TGeoTube.cxx:456
TGeoTube.cxx:457
TGeoTube.cxx:458
TGeoTube.cxx:459
TGeoTube.cxx:460
TGeoTube.cxx:461
TGeoTube.cxx:462
TGeoTube.cxx:463
TGeoTube.cxx:464
TGeoTube.cxx:465
TGeoTube.cxx:466
TGeoTube.cxx:467
TGeoTube.cxx:468
TGeoTube.cxx:469
TGeoTube.cxx:470
TGeoTube.cxx:471
TGeoTube.cxx:472
TGeoTube.cxx:473
TGeoTube.cxx:474
TGeoTube.cxx:475
TGeoTube.cxx:476
TGeoTube.cxx:477
TGeoTube.cxx:478
TGeoTube.cxx:479
TGeoTube.cxx:480
TGeoTube.cxx:481
TGeoTube.cxx:482
TGeoTube.cxx:483
TGeoTube.cxx:484
TGeoTube.cxx:485
TGeoTube.cxx:486
TGeoTube.cxx:487
TGeoTube.cxx:488
TGeoTube.cxx:489
TGeoTube.cxx:490
TGeoTube.cxx:491
TGeoTube.cxx:492
TGeoTube.cxx:493
TGeoTube.cxx:494
TGeoTube.cxx:495
TGeoTube.cxx:496
TGeoTube.cxx:497
TGeoTube.cxx:498
TGeoTube.cxx:499
TGeoTube.cxx:500
TGeoTube.cxx:501
TGeoTube.cxx:502
TGeoTube.cxx:503
TGeoTube.cxx:504
TGeoTube.cxx:505
TGeoTube.cxx:506
TGeoTube.cxx:507
TGeoTube.cxx:508
TGeoTube.cxx:509
TGeoTube.cxx:510
TGeoTube.cxx:511
TGeoTube.cxx:512
TGeoTube.cxx:513
TGeoTube.cxx:514
TGeoTube.cxx:515
TGeoTube.cxx:516
TGeoTube.cxx:517
TGeoTube.cxx:518
TGeoTube.cxx:519
TGeoTube.cxx:520
TGeoTube.cxx:521
TGeoTube.cxx:522
TGeoTube.cxx:523
TGeoTube.cxx:524
TGeoTube.cxx:525
TGeoTube.cxx:526
TGeoTube.cxx:527
TGeoTube.cxx:528
TGeoTube.cxx:529
TGeoTube.cxx:530
TGeoTube.cxx:531
TGeoTube.cxx:532
TGeoTube.cxx:533
TGeoTube.cxx:534
TGeoTube.cxx:535
TGeoTube.cxx:536
TGeoTube.cxx:537
TGeoTube.cxx:538
TGeoTube.cxx:539
TGeoTube.cxx:540
TGeoTube.cxx:541
TGeoTube.cxx:542
TGeoTube.cxx:543
TGeoTube.cxx:544
TGeoTube.cxx:545
TGeoTube.cxx:546
TGeoTube.cxx:547
TGeoTube.cxx:548
TGeoTube.cxx:549
TGeoTube.cxx:550
TGeoTube.cxx:551
TGeoTube.cxx:552
TGeoTube.cxx:553
TGeoTube.cxx:554
TGeoTube.cxx:555
TGeoTube.cxx:556
TGeoTube.cxx:557
TGeoTube.cxx:558
TGeoTube.cxx:559
TGeoTube.cxx:560
TGeoTube.cxx:561
TGeoTube.cxx:562
TGeoTube.cxx:563
TGeoTube.cxx:564
TGeoTube.cxx:565
TGeoTube.cxx:566
TGeoTube.cxx:567
TGeoTube.cxx:568
TGeoTube.cxx:569
TGeoTube.cxx:570
TGeoTube.cxx:571
TGeoTube.cxx:572
TGeoTube.cxx:573
TGeoTube.cxx:574
TGeoTube.cxx:575
TGeoTube.cxx:576
TGeoTube.cxx:577
TGeoTube.cxx:578
TGeoTube.cxx:579
TGeoTube.cxx:580
TGeoTube.cxx:581
TGeoTube.cxx:582
TGeoTube.cxx:583
TGeoTube.cxx:584
TGeoTube.cxx:585
TGeoTube.cxx:586
TGeoTube.cxx:587
TGeoTube.cxx:588
TGeoTube.cxx:589
TGeoTube.cxx:590
TGeoTube.cxx:591
TGeoTube.cxx:592
TGeoTube.cxx:593
TGeoTube.cxx:594
TGeoTube.cxx:595
TGeoTube.cxx:596
TGeoTube.cxx:597
TGeoTube.cxx:598
TGeoTube.cxx:599
TGeoTube.cxx:600
TGeoTube.cxx:601
TGeoTube.cxx:602
TGeoTube.cxx:603
TGeoTube.cxx:604
TGeoTube.cxx:605
TGeoTube.cxx:606
TGeoTube.cxx:607
TGeoTube.cxx:608
TGeoTube.cxx:609
TGeoTube.cxx:610
TGeoTube.cxx:611
TGeoTube.cxx:612
TGeoTube.cxx:613
TGeoTube.cxx:614
TGeoTube.cxx:615
TGeoTube.cxx:616
TGeoTube.cxx:617
TGeoTube.cxx:618
TGeoTube.cxx:619
TGeoTube.cxx:620
TGeoTube.cxx:621
TGeoTube.cxx:622
TGeoTube.cxx:623
TGeoTube.cxx:624
TGeoTube.cxx:625
TGeoTube.cxx:626
TGeoTube.cxx:627
TGeoTube.cxx:628
TGeoTube.cxx:629
TGeoTube.cxx:630
TGeoTube.cxx:631
TGeoTube.cxx:632
TGeoTube.cxx:633
TGeoTube.cxx:634
TGeoTube.cxx:635
TGeoTube.cxx:636
TGeoTube.cxx:637
TGeoTube.cxx:638
TGeoTube.cxx:639
TGeoTube.cxx:640
TGeoTube.cxx:641
TGeoTube.cxx:642
TGeoTube.cxx:643
TGeoTube.cxx:644
TGeoTube.cxx:645
TGeoTube.cxx:646
TGeoTube.cxx:647
TGeoTube.cxx:648
TGeoTube.cxx:649
TGeoTube.cxx:650
TGeoTube.cxx:651
TGeoTube.cxx:652
TGeoTube.cxx:653
TGeoTube.cxx:654
TGeoTube.cxx:655
TGeoTube.cxx:656
TGeoTube.cxx:657
TGeoTube.cxx:658
TGeoTube.cxx:659
TGeoTube.cxx:660
TGeoTube.cxx:661
TGeoTube.cxx:662
TGeoTube.cxx:663
TGeoTube.cxx:664
TGeoTube.cxx:665
TGeoTube.cxx:666
TGeoTube.cxx:667
TGeoTube.cxx:668
TGeoTube.cxx:669
TGeoTube.cxx:670
TGeoTube.cxx:671
TGeoTube.cxx:672
TGeoTube.cxx:673
TGeoTube.cxx:674
TGeoTube.cxx:675
TGeoTube.cxx:676
TGeoTube.cxx:677
TGeoTube.cxx:678
TGeoTube.cxx:679
TGeoTube.cxx:680
TGeoTube.cxx:681
TGeoTube.cxx:682
TGeoTube.cxx:683
TGeoTube.cxx:684
TGeoTube.cxx:685
TGeoTube.cxx:686
TGeoTube.cxx:687
TGeoTube.cxx:688
TGeoTube.cxx:689
TGeoTube.cxx:690
TGeoTube.cxx:691
TGeoTube.cxx:692
TGeoTube.cxx:693
TGeoTube.cxx:694
TGeoTube.cxx:695
TGeoTube.cxx:696
TGeoTube.cxx:697
TGeoTube.cxx:698
TGeoTube.cxx:699
TGeoTube.cxx:700
TGeoTube.cxx:701
TGeoTube.cxx:702
TGeoTube.cxx:703
TGeoTube.cxx:704
TGeoTube.cxx:705
TGeoTube.cxx:706
TGeoTube.cxx:707
TGeoTube.cxx:708
TGeoTube.cxx:709
TGeoTube.cxx:710
TGeoTube.cxx:711
TGeoTube.cxx:712
TGeoTube.cxx:713
TGeoTube.cxx:714
TGeoTube.cxx:715
TGeoTube.cxx:716
TGeoTube.cxx:717
TGeoTube.cxx:718
TGeoTube.cxx:719
TGeoTube.cxx:720
TGeoTube.cxx:721
TGeoTube.cxx:722
TGeoTube.cxx:723
TGeoTube.cxx:724
TGeoTube.cxx:725
TGeoTube.cxx:726
TGeoTube.cxx:727
TGeoTube.cxx:728
TGeoTube.cxx:729
TGeoTube.cxx:730
TGeoTube.cxx:731
TGeoTube.cxx:732
TGeoTube.cxx:733
TGeoTube.cxx:734
TGeoTube.cxx:735
TGeoTube.cxx:736
TGeoTube.cxx:737
TGeoTube.cxx:738
TGeoTube.cxx:739
TGeoTube.cxx:740
TGeoTube.cxx:741
TGeoTube.cxx:742
TGeoTube.cxx:743
TGeoTube.cxx:744
TGeoTube.cxx:745
TGeoTube.cxx:746
TGeoTube.cxx:747
TGeoTube.cxx:748
TGeoTube.cxx:749
TGeoTube.cxx:750
TGeoTube.cxx:751
TGeoTube.cxx:752
TGeoTube.cxx:753
TGeoTube.cxx:754
TGeoTube.cxx:755
TGeoTube.cxx:756
TGeoTube.cxx:757
TGeoTube.cxx:758
TGeoTube.cxx:759
TGeoTube.cxx:760
TGeoTube.cxx:761
TGeoTube.cxx:762
TGeoTube.cxx:763
TGeoTube.cxx:764
TGeoTube.cxx:765
TGeoTube.cxx:766
TGeoTube.cxx:767
TGeoTube.cxx:768
TGeoTube.cxx:769
TGeoTube.cxx:770
TGeoTube.cxx:771
TGeoTube.cxx:772
TGeoTube.cxx:773
TGeoTube.cxx:774
TGeoTube.cxx:775
TGeoTube.cxx:776
TGeoTube.cxx:777
TGeoTube.cxx:778
TGeoTube.cxx:779
TGeoTube.cxx:780
TGeoTube.cxx:781
TGeoTube.cxx:782
TGeoTube.cxx:783
TGeoTube.cxx:784
TGeoTube.cxx:785
TGeoTube.cxx:786
TGeoTube.cxx:787
TGeoTube.cxx:788
TGeoTube.cxx:789
TGeoTube.cxx:790
TGeoTube.cxx:791
TGeoTube.cxx:792
TGeoTube.cxx:793
TGeoTube.cxx:794
TGeoTube.cxx:795
TGeoTube.cxx:796
TGeoTube.cxx:797
TGeoTube.cxx:798
TGeoTube.cxx:799
TGeoTube.cxx:800
TGeoTube.cxx:801
TGeoTube.cxx:802
TGeoTube.cxx:803
TGeoTube.cxx:804
TGeoTube.cxx:805
TGeoTube.cxx:806
TGeoTube.cxx:807
TGeoTube.cxx:808
TGeoTube.cxx:809
TGeoTube.cxx:810
TGeoTube.cxx:811
TGeoTube.cxx:812
TGeoTube.cxx:813
TGeoTube.cxx:814
TGeoTube.cxx:815
TGeoTube.cxx:816
TGeoTube.cxx:817
TGeoTube.cxx:818
TGeoTube.cxx:819
TGeoTube.cxx:820
TGeoTube.cxx:821
TGeoTube.cxx:822
TGeoTube.cxx:823
TGeoTube.cxx:824
TGeoTube.cxx:825
TGeoTube.cxx:826
TGeoTube.cxx:827
TGeoTube.cxx:828
TGeoTube.cxx:829
TGeoTube.cxx:830
TGeoTube.cxx:831
TGeoTube.cxx:832
TGeoTube.cxx:833
TGeoTube.cxx:834
TGeoTube.cxx:835
TGeoTube.cxx:836
TGeoTube.cxx:837
TGeoTube.cxx:838
TGeoTube.cxx:839
TGeoTube.cxx:840
TGeoTube.cxx:841
TGeoTube.cxx:842
TGeoTube.cxx:843
TGeoTube.cxx:844
TGeoTube.cxx:845
TGeoTube.cxx:846
TGeoTube.cxx:847
TGeoTube.cxx:848
TGeoTube.cxx:849
TGeoTube.cxx:850
TGeoTube.cxx:851
TGeoTube.cxx:852
TGeoTube.cxx:853
TGeoTube.cxx:854
TGeoTube.cxx:855
TGeoTube.cxx:856
TGeoTube.cxx:857
TGeoTube.cxx:858
TGeoTube.cxx:859
TGeoTube.cxx:860
TGeoTube.cxx:861
TGeoTube.cxx:862
TGeoTube.cxx:863
TGeoTube.cxx:864
TGeoTube.cxx:865
TGeoTube.cxx:866
TGeoTube.cxx:867
TGeoTube.cxx:868
TGeoTube.cxx:869
TGeoTube.cxx:870
TGeoTube.cxx:871
TGeoTube.cxx:872
TGeoTube.cxx:873
TGeoTube.cxx:874
TGeoTube.cxx:875
TGeoTube.cxx:876
TGeoTube.cxx:877
TGeoTube.cxx:878
TGeoTube.cxx:879
TGeoTube.cxx:880
TGeoTube.cxx:881
TGeoTube.cxx:882
TGeoTube.cxx:883
TGeoTube.cxx:884
TGeoTube.cxx:885
TGeoTube.cxx:886
TGeoTube.cxx:887
TGeoTube.cxx:888
TGeoTube.cxx:889
TGeoTube.cxx:890
TGeoTube.cxx:891
TGeoTube.cxx:892
TGeoTube.cxx:893
TGeoTube.cxx:894
TGeoTube.cxx:895
TGeoTube.cxx:896
TGeoTube.cxx:897
TGeoTube.cxx:898
TGeoTube.cxx:899
TGeoTube.cxx:900
TGeoTube.cxx:901
TGeoTube.cxx:902
TGeoTube.cxx:903
TGeoTube.cxx:904
TGeoTube.cxx:905
TGeoTube.cxx:906
TGeoTube.cxx:907
TGeoTube.cxx:908
TGeoTube.cxx:909
TGeoTube.cxx:910
TGeoTube.cxx:911
TGeoTube.cxx:912
TGeoTube.cxx:913
TGeoTube.cxx:914
TGeoTube.cxx:915
TGeoTube.cxx:916
TGeoTube.cxx:917
TGeoTube.cxx:918
TGeoTube.cxx:919
TGeoTube.cxx:920
TGeoTube.cxx:921
TGeoTube.cxx:922
TGeoTube.cxx:923
TGeoTube.cxx:924
TGeoTube.cxx:925
TGeoTube.cxx:926
TGeoTube.cxx:927
TGeoTube.cxx:928
TGeoTube.cxx:929
TGeoTube.cxx:930
TGeoTube.cxx:931
TGeoTube.cxx:932
TGeoTube.cxx:933
TGeoTube.cxx:934
TGeoTube.cxx:935
TGeoTube.cxx:936
TGeoTube.cxx:937
TGeoTube.cxx:938
TGeoTube.cxx:939
TGeoTube.cxx:940
TGeoTube.cxx:941
TGeoTube.cxx:942
TGeoTube.cxx:943
TGeoTube.cxx:944
TGeoTube.cxx:945
TGeoTube.cxx:946
TGeoTube.cxx:947
TGeoTube.cxx:948
TGeoTube.cxx:949
TGeoTube.cxx:950
TGeoTube.cxx:951
TGeoTube.cxx:952
TGeoTube.cxx:953
TGeoTube.cxx:954
TGeoTube.cxx:955
TGeoTube.cxx:956
TGeoTube.cxx:957
TGeoTube.cxx:958
TGeoTube.cxx:959
TGeoTube.cxx:960
TGeoTube.cxx:961
TGeoTube.cxx:962
TGeoTube.cxx:963
TGeoTube.cxx:964
TGeoTube.cxx:965
TGeoTube.cxx:966
TGeoTube.cxx:967
TGeoTube.cxx:968
TGeoTube.cxx:969
TGeoTube.cxx:970
TGeoTube.cxx:971
TGeoTube.cxx:972
TGeoTube.cxx:973
TGeoTube.cxx:974
TGeoTube.cxx:975
TGeoTube.cxx:976
TGeoTube.cxx:977
TGeoTube.cxx:978
TGeoTube.cxx:979
TGeoTube.cxx:980
TGeoTube.cxx:981
TGeoTube.cxx:982
TGeoTube.cxx:983
TGeoTube.cxx:984
TGeoTube.cxx:985
TGeoTube.cxx:986
TGeoTube.cxx:987
TGeoTube.cxx:988
TGeoTube.cxx:989
TGeoTube.cxx:990
TGeoTube.cxx:991
TGeoTube.cxx:992
TGeoTube.cxx:993
TGeoTube.cxx:994
TGeoTube.cxx:995
TGeoTube.cxx:996
TGeoTube.cxx:997
TGeoTube.cxx:998
TGeoTube.cxx:999
TGeoTube.cxx:1000
TGeoTube.cxx:1001
TGeoTube.cxx:1002
TGeoTube.cxx:1003
TGeoTube.cxx:1004
TGeoTube.cxx:1005
TGeoTube.cxx:1006
TGeoTube.cxx:1007
TGeoTube.cxx:1008
TGeoTube.cxx:1009
TGeoTube.cxx:1010
TGeoTube.cxx:1011
TGeoTube.cxx:1012
TGeoTube.cxx:1013
TGeoTube.cxx:1014
TGeoTube.cxx:1015
TGeoTube.cxx:1016
TGeoTube.cxx:1017
TGeoTube.cxx:1018
TGeoTube.cxx:1019
TGeoTube.cxx:1020
TGeoTube.cxx:1021
TGeoTube.cxx:1022
TGeoTube.cxx:1023
TGeoTube.cxx:1024
TGeoTube.cxx:1025
TGeoTube.cxx:1026
TGeoTube.cxx:1027
TGeoTube.cxx:1028
TGeoTube.cxx:1029
TGeoTube.cxx:1030
TGeoTube.cxx:1031
TGeoTube.cxx:1032
TGeoTube.cxx:1033
TGeoTube.cxx:1034
TGeoTube.cxx:1035
TGeoTube.cxx:1036
TGeoTube.cxx:1037
TGeoTube.cxx:1038
TGeoTube.cxx:1039
TGeoTube.cxx:1040
TGeoTube.cxx:1041
TGeoTube.cxx:1042
TGeoTube.cxx:1043
TGeoTube.cxx:1044
TGeoTube.cxx:1045
TGeoTube.cxx:1046
TGeoTube.cxx:1047
TGeoTube.cxx:1048
TGeoTube.cxx:1049
TGeoTube.cxx:1050
TGeoTube.cxx:1051
TGeoTube.cxx:1052
TGeoTube.cxx:1053
TGeoTube.cxx:1054
TGeoTube.cxx:1055
TGeoTube.cxx:1056
TGeoTube.cxx:1057
TGeoTube.cxx:1058
TGeoTube.cxx:1059
TGeoTube.cxx:1060
TGeoTube.cxx:1061
TGeoTube.cxx:1062
TGeoTube.cxx:1063
TGeoTube.cxx:1064
TGeoTube.cxx:1065
TGeoTube.cxx:1066
TGeoTube.cxx:1067
TGeoTube.cxx:1068
TGeoTube.cxx:1069
TGeoTube.cxx:1070
TGeoTube.cxx:1071
TGeoTube.cxx:1072
TGeoTube.cxx:1073
TGeoTube.cxx:1074
TGeoTube.cxx:1075
TGeoTube.cxx:1076
TGeoTube.cxx:1077
TGeoTube.cxx:1078
TGeoTube.cxx:1079
TGeoTube.cxx:1080
TGeoTube.cxx:1081
TGeoTube.cxx:1082
TGeoTube.cxx:1083
TGeoTube.cxx:1084
TGeoTube.cxx:1085
TGeoTube.cxx:1086
TGeoTube.cxx:1087
TGeoTube.cxx:1088
TGeoTube.cxx:1089
TGeoTube.cxx:1090
TGeoTube.cxx:1091
TGeoTube.cxx:1092
TGeoTube.cxx:1093
TGeoTube.cxx:1094
TGeoTube.cxx:1095
TGeoTube.cxx:1096
TGeoTube.cxx:1097
TGeoTube.cxx:1098
TGeoTube.cxx:1099
TGeoTube.cxx:1100
TGeoTube.cxx:1101
TGeoTube.cxx:1102
TGeoTube.cxx:1103
TGeoTube.cxx:1104
TGeoTube.cxx:1105
TGeoTube.cxx:1106
TGeoTube.cxx:1107
TGeoTube.cxx:1108
TGeoTube.cxx:1109
TGeoTube.cxx:1110
TGeoTube.cxx:1111
TGeoTube.cxx:1112
TGeoTube.cxx:1113
TGeoTube.cxx:1114
TGeoTube.cxx:1115
TGeoTube.cxx:1116
TGeoTube.cxx:1117
TGeoTube.cxx:1118
TGeoTube.cxx:1119
TGeoTube.cxx:1120
TGeoTube.cxx:1121
TGeoTube.cxx:1122
TGeoTube.cxx:1123
TGeoTube.cxx:1124
TGeoTube.cxx:1125
TGeoTube.cxx:1126
TGeoTube.cxx:1127
TGeoTube.cxx:1128
TGeoTube.cxx:1129
TGeoTube.cxx:1130
TGeoTube.cxx:1131
TGeoTube.cxx:1132
TGeoTube.cxx:1133
TGeoTube.cxx:1134
TGeoTube.cxx:1135
TGeoTube.cxx:1136
TGeoTube.cxx:1137
TGeoTube.cxx:1138
TGeoTube.cxx:1139
TGeoTube.cxx:1140
TGeoTube.cxx:1141
TGeoTube.cxx:1142
TGeoTube.cxx:1143
TGeoTube.cxx:1144
TGeoTube.cxx:1145
TGeoTube.cxx:1146
TGeoTube.cxx:1147
TGeoTube.cxx:1148
TGeoTube.cxx:1149
TGeoTube.cxx:1150
TGeoTube.cxx:1151
TGeoTube.cxx:1152
TGeoTube.cxx:1153
TGeoTube.cxx:1154
TGeoTube.cxx:1155
TGeoTube.cxx:1156
TGeoTube.cxx:1157
TGeoTube.cxx:1158
TGeoTube.cxx:1159
TGeoTube.cxx:1160
TGeoTube.cxx:1161
TGeoTube.cxx:1162
TGeoTube.cxx:1163
TGeoTube.cxx:1164
TGeoTube.cxx:1165
TGeoTube.cxx:1166
TGeoTube.cxx:1167
TGeoTube.cxx:1168
TGeoTube.cxx:1169
TGeoTube.cxx:1170
TGeoTube.cxx:1171
TGeoTube.cxx:1172
TGeoTube.cxx:1173
TGeoTube.cxx:1174
TGeoTube.cxx:1175
TGeoTube.cxx:1176
TGeoTube.cxx:1177
TGeoTube.cxx:1178
TGeoTube.cxx:1179
TGeoTube.cxx:1180
TGeoTube.cxx:1181
TGeoTube.cxx:1182
TGeoTube.cxx:1183
TGeoTube.cxx:1184
TGeoTube.cxx:1185
TGeoTube.cxx:1186
TGeoTube.cxx:1187
TGeoTube.cxx:1188
TGeoTube.cxx:1189
TGeoTube.cxx:1190
TGeoTube.cxx:1191
TGeoTube.cxx:1192
TGeoTube.cxx:1193
TGeoTube.cxx:1194
TGeoTube.cxx:1195
TGeoTube.cxx:1196
TGeoTube.cxx:1197
TGeoTube.cxx:1198
TGeoTube.cxx:1199
TGeoTube.cxx:1200
TGeoTube.cxx:1201
TGeoTube.cxx:1202
TGeoTube.cxx:1203
TGeoTube.cxx:1204
TGeoTube.cxx:1205
TGeoTube.cxx:1206
TGeoTube.cxx:1207
TGeoTube.cxx:1208
TGeoTube.cxx:1209
TGeoTube.cxx:1210
TGeoTube.cxx:1211
TGeoTube.cxx:1212
TGeoTube.cxx:1213
TGeoTube.cxx:1214
TGeoTube.cxx:1215
TGeoTube.cxx:1216
TGeoTube.cxx:1217
TGeoTube.cxx:1218
TGeoTube.cxx:1219
TGeoTube.cxx:1220
TGeoTube.cxx:1221
TGeoTube.cxx:1222
TGeoTube.cxx:1223
TGeoTube.cxx:1224
TGeoTube.cxx:1225
TGeoTube.cxx:1226
TGeoTube.cxx:1227
TGeoTube.cxx:1228
TGeoTube.cxx:1229
TGeoTube.cxx:1230
TGeoTube.cxx:1231
TGeoTube.cxx:1232
TGeoTube.cxx:1233
TGeoTube.cxx:1234
TGeoTube.cxx:1235
TGeoTube.cxx:1236
TGeoTube.cxx:1237
TGeoTube.cxx:1238
TGeoTube.cxx:1239
TGeoTube.cxx:1240
TGeoTube.cxx:1241
TGeoTube.cxx:1242
TGeoTube.cxx:1243
TGeoTube.cxx:1244
TGeoTube.cxx:1245
TGeoTube.cxx:1246
TGeoTube.cxx:1247
TGeoTube.cxx:1248
TGeoTube.cxx:1249
TGeoTube.cxx:1250
TGeoTube.cxx:1251
TGeoTube.cxx:1252
TGeoTube.cxx:1253
TGeoTube.cxx:1254
TGeoTube.cxx:1255
TGeoTube.cxx:1256
TGeoTube.cxx:1257
TGeoTube.cxx:1258
TGeoTube.cxx:1259
TGeoTube.cxx:1260
TGeoTube.cxx:1261
TGeoTube.cxx:1262
TGeoTube.cxx:1263
TGeoTube.cxx:1264
TGeoTube.cxx:1265
TGeoTube.cxx:1266
TGeoTube.cxx:1267
TGeoTube.cxx:1268
TGeoTube.cxx:1269
TGeoTube.cxx:1270
TGeoTube.cxx:1271
TGeoTube.cxx:1272
TGeoTube.cxx:1273
TGeoTube.cxx:1274
TGeoTube.cxx:1275
TGeoTube.cxx:1276
TGeoTube.cxx:1277
TGeoTube.cxx:1278
TGeoTube.cxx:1279
TGeoTube.cxx:1280
TGeoTube.cxx:1281
TGeoTube.cxx:1282
TGeoTube.cxx:1283
TGeoTube.cxx:1284
TGeoTube.cxx:1285
TGeoTube.cxx:1286
TGeoTube.cxx:1287
TGeoTube.cxx:1288
TGeoTube.cxx:1289
TGeoTube.cxx:1290
TGeoTube.cxx:1291
TGeoTube.cxx:1292
TGeoTube.cxx:1293
TGeoTube.cxx:1294
TGeoTube.cxx:1295
TGeoTube.cxx:1296
TGeoTube.cxx:1297
TGeoTube.cxx:1298
TGeoTube.cxx:1299
TGeoTube.cxx:1300
TGeoTube.cxx:1301
TGeoTube.cxx:1302
TGeoTube.cxx:1303
TGeoTube.cxx:1304
TGeoTube.cxx:1305
TGeoTube.cxx:1306
TGeoTube.cxx:1307
TGeoTube.cxx:1308
TGeoTube.cxx:1309
TGeoTube.cxx:1310
TGeoTube.cxx:1311
TGeoTube.cxx:1312
TGeoTube.cxx:1313
TGeoTube.cxx:1314
TGeoTube.cxx:1315
TGeoTube.cxx:1316
TGeoTube.cxx:1317
TGeoTube.cxx:1318
TGeoTube.cxx:1319
TGeoTube.cxx:1320
TGeoTube.cxx:1321
TGeoTube.cxx:1322
TGeoTube.cxx:1323
TGeoTube.cxx:1324
TGeoTube.cxx:1325
TGeoTube.cxx:1326
TGeoTube.cxx:1327
TGeoTube.cxx:1328
TGeoTube.cxx:1329
TGeoTube.cxx:1330
TGeoTube.cxx:1331
TGeoTube.cxx:1332
TGeoTube.cxx:1333
TGeoTube.cxx:1334
TGeoTube.cxx:1335
TGeoTube.cxx:1336
TGeoTube.cxx:1337
TGeoTube.cxx:1338
TGeoTube.cxx:1339
TGeoTube.cxx:1340
TGeoTube.cxx:1341
TGeoTube.cxx:1342
TGeoTube.cxx:1343
TGeoTube.cxx:1344
TGeoTube.cxx:1345
TGeoTube.cxx:1346
TGeoTube.cxx:1347
TGeoTube.cxx:1348
TGeoTube.cxx:1349
TGeoTube.cxx:1350
TGeoTube.cxx:1351
TGeoTube.cxx:1352
TGeoTube.cxx:1353
TGeoTube.cxx:1354
TGeoTube.cxx:1355
TGeoTube.cxx:1356
TGeoTube.cxx:1357
TGeoTube.cxx:1358
TGeoTube.cxx:1359
TGeoTube.cxx:1360
TGeoTube.cxx:1361
TGeoTube.cxx:1362
TGeoTube.cxx:1363
TGeoTube.cxx:1364
TGeoTube.cxx:1365
TGeoTube.cxx:1366
TGeoTube.cxx:1367
TGeoTube.cxx:1368
TGeoTube.cxx:1369
TGeoTube.cxx:1370
TGeoTube.cxx:1371
TGeoTube.cxx:1372
TGeoTube.cxx:1373
TGeoTube.cxx:1374
TGeoTube.cxx:1375
TGeoTube.cxx:1376
TGeoTube.cxx:1377
TGeoTube.cxx:1378
TGeoTube.cxx:1379
TGeoTube.cxx:1380
TGeoTube.cxx:1381
TGeoTube.cxx:1382
TGeoTube.cxx:1383
TGeoTube.cxx:1384
TGeoTube.cxx:1385
TGeoTube.cxx:1386
TGeoTube.cxx:1387
TGeoTube.cxx:1388
TGeoTube.cxx:1389
TGeoTube.cxx:1390
TGeoTube.cxx:1391
TGeoTube.cxx:1392
TGeoTube.cxx:1393
TGeoTube.cxx:1394
TGeoTube.cxx:1395
TGeoTube.cxx:1396
TGeoTube.cxx:1397
TGeoTube.cxx:1398
TGeoTube.cxx:1399
TGeoTube.cxx:1400
TGeoTube.cxx:1401
TGeoTube.cxx:1402
TGeoTube.cxx:1403
TGeoTube.cxx:1404
TGeoTube.cxx:1405
TGeoTube.cxx:1406
TGeoTube.cxx:1407
TGeoTube.cxx:1408
TGeoTube.cxx:1409
TGeoTube.cxx:1410
TGeoTube.cxx:1411
TGeoTube.cxx:1412
TGeoTube.cxx:1413
TGeoTube.cxx:1414
TGeoTube.cxx:1415
TGeoTube.cxx:1416
TGeoTube.cxx:1417
TGeoTube.cxx:1418
TGeoTube.cxx:1419
TGeoTube.cxx:1420
TGeoTube.cxx:1421
TGeoTube.cxx:1422
TGeoTube.cxx:1423
TGeoTube.cxx:1424
TGeoTube.cxx:1425
TGeoTube.cxx:1426
TGeoTube.cxx:1427
TGeoTube.cxx:1428
TGeoTube.cxx:1429
TGeoTube.cxx:1430
TGeoTube.cxx:1431
TGeoTube.cxx:1432
TGeoTube.cxx:1433
TGeoTube.cxx:1434
TGeoTube.cxx:1435
TGeoTube.cxx:1436
TGeoTube.cxx:1437
TGeoTube.cxx:1438
TGeoTube.cxx:1439
TGeoTube.cxx:1440
TGeoTube.cxx:1441
TGeoTube.cxx:1442
TGeoTube.cxx:1443
TGeoTube.cxx:1444
TGeoTube.cxx:1445
TGeoTube.cxx:1446
TGeoTube.cxx:1447
TGeoTube.cxx:1448
TGeoTube.cxx:1449
TGeoTube.cxx:1450
TGeoTube.cxx:1451
TGeoTube.cxx:1452
TGeoTube.cxx:1453
TGeoTube.cxx:1454
TGeoTube.cxx:1455
TGeoTube.cxx:1456
TGeoTube.cxx:1457
TGeoTube.cxx:1458
TGeoTube.cxx:1459
TGeoTube.cxx:1460
TGeoTube.cxx:1461
TGeoTube.cxx:1462
TGeoTube.cxx:1463
TGeoTube.cxx:1464
TGeoTube.cxx:1465
TGeoTube.cxx:1466
TGeoTube.cxx:1467
TGeoTube.cxx:1468
TGeoTube.cxx:1469
TGeoTube.cxx:1470
TGeoTube.cxx:1471
TGeoTube.cxx:1472
TGeoTube.cxx:1473
TGeoTube.cxx:1474
TGeoTube.cxx:1475
TGeoTube.cxx:1476
TGeoTube.cxx:1477
TGeoTube.cxx:1478
TGeoTube.cxx:1479
TGeoTube.cxx:1480
TGeoTube.cxx:1481
TGeoTube.cxx:1482
TGeoTube.cxx:1483
TGeoTube.cxx:1484
TGeoTube.cxx:1485
TGeoTube.cxx:1486
TGeoTube.cxx:1487
TGeoTube.cxx:1488
TGeoTube.cxx:1489
TGeoTube.cxx:1490
TGeoTube.cxx:1491
TGeoTube.cxx:1492
TGeoTube.cxx:1493
TGeoTube.cxx:1494
TGeoTube.cxx:1495
TGeoTube.cxx:1496
TGeoTube.cxx:1497
TGeoTube.cxx:1498
TGeoTube.cxx:1499
TGeoTube.cxx:1500
TGeoTube.cxx:1501
TGeoTube.cxx:1502
TGeoTube.cxx:1503
TGeoTube.cxx:1504
TGeoTube.cxx:1505
TGeoTube.cxx:1506
TGeoTube.cxx:1507
TGeoTube.cxx:1508
TGeoTube.cxx:1509
TGeoTube.cxx:1510
TGeoTube.cxx:1511
TGeoTube.cxx:1512
TGeoTube.cxx:1513
TGeoTube.cxx:1514
TGeoTube.cxx:1515
TGeoTube.cxx:1516
TGeoTube.cxx:1517
TGeoTube.cxx:1518
TGeoTube.cxx:1519
TGeoTube.cxx:1520
TGeoTube.cxx:1521
TGeoTube.cxx:1522
TGeoTube.cxx:1523
TGeoTube.cxx:1524
TGeoTube.cxx:1525
TGeoTube.cxx:1526
TGeoTube.cxx:1527
TGeoTube.cxx:1528
TGeoTube.cxx:1529
TGeoTube.cxx:1530
TGeoTube.cxx:1531
TGeoTube.cxx:1532
TGeoTube.cxx:1533
TGeoTube.cxx:1534
TGeoTube.cxx:1535
TGeoTube.cxx:1536
TGeoTube.cxx:1537
TGeoTube.cxx:1538
TGeoTube.cxx:1539
TGeoTube.cxx:1540
TGeoTube.cxx:1541
TGeoTube.cxx:1542
TGeoTube.cxx:1543
TGeoTube.cxx:1544
TGeoTube.cxx:1545
TGeoTube.cxx:1546
TGeoTube.cxx:1547
TGeoTube.cxx:1548
TGeoTube.cxx:1549
TGeoTube.cxx:1550
TGeoTube.cxx:1551
TGeoTube.cxx:1552
TGeoTube.cxx:1553
TGeoTube.cxx:1554
TGeoTube.cxx:1555
TGeoTube.cxx:1556
TGeoTube.cxx:1557
TGeoTube.cxx:1558
TGeoTube.cxx:1559
TGeoTube.cxx:1560
TGeoTube.cxx:1561
TGeoTube.cxx:1562
TGeoTube.cxx:1563
TGeoTube.cxx:1564
TGeoTube.cxx:1565
TGeoTube.cxx:1566
TGeoTube.cxx:1567
TGeoTube.cxx:1568
TGeoTube.cxx:1569
TGeoTube.cxx:1570
TGeoTube.cxx:1571
TGeoTube.cxx:1572
TGeoTube.cxx:1573
TGeoTube.cxx:1574
TGeoTube.cxx:1575
TGeoTube.cxx:1576
TGeoTube.cxx:1577
TGeoTube.cxx:1578
TGeoTube.cxx:1579
TGeoTube.cxx:1580
TGeoTube.cxx:1581
TGeoTube.cxx:1582
TGeoTube.cxx:1583
TGeoTube.cxx:1584
TGeoTube.cxx:1585
TGeoTube.cxx:1586
TGeoTube.cxx:1587
TGeoTube.cxx:1588
TGeoTube.cxx:1589
TGeoTube.cxx:1590
TGeoTube.cxx:1591
TGeoTube.cxx:1592
TGeoTube.cxx:1593
TGeoTube.cxx:1594
TGeoTube.cxx:1595
TGeoTube.cxx:1596
TGeoTube.cxx:1597
TGeoTube.cxx:1598
TGeoTube.cxx:1599
TGeoTube.cxx:1600
TGeoTube.cxx:1601
TGeoTube.cxx:1602
TGeoTube.cxx:1603
TGeoTube.cxx:1604
TGeoTube.cxx:1605
TGeoTube.cxx:1606
TGeoTube.cxx:1607
TGeoTube.cxx:1608
TGeoTube.cxx:1609
TGeoTube.cxx:1610
TGeoTube.cxx:1611
TGeoTube.cxx:1612
TGeoTube.cxx:1613
TGeoTube.cxx:1614
TGeoTube.cxx:1615
TGeoTube.cxx:1616
TGeoTube.cxx:1617
TGeoTube.cxx:1618
TGeoTube.cxx:1619
TGeoTube.cxx:1620
TGeoTube.cxx:1621
TGeoTube.cxx:1622
TGeoTube.cxx:1623
TGeoTube.cxx:1624
TGeoTube.cxx:1625
TGeoTube.cxx:1626
TGeoTube.cxx:1627
TGeoTube.cxx:1628
TGeoTube.cxx:1629
TGeoTube.cxx:1630
TGeoTube.cxx:1631
TGeoTube.cxx:1632
TGeoTube.cxx:1633
TGeoTube.cxx:1634
TGeoTube.cxx:1635
TGeoTube.cxx:1636
TGeoTube.cxx:1637
TGeoTube.cxx:1638
TGeoTube.cxx:1639
TGeoTube.cxx:1640
TGeoTube.cxx:1641
TGeoTube.cxx:1642
TGeoTube.cxx:1643
TGeoTube.cxx:1644
TGeoTube.cxx:1645
TGeoTube.cxx:1646
TGeoTube.cxx:1647
TGeoTube.cxx:1648
TGeoTube.cxx:1649
TGeoTube.cxx:1650
TGeoTube.cxx:1651
TGeoTube.cxx:1652
TGeoTube.cxx:1653
TGeoTube.cxx:1654
TGeoTube.cxx:1655
TGeoTube.cxx:1656
TGeoTube.cxx:1657
TGeoTube.cxx:1658
TGeoTube.cxx:1659
TGeoTube.cxx:1660
TGeoTube.cxx:1661
TGeoTube.cxx:1662
TGeoTube.cxx:1663
TGeoTube.cxx:1664
TGeoTube.cxx:1665
TGeoTube.cxx:1666
TGeoTube.cxx:1667
TGeoTube.cxx:1668
TGeoTube.cxx:1669
TGeoTube.cxx:1670
TGeoTube.cxx:1671
TGeoTube.cxx:1672
TGeoTube.cxx:1673
TGeoTube.cxx:1674
TGeoTube.cxx:1675
TGeoTube.cxx:1676
TGeoTube.cxx:1677
TGeoTube.cxx:1678
TGeoTube.cxx:1679
TGeoTube.cxx:1680
TGeoTube.cxx:1681
TGeoTube.cxx:1682
TGeoTube.cxx:1683
TGeoTube.cxx:1684
TGeoTube.cxx:1685
TGeoTube.cxx:1686
TGeoTube.cxx:1687
TGeoTube.cxx:1688
TGeoTube.cxx:1689
TGeoTube.cxx:1690
TGeoTube.cxx:1691
TGeoTube.cxx:1692
TGeoTube.cxx:1693
TGeoTube.cxx:1694
TGeoTube.cxx:1695
TGeoTube.cxx:1696
TGeoTube.cxx:1697
TGeoTube.cxx:1698
TGeoTube.cxx:1699
TGeoTube.cxx:1700
TGeoTube.cxx:1701
TGeoTube.cxx:1702
TGeoTube.cxx:1703
TGeoTube.cxx:1704
TGeoTube.cxx:1705
TGeoTube.cxx:1706
TGeoTube.cxx:1707
TGeoTube.cxx:1708
TGeoTube.cxx:1709
TGeoTube.cxx:1710
TGeoTube.cxx:1711
TGeoTube.cxx:1712
TGeoTube.cxx:1713
TGeoTube.cxx:1714
TGeoTube.cxx:1715
TGeoTube.cxx:1716
TGeoTube.cxx:1717
TGeoTube.cxx:1718
TGeoTube.cxx:1719
TGeoTube.cxx:1720
TGeoTube.cxx:1721
TGeoTube.cxx:1722
TGeoTube.cxx:1723
TGeoTube.cxx:1724
TGeoTube.cxx:1725
TGeoTube.cxx:1726
TGeoTube.cxx:1727
TGeoTube.cxx:1728
TGeoTube.cxx:1729
TGeoTube.cxx:1730
TGeoTube.cxx:1731
TGeoTube.cxx:1732
TGeoTube.cxx:1733
TGeoTube.cxx:1734
TGeoTube.cxx:1735
TGeoTube.cxx:1736
TGeoTube.cxx:1737
TGeoTube.cxx:1738
TGeoTube.cxx:1739
TGeoTube.cxx:1740
TGeoTube.cxx:1741
TGeoTube.cxx:1742
TGeoTube.cxx:1743
TGeoTube.cxx:1744
TGeoTube.cxx:1745
TGeoTube.cxx:1746
TGeoTube.cxx:1747
TGeoTube.cxx:1748
TGeoTube.cxx:1749
TGeoTube.cxx:1750
TGeoTube.cxx:1751
TGeoTube.cxx:1752
TGeoTube.cxx:1753
TGeoTube.cxx:1754
TGeoTube.cxx:1755
TGeoTube.cxx:1756
TGeoTube.cxx:1757
TGeoTube.cxx:1758
TGeoTube.cxx:1759
TGeoTube.cxx:1760
TGeoTube.cxx:1761
TGeoTube.cxx:1762
TGeoTube.cxx:1763
TGeoTube.cxx:1764
TGeoTube.cxx:1765
TGeoTube.cxx:1766
TGeoTube.cxx:1767
TGeoTube.cxx:1768
TGeoTube.cxx:1769
TGeoTube.cxx:1770
TGeoTube.cxx:1771
TGeoTube.cxx:1772
TGeoTube.cxx:1773
TGeoTube.cxx:1774
TGeoTube.cxx:1775
TGeoTube.cxx:1776
TGeoTube.cxx:1777
TGeoTube.cxx:1778
TGeoTube.cxx:1779
TGeoTube.cxx:1780
TGeoTube.cxx:1781
TGeoTube.cxx:1782
TGeoTube.cxx:1783
TGeoTube.cxx:1784
TGeoTube.cxx:1785
TGeoTube.cxx:1786
TGeoTube.cxx:1787
TGeoTube.cxx:1788
TGeoTube.cxx:1789
TGeoTube.cxx:1790
TGeoTube.cxx:1791
TGeoTube.cxx:1792
TGeoTube.cxx:1793
TGeoTube.cxx:1794
TGeoTube.cxx:1795
TGeoTube.cxx:1796
TGeoTube.cxx:1797
TGeoTube.cxx:1798
TGeoTube.cxx:1799
TGeoTube.cxx:1800
TGeoTube.cxx:1801
TGeoTube.cxx:1802
TGeoTube.cxx:1803
TGeoTube.cxx:1804
TGeoTube.cxx:1805
TGeoTube.cxx:1806
TGeoTube.cxx:1807
TGeoTube.cxx:1808
TGeoTube.cxx:1809
TGeoTube.cxx:1810
TGeoTube.cxx:1811
TGeoTube.cxx:1812
TGeoTube.cxx:1813
TGeoTube.cxx:1814
TGeoTube.cxx:1815
TGeoTube.cxx:1816
TGeoTube.cxx:1817
TGeoTube.cxx:1818
TGeoTube.cxx:1819
TGeoTube.cxx:1820
TGeoTube.cxx:1821
TGeoTube.cxx:1822
TGeoTube.cxx:1823
TGeoTube.cxx:1824
TGeoTube.cxx:1825
TGeoTube.cxx:1826
TGeoTube.cxx:1827
TGeoTube.cxx:1828
TGeoTube.cxx:1829
TGeoTube.cxx:1830
TGeoTube.cxx:1831
TGeoTube.cxx:1832
TGeoTube.cxx:1833
TGeoTube.cxx:1834
TGeoTube.cxx:1835
TGeoTube.cxx:1836
TGeoTube.cxx:1837
TGeoTube.cxx:1838
TGeoTube.cxx:1839
TGeoTube.cxx:1840
TGeoTube.cxx:1841
TGeoTube.cxx:1842
TGeoTube.cxx:1843
TGeoTube.cxx:1844
TGeoTube.cxx:1845
TGeoTube.cxx:1846
TGeoTube.cxx:1847
TGeoTube.cxx:1848
TGeoTube.cxx:1849
TGeoTube.cxx:1850
TGeoTube.cxx:1851
TGeoTube.cxx:1852
TGeoTube.cxx:1853
TGeoTube.cxx:1854
TGeoTube.cxx:1855
TGeoTube.cxx:1856
TGeoTube.cxx:1857
TGeoTube.cxx:1858
TGeoTube.cxx:1859
TGeoTube.cxx:1860
TGeoTube.cxx:1861
TGeoTube.cxx:1862
TGeoTube.cxx:1863
TGeoTube.cxx:1864
TGeoTube.cxx:1865
TGeoTube.cxx:1866
TGeoTube.cxx:1867
TGeoTube.cxx:1868
TGeoTube.cxx:1869
TGeoTube.cxx:1870
TGeoTube.cxx:1871
TGeoTube.cxx:1872
TGeoTube.cxx:1873
TGeoTube.cxx:1874
TGeoTube.cxx:1875
TGeoTube.cxx:1876
TGeoTube.cxx:1877
TGeoTube.cxx:1878
TGeoTube.cxx:1879
TGeoTube.cxx:1880
TGeoTube.cxx:1881
TGeoTube.cxx:1882
TGeoTube.cxx:1883
TGeoTube.cxx:1884
TGeoTube.cxx:1885
TGeoTube.cxx:1886
TGeoTube.cxx:1887
TGeoTube.cxx:1888
TGeoTube.cxx:1889
TGeoTube.cxx:1890
TGeoTube.cxx:1891
TGeoTube.cxx:1892
TGeoTube.cxx:1893
TGeoTube.cxx:1894
TGeoTube.cxx:1895
TGeoTube.cxx:1896
TGeoTube.cxx:1897
TGeoTube.cxx:1898
TGeoTube.cxx:1899
TGeoTube.cxx:1900
TGeoTube.cxx:1901
TGeoTube.cxx:1902
TGeoTube.cxx:1903
TGeoTube.cxx:1904
TGeoTube.cxx:1905
TGeoTube.cxx:1906
TGeoTube.cxx:1907
TGeoTube.cxx:1908
TGeoTube.cxx:1909
TGeoTube.cxx:1910
TGeoTube.cxx:1911
TGeoTube.cxx:1912
TGeoTube.cxx:1913
TGeoTube.cxx:1914
TGeoTube.cxx:1915
TGeoTube.cxx:1916
TGeoTube.cxx:1917
TGeoTube.cxx:1918
TGeoTube.cxx:1919
TGeoTube.cxx:1920
TGeoTube.cxx:1921
TGeoTube.cxx:1922
TGeoTube.cxx:1923
TGeoTube.cxx:1924
TGeoTube.cxx:1925
TGeoTube.cxx:1926
TGeoTube.cxx:1927
TGeoTube.cxx:1928
TGeoTube.cxx:1929
TGeoTube.cxx:1930
TGeoTube.cxx:1931
TGeoTube.cxx:1932
TGeoTube.cxx:1933
TGeoTube.cxx:1934
TGeoTube.cxx:1935
TGeoTube.cxx:1936
TGeoTube.cxx:1937
TGeoTube.cxx:1938
TGeoTube.cxx:1939
TGeoTube.cxx:1940
TGeoTube.cxx:1941
TGeoTube.cxx:1942
TGeoTube.cxx:1943
TGeoTube.cxx:1944
TGeoTube.cxx:1945
TGeoTube.cxx:1946
TGeoTube.cxx:1947
TGeoTube.cxx:1948
TGeoTube.cxx:1949
TGeoTube.cxx:1950
TGeoTube.cxx:1951
TGeoTube.cxx:1952
TGeoTube.cxx:1953
TGeoTube.cxx:1954
TGeoTube.cxx:1955
TGeoTube.cxx:1956
TGeoTube.cxx:1957
TGeoTube.cxx:1958
TGeoTube.cxx:1959
TGeoTube.cxx:1960
TGeoTube.cxx:1961
TGeoTube.cxx:1962
TGeoTube.cxx:1963
TGeoTube.cxx:1964
TGeoTube.cxx:1965
TGeoTube.cxx:1966
TGeoTube.cxx:1967
TGeoTube.cxx:1968
TGeoTube.cxx:1969
TGeoTube.cxx:1970
TGeoTube.cxx:1971
TGeoTube.cxx:1972
TGeoTube.cxx:1973
TGeoTube.cxx:1974
TGeoTube.cxx:1975
TGeoTube.cxx:1976
TGeoTube.cxx:1977
TGeoTube.cxx:1978
TGeoTube.cxx:1979
TGeoTube.cxx:1980
TGeoTube.cxx:1981
TGeoTube.cxx:1982
TGeoTube.cxx:1983
TGeoTube.cxx:1984
TGeoTube.cxx:1985
TGeoTube.cxx:1986
TGeoTube.cxx:1987
TGeoTube.cxx:1988
TGeoTube.cxx:1989
TGeoTube.cxx:1990
TGeoTube.cxx:1991
TGeoTube.cxx:1992
TGeoTube.cxx:1993
TGeoTube.cxx:1994
TGeoTube.cxx:1995
TGeoTube.cxx:1996
TGeoTube.cxx:1997
TGeoTube.cxx:1998
TGeoTube.cxx:1999
TGeoTube.cxx:2000
TGeoTube.cxx:2001
TGeoTube.cxx:2002
TGeoTube.cxx:2003
TGeoTube.cxx:2004
TGeoTube.cxx:2005
TGeoTube.cxx:2006
TGeoTube.cxx:2007
TGeoTube.cxx:2008
TGeoTube.cxx:2009
TGeoTube.cxx:2010
TGeoTube.cxx:2011
TGeoTube.cxx:2012
TGeoTube.cxx:2013
TGeoTube.cxx:2014
TGeoTube.cxx:2015
TGeoTube.cxx:2016
TGeoTube.cxx:2017
TGeoTube.cxx:2018
TGeoTube.cxx:2019
TGeoTube.cxx:2020
TGeoTube.cxx:2021
TGeoTube.cxx:2022
TGeoTube.cxx:2023
TGeoTube.cxx:2024
TGeoTube.cxx:2025
TGeoTube.cxx:2026
TGeoTube.cxx:2027
TGeoTube.cxx:2028
TGeoTube.cxx:2029
TGeoTube.cxx:2030
TGeoTube.cxx:2031
TGeoTube.cxx:2032
TGeoTube.cxx:2033
TGeoTube.cxx:2034
TGeoTube.cxx:2035
TGeoTube.cxx:2036
TGeoTube.cxx:2037
TGeoTube.cxx:2038
TGeoTube.cxx:2039
TGeoTube.cxx:2040
TGeoTube.cxx:2041
TGeoTube.cxx:2042
TGeoTube.cxx:2043
TGeoTube.cxx:2044
TGeoTube.cxx:2045
TGeoTube.cxx:2046
TGeoTube.cxx:2047
TGeoTube.cxx:2048
TGeoTube.cxx:2049
TGeoTube.cxx:2050
TGeoTube.cxx:2051
TGeoTube.cxx:2052
TGeoTube.cxx:2053
TGeoTube.cxx:2054
TGeoTube.cxx:2055
TGeoTube.cxx:2056
TGeoTube.cxx:2057
TGeoTube.cxx:2058
TGeoTube.cxx:2059
TGeoTube.cxx:2060
TGeoTube.cxx:2061
TGeoTube.cxx:2062
TGeoTube.cxx:2063
TGeoTube.cxx:2064
TGeoTube.cxx:2065
TGeoTube.cxx:2066
TGeoTube.cxx:2067
TGeoTube.cxx:2068
TGeoTube.cxx:2069
TGeoTube.cxx:2070
TGeoTube.cxx:2071
TGeoTube.cxx:2072
TGeoTube.cxx:2073
TGeoTube.cxx:2074
TGeoTube.cxx:2075
TGeoTube.cxx:2076
TGeoTube.cxx:2077
TGeoTube.cxx:2078
TGeoTube.cxx:2079
TGeoTube.cxx:2080
TGeoTube.cxx:2081
TGeoTube.cxx:2082
TGeoTube.cxx:2083
TGeoTube.cxx:2084
TGeoTube.cxx:2085
TGeoTube.cxx:2086
TGeoTube.cxx:2087
TGeoTube.cxx:2088
TGeoTube.cxx:2089
TGeoTube.cxx:2090
TGeoTube.cxx:2091
TGeoTube.cxx:2092
TGeoTube.cxx:2093
TGeoTube.cxx:2094
TGeoTube.cxx:2095
TGeoTube.cxx:2096
TGeoTube.cxx:2097
TGeoTube.cxx:2098
TGeoTube.cxx:2099
TGeoTube.cxx:2100
TGeoTube.cxx:2101
TGeoTube.cxx:2102
TGeoTube.cxx:2103
TGeoTube.cxx:2104
TGeoTube.cxx:2105
TGeoTube.cxx:2106
TGeoTube.cxx:2107
TGeoTube.cxx:2108
TGeoTube.cxx:2109
TGeoTube.cxx:2110
TGeoTube.cxx:2111
TGeoTube.cxx:2112
TGeoTube.cxx:2113
TGeoTube.cxx:2114
TGeoTube.cxx:2115
TGeoTube.cxx:2116
TGeoTube.cxx:2117
TGeoTube.cxx:2118
TGeoTube.cxx:2119
TGeoTube.cxx:2120
TGeoTube.cxx:2121
TGeoTube.cxx:2122
TGeoTube.cxx:2123
TGeoTube.cxx:2124
TGeoTube.cxx:2125
TGeoTube.cxx:2126
TGeoTube.cxx:2127
TGeoTube.cxx:2128
TGeoTube.cxx:2129
TGeoTube.cxx:2130
TGeoTube.cxx:2131
TGeoTube.cxx:2132
TGeoTube.cxx:2133
TGeoTube.cxx:2134
TGeoTube.cxx:2135
TGeoTube.cxx:2136
TGeoTube.cxx:2137
TGeoTube.cxx:2138
TGeoTube.cxx:2139
TGeoTube.cxx:2140
TGeoTube.cxx:2141
TGeoTube.cxx:2142
TGeoTube.cxx:2143
TGeoTube.cxx:2144
TGeoTube.cxx:2145
TGeoTube.cxx:2146
TGeoTube.cxx:2147
TGeoTube.cxx:2148
TGeoTube.cxx:2149
TGeoTube.cxx:2150
TGeoTube.cxx:2151
TGeoTube.cxx:2152
TGeoTube.cxx:2153
TGeoTube.cxx:2154
TGeoTube.cxx:2155
TGeoTube.cxx:2156
TGeoTube.cxx:2157
TGeoTube.cxx:2158
TGeoTube.cxx:2159
TGeoTube.cxx:2160
TGeoTube.cxx:2161
TGeoTube.cxx:2162
TGeoTube.cxx:2163
TGeoTube.cxx:2164
TGeoTube.cxx:2165
TGeoTube.cxx:2166
TGeoTube.cxx:2167
TGeoTube.cxx:2168
TGeoTube.cxx:2169
TGeoTube.cxx:2170
TGeoTube.cxx:2171
TGeoTube.cxx:2172
TGeoTube.cxx:2173
TGeoTube.cxx:2174
TGeoTube.cxx:2175
TGeoTube.cxx:2176
TGeoTube.cxx:2177
TGeoTube.cxx:2178
TGeoTube.cxx:2179
TGeoTube.cxx:2180
TGeoTube.cxx:2181
TGeoTube.cxx:2182
TGeoTube.cxx:2183
TGeoTube.cxx:2184
TGeoTube.cxx:2185
TGeoTube.cxx:2186
TGeoTube.cxx:2187
TGeoTube.cxx:2188
TGeoTube.cxx:2189
TGeoTube.cxx:2190
TGeoTube.cxx:2191
TGeoTube.cxx:2192
TGeoTube.cxx:2193
TGeoTube.cxx:2194
TGeoTube.cxx:2195
TGeoTube.cxx:2196
TGeoTube.cxx:2197
TGeoTube.cxx:2198
TGeoTube.cxx:2199
TGeoTube.cxx:2200
TGeoTube.cxx:2201
TGeoTube.cxx:2202
TGeoTube.cxx:2203
TGeoTube.cxx:2204
TGeoTube.cxx:2205
TGeoTube.cxx:2206
TGeoTube.cxx:2207
TGeoTube.cxx:2208
TGeoTube.cxx:2209
TGeoTube.cxx:2210
TGeoTube.cxx:2211
TGeoTube.cxx:2212
TGeoTube.cxx:2213
TGeoTube.cxx:2214
TGeoTube.cxx:2215
TGeoTube.cxx:2216
TGeoTube.cxx:2217
TGeoTube.cxx:2218
TGeoTube.cxx:2219
TGeoTube.cxx:2220
TGeoTube.cxx:2221
TGeoTube.cxx:2222
TGeoTube.cxx:2223
TGeoTube.cxx:2224
TGeoTube.cxx:2225
TGeoTube.cxx:2226
TGeoTube.cxx:2227
TGeoTube.cxx:2228
TGeoTube.cxx:2229
TGeoTube.cxx:2230
TGeoTube.cxx:2231
TGeoTube.cxx:2232
TGeoTube.cxx:2233
TGeoTube.cxx:2234
TGeoTube.cxx:2235
TGeoTube.cxx:2236
TGeoTube.cxx:2237
TGeoTube.cxx:2238
TGeoTube.cxx:2239
TGeoTube.cxx:2240
TGeoTube.cxx:2241
TGeoTube.cxx:2242
TGeoTube.cxx:2243
TGeoTube.cxx:2244
TGeoTube.cxx:2245
TGeoTube.cxx:2246
TGeoTube.cxx:2247
TGeoTube.cxx:2248
TGeoTube.cxx:2249
TGeoTube.cxx:2250
TGeoTube.cxx:2251
TGeoTube.cxx:2252
TGeoTube.cxx:2253
TGeoTube.cxx:2254
TGeoTube.cxx:2255
TGeoTube.cxx:2256
TGeoTube.cxx:2257
TGeoTube.cxx:2258
TGeoTube.cxx:2259
TGeoTube.cxx:2260
TGeoTube.cxx:2261
TGeoTube.cxx:2262
TGeoTube.cxx:2263
TGeoTube.cxx:2264
TGeoTube.cxx:2265
TGeoTube.cxx:2266
TGeoTube.cxx:2267
TGeoTube.cxx:2268
TGeoTube.cxx:2269
TGeoTube.cxx:2270
TGeoTube.cxx:2271
TGeoTube.cxx:2272
TGeoTube.cxx:2273
TGeoTube.cxx:2274
TGeoTube.cxx:2275
TGeoTube.cxx:2276
TGeoTube.cxx:2277
TGeoTube.cxx:2278
TGeoTube.cxx:2279
TGeoTube.cxx:2280
TGeoTube.cxx:2281
TGeoTube.cxx:2282
TGeoTube.cxx:2283
TGeoTube.cxx:2284
TGeoTube.cxx:2285
TGeoTube.cxx:2286
TGeoTube.cxx:2287
TGeoTube.cxx:2288
TGeoTube.cxx:2289
TGeoTube.cxx:2290
TGeoTube.cxx:2291
TGeoTube.cxx:2292
TGeoTube.cxx:2293
TGeoTube.cxx:2294
TGeoTube.cxx:2295
TGeoTube.cxx:2296
TGeoTube.cxx:2297
TGeoTube.cxx:2298
TGeoTube.cxx:2299
TGeoTube.cxx:2300
TGeoTube.cxx:2301
TGeoTube.cxx:2302
TGeoTube.cxx:2303
TGeoTube.cxx:2304
TGeoTube.cxx:2305
TGeoTube.cxx:2306
TGeoTube.cxx:2307
TGeoTube.cxx:2308
TGeoTube.cxx:2309
TGeoTube.cxx:2310
TGeoTube.cxx:2311
TGeoTube.cxx:2312
TGeoTube.cxx:2313
TGeoTube.cxx:2314
TGeoTube.cxx:2315
TGeoTube.cxx:2316
TGeoTube.cxx:2317
TGeoTube.cxx:2318
TGeoTube.cxx:2319
TGeoTube.cxx:2320
TGeoTube.cxx:2321
TGeoTube.cxx:2322
TGeoTube.cxx:2323
TGeoTube.cxx:2324
TGeoTube.cxx:2325
TGeoTube.cxx:2326
TGeoTube.cxx:2327
TGeoTube.cxx:2328
TGeoTube.cxx:2329
TGeoTube.cxx:2330
TGeoTube.cxx:2331
TGeoTube.cxx:2332
TGeoTube.cxx:2333
TGeoTube.cxx:2334
TGeoTube.cxx:2335
TGeoTube.cxx:2336
TGeoTube.cxx:2337
TGeoTube.cxx:2338
TGeoTube.cxx:2339
TGeoTube.cxx:2340
TGeoTube.cxx:2341
TGeoTube.cxx:2342
TGeoTube.cxx:2343
TGeoTube.cxx:2344
TGeoTube.cxx:2345
TGeoTube.cxx:2346
TGeoTube.cxx:2347
TGeoTube.cxx:2348
TGeoTube.cxx:2349
TGeoTube.cxx:2350
TGeoTube.cxx:2351
TGeoTube.cxx:2352
TGeoTube.cxx:2353
TGeoTube.cxx:2354
TGeoTube.cxx:2355
TGeoTube.cxx:2356
TGeoTube.cxx:2357
TGeoTube.cxx:2358
TGeoTube.cxx:2359
TGeoTube.cxx:2360
TGeoTube.cxx:2361
TGeoTube.cxx:2362
TGeoTube.cxx:2363
TGeoTube.cxx:2364
TGeoTube.cxx:2365
TGeoTube.cxx:2366
TGeoTube.cxx:2367
TGeoTube.cxx:2368
TGeoTube.cxx:2369
TGeoTube.cxx:2370
TGeoTube.cxx:2371
TGeoTube.cxx:2372
TGeoTube.cxx:2373
TGeoTube.cxx:2374
TGeoTube.cxx:2375
TGeoTube.cxx:2376
TGeoTube.cxx:2377
TGeoTube.cxx:2378
TGeoTube.cxx:2379
TGeoTube.cxx:2380
TGeoTube.cxx:2381
TGeoTube.cxx:2382
TGeoTube.cxx:2383
TGeoTube.cxx:2384
TGeoTube.cxx:2385
TGeoTube.cxx:2386
TGeoTube.cxx:2387
TGeoTube.cxx:2388
TGeoTube.cxx:2389
TGeoTube.cxx:2390
TGeoTube.cxx:2391
TGeoTube.cxx:2392
TGeoTube.cxx:2393
TGeoTube.cxx:2394
TGeoTube.cxx:2395
TGeoTube.cxx:2396
TGeoTube.cxx:2397
TGeoTube.cxx:2398
TGeoTube.cxx:2399
TGeoTube.cxx:2400
TGeoTube.cxx:2401
TGeoTube.cxx:2402
TGeoTube.cxx:2403
TGeoTube.cxx:2404
TGeoTube.cxx:2405
TGeoTube.cxx:2406
TGeoTube.cxx:2407
TGeoTube.cxx:2408
TGeoTube.cxx:2409
TGeoTube.cxx:2410
TGeoTube.cxx:2411
TGeoTube.cxx:2412
TGeoTube.cxx:2413
TGeoTube.cxx:2414
TGeoTube.cxx:2415
TGeoTube.cxx:2416
TGeoTube.cxx:2417
TGeoTube.cxx:2418
TGeoTube.cxx:2419
TGeoTube.cxx:2420
TGeoTube.cxx:2421
TGeoTube.cxx:2422
TGeoTube.cxx:2423
TGeoTube.cxx:2424
TGeoTube.cxx:2425
TGeoTube.cxx:2426
TGeoTube.cxx:2427
TGeoTube.cxx:2428
TGeoTube.cxx:2429
TGeoTube.cxx:2430
TGeoTube.cxx:2431
TGeoTube.cxx:2432
TGeoTube.cxx:2433
TGeoTube.cxx:2434
TGeoTube.cxx:2435
TGeoTube.cxx:2436
TGeoTube.cxx:2437
TGeoTube.cxx:2438
TGeoTube.cxx:2439
TGeoTube.cxx:2440
TGeoTube.cxx:2441
TGeoTube.cxx:2442
TGeoTube.cxx:2443
TGeoTube.cxx:2444
TGeoTube.cxx:2445
TGeoTube.cxx:2446
TGeoTube.cxx:2447
TGeoTube.cxx:2448
TGeoTube.cxx:2449
TGeoTube.cxx:2450
TGeoTube.cxx:2451
TGeoTube.cxx:2452
TGeoTube.cxx:2453
TGeoTube.cxx:2454
TGeoTube.cxx:2455
TGeoTube.cxx:2456
TGeoTube.cxx:2457
TGeoTube.cxx:2458
TGeoTube.cxx:2459
TGeoTube.cxx:2460
TGeoTube.cxx:2461
TGeoTube.cxx:2462
TGeoTube.cxx:2463
TGeoTube.cxx:2464
TGeoTube.cxx:2465
TGeoTube.cxx:2466
TGeoTube.cxx:2467
TGeoTube.cxx:2468
TGeoTube.cxx:2469
TGeoTube.cxx:2470
TGeoTube.cxx:2471
TGeoTube.cxx:2472
TGeoTube.cxx:2473
TGeoTube.cxx:2474
TGeoTube.cxx:2475
TGeoTube.cxx:2476
TGeoTube.cxx:2477
TGeoTube.cxx:2478
TGeoTube.cxx:2479
TGeoTube.cxx:2480
TGeoTube.cxx:2481
TGeoTube.cxx:2482
TGeoTube.cxx:2483
TGeoTube.cxx:2484
TGeoTube.cxx:2485
TGeoTube.cxx:2486
TGeoTube.cxx:2487
TGeoTube.cxx:2488
TGeoTube.cxx:2489
TGeoTube.cxx:2490
TGeoTube.cxx:2491
TGeoTube.cxx:2492
TGeoTube.cxx:2493
TGeoTube.cxx:2494
TGeoTube.cxx:2495
TGeoTube.cxx:2496
TGeoTube.cxx:2497
TGeoTube.cxx:2498
TGeoTube.cxx:2499
TGeoTube.cxx:2500
TGeoTube.cxx:2501
TGeoTube.cxx:2502
TGeoTube.cxx:2503
TGeoTube.cxx:2504
TGeoTube.cxx:2505
TGeoTube.cxx:2506
TGeoTube.cxx:2507
TGeoTube.cxx:2508
TGeoTube.cxx:2509
TGeoTube.cxx:2510
TGeoTube.cxx:2511
TGeoTube.cxx:2512
TGeoTube.cxx:2513
TGeoTube.cxx:2514
TGeoTube.cxx:2515
TGeoTube.cxx:2516
TGeoTube.cxx:2517
TGeoTube.cxx:2518
TGeoTube.cxx:2519
TGeoTube.cxx:2520
TGeoTube.cxx:2521
TGeoTube.cxx:2522
TGeoTube.cxx:2523
TGeoTube.cxx:2524
TGeoTube.cxx:2525
TGeoTube.cxx:2526
TGeoTube.cxx:2527
TGeoTube.cxx:2528
TGeoTube.cxx:2529
TGeoTube.cxx:2530
TGeoTube.cxx:2531
TGeoTube.cxx:2532
TGeoTube.cxx:2533
TGeoTube.cxx:2534
TGeoTube.cxx:2535
TGeoTube.cxx:2536
TGeoTube.cxx:2537
TGeoTube.cxx:2538
TGeoTube.cxx:2539
TGeoTube.cxx:2540
TGeoTube.cxx:2541
TGeoTube.cxx:2542
TGeoTube.cxx:2543
TGeoTube.cxx:2544
TGeoTube.cxx:2545
TGeoTube.cxx:2546
TGeoTube.cxx:2547
TGeoTube.cxx:2548
TGeoTube.cxx:2549
TGeoTube.cxx:2550
TGeoTube.cxx:2551
TGeoTube.cxx:2552
TGeoTube.cxx:2553
TGeoTube.cxx:2554
TGeoTube.cxx:2555
TGeoTube.cxx:2556
TGeoTube.cxx:2557
TGeoTube.cxx:2558
TGeoTube.cxx:2559
TGeoTube.cxx:2560
TGeoTube.cxx:2561
TGeoTube.cxx:2562
TGeoTube.cxx:2563
TGeoTube.cxx:2564
TGeoTube.cxx:2565
TGeoTube.cxx:2566
TGeoTube.cxx:2567
TGeoTube.cxx:2568
TGeoTube.cxx:2569
TGeoTube.cxx:2570
TGeoTube.cxx:2571
TGeoTube.cxx:2572
TGeoTube.cxx:2573
TGeoTube.cxx:2574
TGeoTube.cxx:2575
TGeoTube.cxx:2576
TGeoTube.cxx:2577
TGeoTube.cxx:2578
TGeoTube.cxx:2579
TGeoTube.cxx:2580
TGeoTube.cxx:2581
TGeoTube.cxx:2582
TGeoTube.cxx:2583
TGeoTube.cxx:2584
TGeoTube.cxx:2585
TGeoTube.cxx:2586
TGeoTube.cxx:2587
TGeoTube.cxx:2588
TGeoTube.cxx:2589
TGeoTube.cxx:2590
TGeoTube.cxx:2591
TGeoTube.cxx:2592
TGeoTube.cxx:2593
TGeoTube.cxx:2594
TGeoTube.cxx:2595
TGeoTube.cxx:2596
TGeoTube.cxx:2597
TGeoTube.cxx:2598
TGeoTube.cxx:2599
TGeoTube.cxx:2600
TGeoTube.cxx:2601
TGeoTube.cxx:2602
TGeoTube.cxx:2603
TGeoTube.cxx:2604
TGeoTube.cxx:2605
TGeoTube.cxx:2606
TGeoTube.cxx:2607
TGeoTube.cxx:2608
TGeoTube.cxx:2609
TGeoTube.cxx:2610
TGeoTube.cxx:2611
TGeoTube.cxx:2612
TGeoTube.cxx:2613
TGeoTube.cxx:2614
TGeoTube.cxx:2615
TGeoTube.cxx:2616
TGeoTube.cxx:2617
TGeoTube.cxx:2618
TGeoTube.cxx:2619
TGeoTube.cxx:2620
TGeoTube.cxx:2621
TGeoTube.cxx:2622
TGeoTube.cxx:2623
TGeoTube.cxx:2624
TGeoTube.cxx:2625
TGeoTube.cxx:2626
TGeoTube.cxx:2627
TGeoTube.cxx:2628
TGeoTube.cxx:2629
TGeoTube.cxx:2630
TGeoTube.cxx:2631
TGeoTube.cxx:2632
TGeoTube.cxx:2633
TGeoTube.cxx:2634
TGeoTube.cxx:2635
TGeoTube.cxx:2636
TGeoTube.cxx:2637
TGeoTube.cxx:2638
TGeoTube.cxx:2639
TGeoTube.cxx:2640
TGeoTube.cxx:2641
TGeoTube.cxx:2642
TGeoTube.cxx:2643
TGeoTube.cxx:2644
TGeoTube.cxx:2645
TGeoTube.cxx:2646
TGeoTube.cxx:2647
TGeoTube.cxx:2648
TGeoTube.cxx:2649
TGeoTube.cxx:2650
TGeoTube.cxx:2651
TGeoTube.cxx:2652
TGeoTube.cxx:2653
TGeoTube.cxx:2654
TGeoTube.cxx:2655
TGeoTube.cxx:2656
TGeoTube.cxx:2657
TGeoTube.cxx:2658
TGeoTube.cxx:2659
TGeoTube.cxx:2660
TGeoTube.cxx:2661
TGeoTube.cxx:2662
TGeoTube.cxx:2663
TGeoTube.cxx:2664
TGeoTube.cxx:2665
TGeoTube.cxx:2666
TGeoTube.cxx:2667
TGeoTube.cxx:2668
TGeoTube.cxx:2669
TGeoTube.cxx:2670
TGeoTube.cxx:2671
TGeoTube.cxx:2672
TGeoTube.cxx:2673
TGeoTube.cxx:2674
TGeoTube.cxx:2675
TGeoTube.cxx:2676
TGeoTube.cxx:2677
TGeoTube.cxx:2678
TGeoTube.cxx:2679
TGeoTube.cxx:2680
TGeoTube.cxx:2681
TGeoTube.cxx:2682
TGeoTube.cxx:2683
TGeoTube.cxx:2684
TGeoTube.cxx:2685
TGeoTube.cxx:2686
TGeoTube.cxx:2687
TGeoTube.cxx:2688
TGeoTube.cxx:2689
TGeoTube.cxx:2690
TGeoTube.cxx:2691
TGeoTube.cxx:2692
TGeoTube.cxx:2693
TGeoTube.cxx:2694
TGeoTube.cxx:2695
TGeoTube.cxx:2696
TGeoTube.cxx:2697
TGeoTube.cxx:2698
TGeoTube.cxx:2699
TGeoTube.cxx:2700
TGeoTube.cxx:2701
TGeoTube.cxx:2702
TGeoTube.cxx:2703
TGeoTube.cxx:2704
TGeoTube.cxx:2705
TGeoTube.cxx:2706
TGeoTube.cxx:2707
TGeoTube.cxx:2708
TGeoTube.cxx:2709
TGeoTube.cxx:2710
TGeoTube.cxx:2711
TGeoTube.cxx:2712
TGeoTube.cxx:2713
TGeoTube.cxx:2714
TGeoTube.cxx:2715
TGeoTube.cxx:2716
TGeoTube.cxx:2717
TGeoTube.cxx:2718
TGeoTube.cxx:2719
TGeoTube.cxx:2720
TGeoTube.cxx:2721
TGeoTube.cxx:2722
TGeoTube.cxx:2723
TGeoTube.cxx:2724
TGeoTube.cxx:2725
TGeoTube.cxx:2726
TGeoTube.cxx:2727
TGeoTube.cxx:2728
TGeoTube.cxx:2729
TGeoTube.cxx:2730
TGeoTube.cxx:2731
TGeoTube.cxx:2732
TGeoTube.cxx:2733
TGeoTube.cxx:2734
TGeoTube.cxx:2735
TGeoTube.cxx:2736
TGeoTube.cxx:2737
TGeoTube.cxx:2738
TGeoTube.cxx:2739
TGeoTube.cxx:2740
TGeoTube.cxx:2741
TGeoTube.cxx:2742
TGeoTube.cxx:2743
TGeoTube.cxx:2744
TGeoTube.cxx:2745
TGeoTube.cxx:2746
TGeoTube.cxx:2747
TGeoTube.cxx:2748
TGeoTube.cxx:2749
TGeoTube.cxx:2750
TGeoTube.cxx:2751
TGeoTube.cxx:2752
TGeoTube.cxx:2753
TGeoTube.cxx:2754
TGeoTube.cxx:2755
TGeoTube.cxx:2756
TGeoTube.cxx:2757
TGeoTube.cxx:2758
TGeoTube.cxx:2759
TGeoTube.cxx:2760
TGeoTube.cxx:2761
TGeoTube.cxx:2762
TGeoTube.cxx:2763
TGeoTube.cxx:2764
TGeoTube.cxx:2765
TGeoTube.cxx:2766
TGeoTube.cxx:2767
TGeoTube.cxx:2768
TGeoTube.cxx:2769
TGeoTube.cxx:2770
TGeoTube.cxx:2771
TGeoTube.cxx:2772
TGeoTube.cxx:2773
TGeoTube.cxx:2774
TGeoTube.cxx:2775
TGeoTube.cxx:2776
TGeoTube.cxx:2777
TGeoTube.cxx:2778
TGeoTube.cxx:2779
TGeoTube.cxx:2780
TGeoTube.cxx:2781
TGeoTube.cxx:2782
TGeoTube.cxx:2783
TGeoTube.cxx:2784
TGeoTube.cxx:2785
TGeoTube.cxx:2786
TGeoTube.cxx:2787
TGeoTube.cxx:2788
TGeoTube.cxx:2789
TGeoTube.cxx:2790
TGeoTube.cxx:2791
TGeoTube.cxx:2792
TGeoTube.cxx:2793
TGeoTube.cxx:2794
TGeoTube.cxx:2795
TGeoTube.cxx:2796
TGeoTube.cxx:2797
TGeoTube.cxx:2798
TGeoTube.cxx:2799
TGeoTube.cxx:2800
TGeoTube.cxx:2801
TGeoTube.cxx:2802
TGeoTube.cxx:2803
TGeoTube.cxx:2804
TGeoTube.cxx:2805
TGeoTube.cxx:2806
TGeoTube.cxx:2807
TGeoTube.cxx:2808
TGeoTube.cxx:2809
TGeoTube.cxx:2810
TGeoTube.cxx:2811
TGeoTube.cxx:2812
TGeoTube.cxx:2813
TGeoTube.cxx:2814
TGeoTube.cxx:2815
TGeoTube.cxx:2816
TGeoTube.cxx:2817
TGeoTube.cxx:2818
TGeoTube.cxx:2819
TGeoTube.cxx:2820
TGeoTube.cxx:2821
TGeoTube.cxx:2822
TGeoTube.cxx:2823
TGeoTube.cxx:2824
TGeoTube.cxx:2825
TGeoTube.cxx:2826
TGeoTube.cxx:2827
TGeoTube.cxx:2828
TGeoTube.cxx:2829
TGeoTube.cxx:2830
TGeoTube.cxx:2831
TGeoTube.cxx:2832
TGeoTube.cxx:2833
TGeoTube.cxx:2834
TGeoTube.cxx:2835
TGeoTube.cxx:2836
TGeoTube.cxx:2837
TGeoTube.cxx:2838
TGeoTube.cxx:2839
TGeoTube.cxx:2840
TGeoTube.cxx:2841
TGeoTube.cxx:2842
TGeoTube.cxx:2843
TGeoTube.cxx:2844
TGeoTube.cxx:2845
TGeoTube.cxx:2846
TGeoTube.cxx:2847
TGeoTube.cxx:2848
TGeoTube.cxx:2849
TGeoTube.cxx:2850
TGeoTube.cxx:2851
TGeoTube.cxx:2852
TGeoTube.cxx:2853
TGeoTube.cxx:2854
TGeoTube.cxx:2855
TGeoTube.cxx:2856
TGeoTube.cxx:2857
TGeoTube.cxx:2858
TGeoTube.cxx:2859
TGeoTube.cxx:2860
TGeoTube.cxx:2861
TGeoTube.cxx:2862
TGeoTube.cxx:2863
TGeoTube.cxx:2864
TGeoTube.cxx:2865
TGeoTube.cxx:2866
TGeoTube.cxx:2867
TGeoTube.cxx:2868
TGeoTube.cxx:2869
TGeoTube.cxx:2870
TGeoTube.cxx:2871
TGeoTube.cxx:2872
TGeoTube.cxx:2873
TGeoTube.cxx:2874
TGeoTube.cxx:2875
TGeoTube.cxx:2876
TGeoTube.cxx:2877
TGeoTube.cxx:2878
TGeoTube.cxx:2879
TGeoTube.cxx:2880
TGeoTube.cxx:2881
TGeoTube.cxx:2882
TGeoTube.cxx:2883
TGeoTube.cxx:2884
TGeoTube.cxx:2885
TGeoTube.cxx:2886
TGeoTube.cxx:2887
TGeoTube.cxx:2888
TGeoTube.cxx:2889
TGeoTube.cxx:2890
TGeoTube.cxx:2891
TGeoTube.cxx:2892
TGeoTube.cxx:2893
TGeoTube.cxx:2894
TGeoTube.cxx:2895
TGeoTube.cxx:2896
TGeoTube.cxx:2897
TGeoTube.cxx:2898
TGeoTube.cxx:2899
TGeoTube.cxx:2900
TGeoTube.cxx:2901
TGeoTube.cxx:2902
TGeoTube.cxx:2903
TGeoTube.cxx:2904
TGeoTube.cxx:2905
TGeoTube.cxx:2906
TGeoTube.cxx:2907
TGeoTube.cxx:2908
TGeoTube.cxx:2909
TGeoTube.cxx:2910
TGeoTube.cxx:2911
TGeoTube.cxx:2912
TGeoTube.cxx:2913
TGeoTube.cxx:2914
TGeoTube.cxx:2915
TGeoTube.cxx:2916
TGeoTube.cxx:2917
TGeoTube.cxx:2918
TGeoTube.cxx:2919
TGeoTube.cxx:2920
TGeoTube.cxx:2921
TGeoTube.cxx:2922
TGeoTube.cxx:2923
TGeoTube.cxx:2924
TGeoTube.cxx:2925
TGeoTube.cxx:2926
TGeoTube.cxx:2927
TGeoTube.cxx:2928
TGeoTube.cxx:2929
TGeoTube.cxx:2930
TGeoTube.cxx:2931
TGeoTube.cxx:2932
TGeoTube.cxx:2933
TGeoTube.cxx:2934
TGeoTube.cxx:2935
TGeoTube.cxx:2936
TGeoTube.cxx:2937
TGeoTube.cxx:2938
TGeoTube.cxx:2939
TGeoTube.cxx:2940
TGeoTube.cxx:2941
TGeoTube.cxx:2942
TGeoTube.cxx:2943
TGeoTube.cxx:2944
TGeoTube.cxx:2945
TGeoTube.cxx:2946
TGeoTube.cxx:2947
TGeoTube.cxx:2948
TGeoTube.cxx:2949
TGeoTube.cxx:2950
TGeoTube.cxx:2951
TGeoTube.cxx:2952
TGeoTube.cxx:2953
TGeoTube.cxx:2954
TGeoTube.cxx:2955
TGeoTube.cxx:2956
TGeoTube.cxx:2957
TGeoTube.cxx:2958
TGeoTube.cxx:2959
TGeoTube.cxx:2960
TGeoTube.cxx:2961
TGeoTube.cxx:2962
TGeoTube.cxx:2963
TGeoTube.cxx:2964
TGeoTube.cxx:2965
TGeoTube.cxx:2966
TGeoTube.cxx:2967
TGeoTube.cxx:2968
TGeoTube.cxx:2969
TGeoTube.cxx:2970
TGeoTube.cxx:2971
TGeoTube.cxx:2972
TGeoTube.cxx:2973
TGeoTube.cxx:2974
TGeoTube.cxx:2975
TGeoTube.cxx:2976
TGeoTube.cxx:2977
TGeoTube.cxx:2978
TGeoTube.cxx:2979
TGeoTube.cxx:2980
TGeoTube.cxx:2981
TGeoTube.cxx:2982
TGeoTube.cxx:2983
TGeoTube.cxx:2984
TGeoTube.cxx:2985
TGeoTube.cxx:2986
TGeoTube.cxx:2987
TGeoTube.cxx:2988
TGeoTube.cxx:2989
TGeoTube.cxx:2990
TGeoTube.cxx:2991
TGeoTube.cxx:2992
TGeoTube.cxx:2993
TGeoTube.cxx:2994
TGeoTube.cxx:2995
TGeoTube.cxx:2996
TGeoTube.cxx:2997
TGeoTube.cxx:2998
TGeoTube.cxx:2999
TGeoTube.cxx:3000
TGeoTube.cxx:3001
TGeoTube.cxx:3002
TGeoTube.cxx:3003
TGeoTube.cxx:3004
TGeoTube.cxx:3005
TGeoTube.cxx:3006
TGeoTube.cxx:3007
TGeoTube.cxx:3008
TGeoTube.cxx:3009
TGeoTube.cxx:3010
TGeoTube.cxx:3011
TGeoTube.cxx:3012
TGeoTube.cxx:3013
TGeoTube.cxx:3014
TGeoTube.cxx:3015
TGeoTube.cxx:3016
TGeoTube.cxx:3017
TGeoTube.cxx:3018
TGeoTube.cxx:3019
TGeoTube.cxx:3020
TGeoTube.cxx:3021
TGeoTube.cxx:3022
TGeoTube.cxx:3023
TGeoTube.cxx:3024
TGeoTube.cxx:3025
TGeoTube.cxx:3026
TGeoTube.cxx:3027
TGeoTube.cxx:3028
TGeoTube.cxx:3029
TGeoTube.cxx:3030
TGeoTube.cxx:3031
TGeoTube.cxx:3032
TGeoTube.cxx:3033
TGeoTube.cxx:3034
TGeoTube.cxx:3035
TGeoTube.cxx:3036
TGeoTube.cxx:3037
TGeoTube.cxx:3038
TGeoTube.cxx:3039
TGeoTube.cxx:3040
TGeoTube.cxx:3041
TGeoTube.cxx:3042
TGeoTube.cxx:3043
TGeoTube.cxx:3044
TGeoTube.cxx:3045
TGeoTube.cxx:3046
TGeoTube.cxx:3047
TGeoTube.cxx:3048
TGeoTube.cxx:3049
TGeoTube.cxx:3050
TGeoTube.cxx:3051
TGeoTube.cxx:3052
TGeoTube.cxx:3053
TGeoTube.cxx:3054
TGeoTube.cxx:3055
TGeoTube.cxx:3056
TGeoTube.cxx:3057
TGeoTube.cxx:3058
TGeoTube.cxx:3059
TGeoTube.cxx:3060
TGeoTube.cxx:3061
TGeoTube.cxx:3062
TGeoTube.cxx:3063
TGeoTube.cxx:3064
TGeoTube.cxx:3065
TGeoTube.cxx:3066
TGeoTube.cxx:3067
TGeoTube.cxx:3068
TGeoTube.cxx:3069
TGeoTube.cxx:3070
TGeoTube.cxx:3071
TGeoTube.cxx:3072
TGeoTube.cxx:3073
TGeoTube.cxx:3074
TGeoTube.cxx:3075
TGeoTube.cxx:3076
TGeoTube.cxx:3077
TGeoTube.cxx:3078
TGeoTube.cxx:3079
TGeoTube.cxx:3080
TGeoTube.cxx:3081
TGeoTube.cxx:3082
TGeoTube.cxx:3083
TGeoTube.cxx:3084
TGeoTube.cxx:3085
TGeoTube.cxx:3086
TGeoTube.cxx:3087
TGeoTube.cxx:3088
TGeoTube.cxx:3089
TGeoTube.cxx:3090
TGeoTube.cxx:3091
TGeoTube.cxx:3092
TGeoTube.cxx:3093
TGeoTube.cxx:3094
TGeoTube.cxx:3095
TGeoTube.cxx:3096
TGeoTube.cxx:3097
TGeoTube.cxx:3098
TGeoTube.cxx:3099
TGeoTube.cxx:3100
TGeoTube.cxx:3101
TGeoTube.cxx:3102
TGeoTube.cxx:3103
TGeoTube.cxx:3104
TGeoTube.cxx:3105
TGeoTube.cxx:3106
TGeoTube.cxx:3107
TGeoTube.cxx:3108
TGeoTube.cxx:3109
TGeoTube.cxx:3110
TGeoTube.cxx:3111
TGeoTube.cxx:3112
TGeoTube.cxx:3113
TGeoTube.cxx:3114
TGeoTube.cxx:3115
TGeoTube.cxx:3116
TGeoTube.cxx:3117
TGeoTube.cxx:3118
TGeoTube.cxx:3119
TGeoTube.cxx:3120
TGeoTube.cxx:3121
TGeoTube.cxx:3122
TGeoTube.cxx:3123
TGeoTube.cxx:3124
TGeoTube.cxx:3125
TGeoTube.cxx:3126
TGeoTube.cxx:3127
TGeoTube.cxx:3128
TGeoTube.cxx:3129
TGeoTube.cxx:3130
TGeoTube.cxx:3131
TGeoTube.cxx:3132
TGeoTube.cxx:3133
TGeoTube.cxx:3134
TGeoTube.cxx:3135
TGeoTube.cxx:3136
TGeoTube.cxx:3137
TGeoTube.cxx:3138
TGeoTube.cxx:3139
TGeoTube.cxx:3140
TGeoTube.cxx:3141
TGeoTube.cxx:3142
TGeoTube.cxx:3143
TGeoTube.cxx:3144
TGeoTube.cxx:3145
TGeoTube.cxx:3146
TGeoTube.cxx:3147
TGeoTube.cxx:3148
TGeoTube.cxx:3149
TGeoTube.cxx:3150
TGeoTube.cxx:3151
TGeoTube.cxx:3152
TGeoTube.cxx:3153
TGeoTube.cxx:3154
TGeoTube.cxx:3155
TGeoTube.cxx:3156
TGeoTube.cxx:3157
TGeoTube.cxx:3158
TGeoTube.cxx:3159
TGeoTube.cxx:3160
TGeoTube.cxx:3161
TGeoTube.cxx:3162
TGeoTube.cxx:3163
TGeoTube.cxx:3164
TGeoTube.cxx:3165