154   if (ddp<0) ddp+= 360;
 
  157   if (ddp<0) ddp+= 360;
 
  158   if (ddp>360) ddp-=360;
 
  161   if (ddp<0) ddp+= 360;
 
  162   if (ddp>360) ddp-=360;
 
  165   if (ddp<0) ddp+= 360;
 
  166   if (ddp>360) ddp-=360;
 
  190      if ((
fRmax-daxis)>1E-5) {
 
  202   for (
Int_t i=0; i<3; i++) {
 
  203      norm[i] = point[i] - r0[i];
 
  204      normsq += norm[i]*norm[i];
 
  211   if (dir[0]*norm[0]+dir[1]*norm[1]+dir[2]*norm[2] < 0) {
 
  226      if (phi < 0) phi+=360.0;
 
  228      if (ddp<0) ddp+=360.;
 
  246   if (
fRmin>0) numPoints *= 2;
 
  247   else if (
fDphi<360) numPoints += 2;
 
  257   for (
Int_t i=0; i<3; i++) 
p[i] = 
pt[i]+t*dir[i];
 
  268   for (
Int_t i=0; i<3; i++) 
p[i] = 
pt[i]+t*dir[i];
 
  273   Double_t dd = (
p[0]*dir[0]+
p[1]*dir[1]+
p[2]*dir[2] - (
p[0]*dir[0]+
p[1]*dir[1])*
fR/rxy)/
d;
 
  283   for (
Int_t i=0; i<3; i++) 
p[i] = 
pt[i]+t*dir[i];
 
  285   if (rxy<1E-6) 
return 0;
 
  288   Double_t ddaxis = (
p[0]*dir[0]+
p[1]*dir[1]+
p[2]*dir[2] - (
p[0]*dir[0]+
p[1]*dir[1])*
fR/rxy)/daxis;
 
  289   Double_t dddaxis = 1 - ddaxis*ddaxis - (1-dir[2]*dir[2])*
fR/rxy +
 
  290                      fR*(
p[0]*dir[0]+
p[1]*dir[1])*(
p[0]*dir[0]+
p[1]*dir[1])/(rxy*rxy*rxy);
 
  300   if (iact<3 && safe) {
 
  325      Double_t dphi = 
TGeoTubeSeg::DistFromInsideS(point,dir,
fR-
fRmax,
fR+
fRmax, 
fRmax, 
c1,
s1,
c2,s2,cm,sm,cdfi);
 
  337   if (iact<3 && safe) {
 
  361      if (ddp<0) ddp+=360;;
 
  377      rxy2 = point[0]*point[0]+point[1]*point[1];
 
  379         if (!hasphi || inphi) inbring=
kTRUE;
 
  390      if (hasphi) dring = 
TGeoTubeSeg::DistFromOutsideS(point,dir,
TMath::Max(0.,
fR-
fRmax-eps),
fR+
fRmax+eps, 
fRmax+eps, 
c1,
s1,
c2,s2,cm,sm,cdfi);
 
  399      for (i=0; i<3; i++) 
pt[i] = point[i]+
snext*dir[i];
 
  403   if (daxis<0) daxis = 
Daxis(
pt,dir,0);
 
  404   if (daxis<
fRmin+1.E-8) {
 
  409         for (i=0; i<3; i++) 
pt[i] += 0.1*eps*dir[i];
 
  415      if (hasphi) dring = 
TGeoTubeSeg::DistFromInsideS(
pt,dir,
fR-
fRmin,
fR+
fRmin, 
fRmin, 
c1,
s1,
c2,s2,cm,sm,cdfi);
 
  417      if (dd<dring) 
return (
snext+dd);
 
  420      for (i=0; i<3; i++) 
pt[i] = point[i] + 
snext*dir[i];
 
  429      for (i=0; i<3; i++) 
pt[i] += 0.1*eps*dir[i];
 
  433   if (hasphi) dring = 
TGeoTubeSeg::DistFromInsideS(
pt,dir,
TMath::Max(0.,
fR-
fRmax-eps),
fR+
fRmax+eps, 
fRmax+eps, 
c1,
s1,
c2,s2,cm,sm,cdfi);
 
  441   for (i=0; i<3; i++) 
pt[i] = point[i] + 
snext*dir[i];
 
  517   Error(
"GetMakeRuntimeShape", 
"parametrized toruses not supported");
 
  526   printf(
"*** Shape %s: TGeoTorus ***\n", 
GetName());
 
  527   printf(
"    R    = %11.5f\n", 
fR);
 
  528   printf(
"    Rmin = %11.5f\n", 
fRmin);
 
  529   printf(
"    Rmax = %11.5f\n", 
fRmax);
 
  530   printf(
"    Phi1 = %11.5f\n", 
fPhi1);
 
  531   printf(
"    Dphi = %11.5f\n", 
fDphi);
 
  532   printf(
" Bounding box:\n");
 
  546   if (hasrmin) nbPnts *= 2;
 
  547   else if (hasphi) nbPnts += 2;
 
  552      nbSegs += (2*
n-1)*(
n-1);
 
  553      nbPols += (
n-1)*(
n-1);
 
  561                                   nbPnts, 3*nbPnts, nbSegs, 3*nbSegs, nbPols, 6*nbPols);
 
  579   Int_t indx, indp, startcap=0;
 
  592   for (i = 0; i < 
n; i++) { 
 
  593      for (j = 0; j < 
n-1; j++) {  
 
  594         buff.
fSegs[indx+(i*(
n-1)+j)*3] = 
c;
 
  595         buff.
fSegs[indx+(i*(
n-1)+j)*3+1] = i*(
n-1)+j;   
 
  596         buff.
fSegs[indx+(i*(
n-1)+j)*3+2] = i*(
n-1)+((j+1)%(
n-1)); 
 
  602   for (i = 0; i < 
n-1; i++) { 
 
  603      for (j = 0; j < 
n-1; j++) {  
 
  604         buff.
fSegs[indx+(i*(
n-1)+j)*3] = 
c;
 
  605         buff.
fSegs[indx+(i*(
n-1)+j)*3+1] = i*(
n-1)+j;     
 
  606         buff.
fSegs[indx+(i*(
n-1)+j)*3+2] = (i+1)*(
n-1)+j; 
 
  609   indx += 3*(
n-1)*(
n-1);
 
  610   startcap = (2*
n-1)*(
n-1);
 
  615      for (i = 0; i < 
n; i++) { 
 
  616         for (j = 0; j < 
n-1; j++) {  
 
  617            buff.
fSegs[indx+(i*(
n-1)+j)*3] = 
c;              
 
  618            buff.
fSegs[indx+(i*(
n-1)+j)*3+1] = indp + i*(
n-1)+j;   
 
  619            buff.
fSegs[indx+(i*(
n-1)+j)*3+2] = indp + i*(
n-1)+((j+1)%(
n-1)); 
 
  625      for (i = 0; i < 
n-1; i++) { 
 
  626         for (j = 0; j < 
n-1; j++) {  
 
  627            buff.
fSegs[indx+(i*(
n-1)+j)*3] = 
c;                
 
  628            buff.
fSegs[indx+(i*(
n-1)+j)*3+1] = indp + i*(
n-1)+j;     
 
  629            buff.
fSegs[indx+(i*(
n-1)+j)*3+2] = indp + (i+1)*(
n-1)+j; 
 
  632      indx += 3*(
n-1)*(
n-1);
 
  633      startcap = (4*
n-2)*(
n-1);
 
  640         for (j = 0; j < 
n-1; j++) {
 
  641            buff.
fSegs[indx+j*3] = 
c+1;
 
  642            buff.
fSegs[indx+j*3+1] = (
n-1)*i+j;     
 
  643            buff.
fSegs[indx+j*3+2] = indp+(
n-1)*i+j; 
 
  647         for (j = 0; j < 
n-1; j++) {
 
  648            buff.
fSegs[indx+j*3] = 
c+1;
 
  649            buff.
fSegs[indx+j*3+1] = (
n-1)*i+j;     
 
  650            buff.
fSegs[indx+j*3+2] = indp+(
n-1)*i+j; 
 
  655         for (j = 0; j < 
n-1; j++) {
 
  656            buff.
fSegs[indx+j*3] = 
c+1;
 
  657            buff.
fSegs[indx+j*3+1] = (
n-1)*i+j;     
 
  658            buff.
fSegs[indx+j*3+2] = 
n*(
n-1);       
 
  662         for (j = 0; j < 
n-1; j++) {
 
  663            buff.
fSegs[indx+j*3] = 
c+1;
 
  664            buff.
fSegs[indx+j*3+1] = (
n-1)*i+j;     
 
  665            buff.
fSegs[indx+j*3+2] = 
n*(
n-1)+1;     
 
  676   for (i=0; i<
n-1; i++) {
 
  677      for (j=0; j<
n-1; j++) {
 
  679         buff.
fPols[indx++] = 4;
 
  680         buff.
fPols[indx++] = 
n*(
n-1)+(
n-1)*i+((j+1)%(
n-1)); 
 
  681         buff.
fPols[indx++] = (
n-1)*(i+1)+j; 
 
  682         buff.
fPols[indx++] = 
n*(
n-1)+(
n-1)*i+j; 
 
  683         buff.
fPols[indx++] = (
n-1)*i+j; 
 
  687      indp = (2*
n-1)*(
n-1); 
 
  690      for (i=0; i<
n-1; i++) {
 
  691         for (j=0; j<
n-1; j++) {
 
  693            buff.
fPols[indx++] = 4;
 
  694            buff.
fPols[indx++] = indp+
n*(
n-1)+(
n-1)*i+j; 
 
  695            buff.
fPols[indx++] = indp+(
n-1)*(i+1)+j; 
 
  696            buff.
fPols[indx++] = indp+
n*(
n-1)+(
n-1)*i+((j+1)%(
n-1)); 
 
  697            buff.
fPols[indx++] = indp+(
n-1)*i+j; 
 
  705      for (j=0; j<
n-1; j++) {
 
  708         buff.
fPols[indx++] = j;         
 
  709         buff.
fPols[indx++] = startcap+j;        
 
  711            buff.
fPols[indx++] = indp+j; 
 
  712         buff.
fPols[indx++] = startcap+((j+1)%(
n-1)); 
 
  716      for (j=0; j<
n-1; j++) {
 
  719         buff.
fPols[indx++] = (
n-1)*i+j;         
 
  720         buff.
fPols[indx++] = startcap+(
n-1)+((j+1)%(
n-1));    
 
  722            buff.
fPols[indx++] = indp+(
n-1)*i+j; 
 
  723         buff.
fPols[indx++] = startcap+(
n-1)+j;      
 
  742      for (i=0; i<2; i++) saf[i]=-saf[i];
 
  751   for (i=0; i<2; i++) saf[i]=-saf[i];
 
  763   out << 
"   r    = " << 
fR << 
";" << std::endl;
 
  764   out << 
"   rmin = " << 
fRmin << 
";" << std::endl;
 
  765   out << 
"   rmax = " << 
fRmax << 
";" << std::endl;
 
  766   out << 
"   phi1 = " << 
fPhi1 << 
";" << std::endl;
 
  767   out << 
"   dphi = " << 
fDphi << 
";" << std::endl;
 
  768   out << 
"   TGeoShape *" << 
GetPointerName() << 
" = new TGeoTorus(\"" << 
GetName() << 
"\",r,rmin,rmax,phi1,dphi);" << std::endl;
 
  809   for (i=0; i<
n; i++) {
 
  813      for (j=0; j<
n-1; j++) {
 
  825      for (i=0; i<
n; i++) {
 
  829         for (j=0; j<
n-1; j++) {
 
  867   for (i=0; i<
n; i++) {
 
  871      for (j=0; j<
n-1; j++) {
 
  884      for (i=0; i<
n; i++) {
 
  888         for (j=0; j<
n-1; j++) {
 
  920   else if (
fDphi<360.)              numPoints += 2;
 
  949      t = (-3*
q*sq3+delta)/(6*sq3);
 
  950      u = (3*
q*sq3+delta)/(6*sq3);
 
  961   t = 
x[0]*
x[0]+
a*
x[0]+
b;
 
  967      x[1] = 0.5*(-u-delta);
 
  968      x[2] = 0.5*(-u+delta);
 
  992      if (delta<0) 
return 0;
 
  997         x[ireal++] = -
h-0.25*
a;
 
  998         x[ireal++] = 
h-0.25*
a;
 
 1003         x[ireal++] = -
h-0.25*
a;
 
 1004         x[ireal++] = 
h-0.25*
a;
 
 1008         for (i=0; i<ireal; i++) xx[i] = 
x[ind[i]];
 
 1015      x[ireal++] = -0.25*
a;
 
 1017      for (i=0; i<ind[0]; i++) 
x[ireal++] = xx[i]-0.25*
a;
 
 1020         for (i=0; i<ireal; i++) xx[i] = 
x[ind[i]];
 
 1029      if (xx[0]<=0) 
return 0;
 
 1033      for (i=0; i<3; i++) {
 
 1045      x[ireal++] = 0.5*(-
h-delta)-0.25*
a;
 
 1046      x[ireal++] = 0.5*(-
h+delta)-0.25*
a;
 
 1051      x[ireal++] = 0.5*(
h-delta)-0.25*
a;
 
 1052      x[ireal++] = 0.5*(
h+delta)-0.25*
a;
 
 1056      for (i=0; i<ireal; i++) xx[i] = 
x[ind[i]];
 
 1075   Double_t b = 2.*(r0sq+2.*rdotn*rdotn-rsumsq+2.*
fR*
fR*dir[2]*dir[2]);
 
 1084      Double_t b0 = (
pt[0]*dir[0]+
pt[1]*dir[1])/(dir[0]*dir[0]+dir[1]*dir[1]);
 
 1085      Double_t c0 = (
pt[0]*
pt[0] + (
pt[1]-r0)*(
pt[1]+r0))/(dir[0]*dir[0]+dir[1]*dir[1]);
 
 1089         if (
y[nsol]>-tol) nsol++;
 
 1091         if (
y[nsol]>-tol) nsol++;
 
 1094      c0 = (
pt[0]*
pt[0] + (
pt[1]-r0)*(
pt[1]+r0))/(dir[0]*dir[0]+dir[1]*dir[1]);
 
 1098         if (
y[nsol]>-tol) nsol++;
 
 1100         if (
y[nsol]>-tol) nsol++;
 
 1106         for (
Int_t j=0; j<nsol; j++) 
x[j] = 
y[ind[j]];
 
 1116   for (
Int_t i=0; i<nsol; i++) {
 
 1117      if (
x[i]<-10) 
continue;
 
 1122      for (
Int_t ipt=0; ipt<3; ipt++) norm[ipt] = 
pt[ipt]+
x[i]*dir[ipt] - r0[ipt];
 
 1123      ndotd = norm[0]*dir[0]+norm[1]*dir[1]+norm[2]*dir[2];
 
 1125         if (ndotd<0) 
continue;
 
 1127         if (ndotd>0) 
continue;
 
 1132      Double_t eps0 = -delta/(4.*s*s*s + 3.*
a*s*s + 2.*
b*s + 
c);
 
 1137         delta = s*s*s*s + 
a*s*s*s + 
b*s*s + 
c*s + 
d;
 
 1138         eps = -delta/(4.*s*s*s + 3.*
a*s*s + 2.*
b*s + 
c);
 
 1157   if (hasrmin) nvert *= 2;
 
 1158   else if (hasphi) nvert += 2;
 
 1159   nsegs = (2*
n-1)*(
n-1);
 
 1160   npols = (
n-1)*(
n-1);
 
 1162      nsegs += (2*
n-1)*(
n-1);
 
 1163      npols += (
n-1)*(
n-1);
 
 1185      if (hasrmin) nbPnts *= 2;
 
 1186      else if (hasphi) nbPnts += 2;
 
 1191         nbSegs += (2*
n-1)*(
n-1);
 
 1192         nbPols += (
n-1)*(
n-1);
 
 1199      if (buffer.
SetRawSizes(nbPnts, 3*nbPnts, nbSegs, 3*nbSegs, nbPols, 6*nbPols)) {
 
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t np
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t points
R__EXTERN TGeoManager * gGeoManager
Generic 3D primitive description class.
Bool_t SectionsValid(UInt_t mask) const
void SetSectionsValid(UInt_t mask)
Bool_t SetRawSizes(UInt_t reqPnts, UInt_t reqPntsCapacity, UInt_t reqSegs, UInt_t reqSegsCapacity, UInt_t reqPols, UInt_t reqPolsCapacity)
Set kRaw tessellation section of buffer with supplied sizes.
virtual void InspectShape() const
Prints shape parameters.
virtual Double_t DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact=1, Double_t step=TGeoShape::Big(), Double_t *safe=nullptr) const
Compute distance from outside point to surface of the box.
virtual void FillBuffer3D(TBuffer3D &buffer, Int_t reqSections, Bool_t localFrame) const
Fills the supplied buffer, with sections in desired frame See TBuffer3D.h for explanation of sections...
Int_t GetNsegments() const
Get number of segments approximating circles.
Geometrical transformation package.
Base abstract class for all shapes.
Int_t GetBasicColor() const
Get the basic color (0-7).
void TransformPoints(Double_t *points, UInt_t NbPoints) const
Tranform a set of points (LocalToMaster)
void SetShapeBit(UInt_t f, Bool_t set)
Equivalent of TObject::SetBit.
static Double_t SafetyPhi(const Double_t *point, Bool_t in, Double_t phi1, Double_t phi2)
Static method to compute safety w.r.t a phi corner defined by cosines/sines of the angles phi1,...
static Bool_t IsSameWithinTolerance(Double_t a, Double_t b)
Check if two numbers differ with less than a tolerance.
const char * GetPointerName() const
Provide a pointer name containing uid.
Int_t ShapeDistancetoPrimitive(Int_t numpoints, Int_t px, Int_t py) const
Returns distance to shape primitive mesh.
virtual const char * GetName() const
Get the shape name.
static void NormalPhi(const Double_t *point, const Double_t *dir, Double_t *norm, Double_t c1, Double_t s1, Double_t c2, Double_t s2)
Static method to compute normal to phi planes.
static Double_t Tolerance()
Bool_t TestShapeBit(UInt_t f) const
The torus is defined by its axial radius, its inner and outer radius.
Int_t SolveQuartic(Double_t a, Double_t b, Double_t c, Double_t d, Double_t *x) const
Find real solutions of the quartic equation : x^4 + a*x^3 + b*x^2 + c*x + d = 0 Input: a,...
virtual Bool_t Contains(const Double_t *point) const
Test if point is inside the torus.
virtual void 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 specified by dirs. Store output in dist...
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
virtual TGeoShape * GetMakeRuntimeShape(TGeoShape *mother, TGeoMatrix *mat) const
Create a shape fitting the mother.
Double_t ToBoundary(const Double_t *pt, const Double_t *dir, Double_t r, Bool_t in) const
Returns distance to the surface or the torus (fR,r) from a point, along a direction.
virtual void InspectShape() const
print shape parameters
Double_t DDDaxis(const Double_t *pt, const Double_t *dir, Double_t t) const
Second derivative of distance to torus axis w.r.t t.
virtual Double_t Capacity() const
Computes capacity of the shape in [length^3].
virtual void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const
Returns numbers of vertices, segments and polygons composing the shape mesh.
virtual Double_t DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact=1, Double_t step=TGeoShape::Big(), Double_t *safe=nullptr) const
Compute distance from outside point to surface of the torus.
Double_t Daxis(const Double_t *pt, const Double_t *dir, Double_t t) const
Computes distance to axis of the torus from point pt + t*dir;.
virtual void SetDimensions(Double_t *param)
Set torus dimensions starting from a list.
void SetTorusDimensions(Double_t r, Double_t rmin, Double_t rmax, Double_t phi1, Double_t dphi)
Set torus dimensions.
virtual void SetSegsAndPols(TBuffer3D &buff) const
Fill TBuffer3D structure for segments and polygons.
virtual Double_t DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact=1, Double_t step=TGeoShape::Big(), Double_t *safe=nullptr) const
Compute distance from inside point to surface of the torus.
virtual void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm)
Compute normal to closest surface from POINT.
virtual void SetPoints(Double_t *points) const
Create torus mesh points.
virtual const TBuffer3D & GetBuffer3D(Int_t reqSections, Bool_t localFrame) const
Fills a static 3D buffer and returns a reference.
virtual Double_t GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const
Get range of shape for a given axis.
virtual Int_t GetNmeshVertices() const
Return number of vertices of the mesh representation.
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
Compute closest distance from point px,py to each vertex.
Double_t DDaxis(const Double_t *pt, const Double_t *dir, Double_t t) const
Computes derivative w.r.t. t of the distance to axis of the torus from point pt + t*dir;.
virtual void ComputeBBox()
Compute bounding box of the torus.
virtual TGeoVolume * Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step)
Divide this torus shape belonging to volume "voldiv" into ndiv volumes called divname,...
virtual void 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 specified by dirs. Store output in dist...
virtual void GetBoundingCylinder(Double_t *param) const
Fill vector param[4] with the bounding cylinder parameters.
virtual void 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.
virtual Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const
computes the closest distance from given point to this shape, according to option.
TGeoTorus()
Default constructor.
virtual TBuffer3D * MakeBuffer3D() const
Creates a TBuffer3D describing this shape.
Int_t SolveCubic(Double_t a, Double_t b, Double_t c, Double_t *x) const
Find real solutions of the cubic equation : x^3 + a*x^2 + b*x + c = 0 Input: a,b,c Output: x[3] real ...
virtual const char * GetAxisName(Int_t iaxis) const
Returns name of axis IAXIS.
virtual void Sizeof3D() const
fill size of this 3-D object
virtual void 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 coor...
virtual void 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.
static Double_t 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.
static Double_t 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 algorith...
static Double_t 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 al...
static Double_t 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.
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual const char * ClassName() const
Returns name of class to which the object belongs.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Long64_t LocMin(Long64_t n, const T *a)
Returns index of array with the minimum element.
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
T1 Sign(T1 a, T2 b)
Returns a value with the magnitude of a and the sign of b.
Double_t ATan2(Double_t y, Double_t x)
Returns the principal value of the arc tangent of y/x, expressed in radians.
Long64_t LocMax(Long64_t n, const T *a)
Returns index of array with the maximum element.
constexpr Double_t DegToRad()
Conversion from degree to radian: .
Double_t Sqrt(Double_t x)
Returns the square root of x.
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Returns x raised to the power y.
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
Double_t Cos(Double_t)
Returns the cosine of an angle of x radians.
Double_t Sin(Double_t)
Returns the sine of an angle of x radians.
void Sort(Index n, const Element *a, Index *index, Bool_t down=kTRUE)
Sort the n elements of the array a of generic templated type Element.
constexpr Double_t RadToDeg()
Conversion from radian to degree: .
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
#define snext(osub1, osub2)