300         Fatal(
"ComputeBBox", 
"Wrong section order");
 
  307      Fatal(
"ComputeBBox", 
"Shape %s at index %d: Not allowed first two or last two sections at same Z", 
GetName(),
 
  355   fOrigin[2] = (zmax + zmin) / 2;
 
  358   fDZ = (zmax - zmin) / 2;
 
 
  379   if ((
fZ[
ipl + 1] - point[2]) < (point[2] - 
fZ[
ipl]))
 
  388         r = 
TMath::Sqrt(point[0] * point[0] + point[1] * point[1]);
 
  395            r = 
TMath::Sqrt(point[0] * point[0] + point[1] * point[1]);
 
  422         TGeoConeSeg::ComputeNormalS(
ptnew, dir, 
norm, 
dz, 
rmin1, 
rmax1, 
rmin2, 
rmax2, 
fC1, 
fS1, 
fC2, 
fS2);
 
 
  437   if ((point[2] < 
fZ[0]) || (point[2] > 
fZ[
fNz - 1]))
 
  440   Double_t r2 = point[0] * point[0] + point[1] * point[1];
 
  446      if (point[2] > 
fZ[
izt])
 
 
  554         snxt = 
TGeoTubeSeg::DistFromInsideS(
point_new, dir, 
fRmin[
ipl], 
fRmax[
ipl], 
dz, 
fC1, 
fS1, 
fC2, 
fS2, 
fCm, 
fSm,
 
  566   for (
Int_t i = 0; i < 3; i++)
 
 
  594   local[2] = point[2] - 0.5 * (zmin + zmax);
 
  605         snxt = 
TGeoTubeSeg::DistFromOutsideS(
local, dir, 
rmin1, 
rmax1, 
dz, 
fC1, 
fS1, 
fC2, 
fS2, 
fCm, 
fSm, 
fCdphi);
 
  610         snxt = 
TGeoConeSeg::DistFromOutsideS(
local, dir, 
dz, 
rmin1, 
rmax1, 
rmin2, 
rmax2, 
fC1, 
fS1, 
fC2, 
fS2, 
fCm, 
fSm,
 
 
  639   if ((point[2] < 
fZ[0]) && (dir[2] <= 0))
 
  641   if ((point[2] > 
fZ[
fNz - 1]) && (dir[2] >= 0))
 
  648   Double_t r2 = point[0] * point[0] + point[1] * point[1];
 
  652      Double_t rpr = -point[0] * dir[0] - point[1] * dir[1];
 
 
  741   Double_t zmax = start + ndiv * step;
 
  746      Error(
"Divide", 
"Shape %s: cannot divide a pcon on radius", 
GetName());
 
  759      for (
id = 0; 
id < ndiv; 
id++) {
 
  760         voldiv->AddNodeOffset(vol, 
id, start + 
id * step + step / 2, opt.
Data());
 
  770            if ((start + ndiv * step) > 
fZ[
ipl + 1])
 
  779         Error(
"Divide", 
"Shape %s: cannot divide pcon on Z if divided region is not between 2 planes", 
GetName());
 
  787      for (
id = 0; 
id < ndiv; 
id++) {
 
  812         voldiv->AddNodeOffset(vol, 
id, start + 
id * step + step / 2, opt.
Data());
 
  816   default: 
Error(
"Divide", 
"Shape %s: Wrong axis %d for division", 
GetName(), 
iaxis); 
return nullptr;
 
 
  827   case 2: 
return "PHI";
 
  829   default: 
return "UNDEFINED";
 
 
  865      if (
fRmin[i] < param[0])
 
  867      if (
fRmax[i] > param[1])
 
  870   param[0] *= param[0];
 
  871   param[1] *= param[1];
 
  878   param[3] = param[2] + 
fDphi;                     
 
 
  928   printf(
" Bounding box:\n");
 
 
  980   for (i = 0; i < 
nz * 2; i++) {
 
  982      for (
j = 1; 
j < 
n; 
j++) {
 
  995   for (i = 0; i < 2; i++) {
 
  997      for (
j = 0; 
j < 
n; 
j++) {
 
 1005   for (i = 0; i < (
nz - 1); i++) {
 
 1008      for (
j = 0; 
j < 
n; 
j++) {
 
 1015      for (
j = 0; 
j < 
n; 
j++) {
 
 1025      for (i = 1; i < (
nz - 1); i++) {
 
 1026         for (
j = 0; 
j < 2; 
j++) {
 
 1029            buff.fSegs[
indx++] = (2 * i + 1) * 
n + 
j * (
n - 1);
 
 1039   for (
j = 0; 
j < 
n - 1; 
j++) {
 
 1047   for (
j = 0; 
j < 
n - 1; 
j++) {
 
 1072   for (k = 0; k < (
nz - 1); k++) {
 
 1073      for (
j = 0; 
j < 
n - 1; 
j++) {
 
 1081      for (
j = 0; 
j < 
n - 1; 
j++) {
 
 1110      for (k = 0; k < (
nz - 1); k++) {
 
 
 1139   if ((
nz < 2) || (
nbPnts <= 0) || (
n < 2))
 
 1147   for (i = 0; i < 
nz; i++) {
 
 1149      for (
j = 1; 
j < 
n; 
j++) {
 
 1158   for (
j = 0; 
j < 
n; 
j++) {
 
 1166   for (
j = 0; 
j < 
n; 
j++) {
 
 1173   for (i = 0; i < (
nz - 1); i++) {
 
 1176      for (
j = 0; 
j < 
n; 
j++) {
 
 1188   for (
j = 0; 
j < 
n - 1; 
j++) {
 
 1199   for (
j = 0; 
j < 
n - 1; 
j++) {
 
 1208   for (
Int_t k = 0; k < (
nz - 1); k++) {
 
 1211      for (
j = 0; 
j < 
n - 1; 
j++) {
 
 
 1338   if (
dz < 1E-8 && (
ipl + 2 < 
fNz)) {
 
 
 1375   out << 
"   // Shape: " << 
GetName() << 
" type: " << 
ClassName() << std::endl;
 
 1376   out << 
"   phi1  = " << 
fPhi1 << 
";" << std::endl;
 
 1377   out << 
"   dphi  = " << 
fDphi << 
";" << std::endl;
 
 1378   out << 
"   nz    = " << 
fNz << 
";" << std::endl;
 
 1379   out << 
"   auto " << 
GetPointerName() << 
" = new TGeoPcon(\"" << 
GetName() << 
"\", phi1, dphi, nz);" << std::endl;
 
 1381      out << 
"      z     = " << 
fZ[i] << 
";" << std::endl;
 
 1382      out << 
"      rmin  = " << 
fRmin[i] << 
";" << std::endl;
 
 1383      out << 
"      rmax  = " << 
fRmax[i] << 
";" << std::endl;
 
 1384      out << 
"   " << 
GetPointerName() << 
"->DefineSection(" << i << 
", z,rmin,rmax);" << std::endl;
 
 
 1400      Error(
"SetDimensions", 
"Pcon %s: Number of Z sections must be > 2", 
GetName());
 
 1429      DefineSection(i, param[3 + 3 * i], param[4 + 3 * i], param[5 + 3 * i]);
 
 
 1446      for (i = 0; i < 
fNz; i++) {
 
 1448            for (
j = 0; 
j < 
n; 
j++) {
 
 1454         for (
j = 0; 
j < 
n; 
j++) {
 
 
 1487      for (i = 0; i < 
fNz; i++) {
 
 1489            for (
j = 0; 
j < 
n; 
j++) {
 
 1495         for (
j = 0; 
j < 
n; 
j++) {
 
 
 1566      npols = 2 * (
n - 1) + (
nz - 1) * (
n - 1);
 
 
 1608   if (
R__b.IsReading()) {
 
 
int Int_t
Signed integer 4 bytes (int)
 
float Float_t
Float 4 bytes (float)
 
double Double_t
Double 8 bytes.
 
const char Option_t
Option string (const char)
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
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 id
 
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.
 
Buffer base class used for serializing objects.
 
void FillBuffer3D(TBuffer3D &buffer, Int_t reqSections, Bool_t localFrame) const override
Fills the supplied buffer, with sections in desired frame See TBuffer3D.h for explanation of sections...
 
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 override
Compute distance from outside point to surface of the box.
 
void InspectShape() const override
Prints shape parameters.
 
A cone segment is a cone having a range in phi.
 
static void ComputeNormalS(const Double_t *point, const Double_t *dir, Double_t *norm, Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2, Double_t c1, Double_t s1, Double_t c2, Double_t s2)
Compute normal to closest surface from POINT.
 
Double_t Capacity() const override
Computes capacity of the shape in [length^3].
 
static Double_t DistFromOutsideS(const Double_t *point, const Double_t *dir, Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2, Double_t c1, Double_t s1, Double_t c2, Double_t s2, Double_t cm, Double_t sm, Double_t cdfi)
compute distance from outside point to surface of arbitrary tube
 
static Double_t SafetyS(const Double_t *point, Bool_t in, Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2, Double_t phi1, Double_t phi2, Int_t skipz=0)
Static method to compute the closest distance from given point to this shape.
 
static Double_t DistFromInsideS(const Double_t *point, const Double_t *dir, Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2, 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
 
The cones are defined by 5 parameters:
 
static void ComputeNormalS(const Double_t *point, const Double_t *dir, Double_t *norm, Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2)
Compute normal to closest surface from POINT.
 
static Double_t DistFromInsideS(const Double_t *point, const Double_t *dir, Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2)
Compute distance from inside point to surface of the cone (static) Boundary safe algorithm.
 
static Double_t DistFromOutsideS(const Double_t *point, const Double_t *dir, Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2)
Compute distance from outside point to surface of the tube Boundary safe algorithm.
 
static Double_t SafetyS(const Double_t *point, Bool_t in, Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2, Int_t skipz=0)
computes the closest distance from given point to this shape, according to option.
 
TGeoVolumeMulti * MakeVolumeMulti(const char *name, TGeoMedium *medium)
Make a TGeoVolumeMulti handling a list of volumes.
 
TObjArray * GetListOfShapes() const
 
Int_t GetNsegments() const
Get number of segments approximating circles.
 
Node containing an offset.
 
a cylindrical phi divison pattern
 
base finder class for patterns. A pattern is specifying a division type
 
A polycone is represented by a sequence of tubes/cones, glued together at defined Z planes.
 
Double_t fSm
Cosine of (phi1+phi2)/2.
 
Double_t * GetRmax() const
 
void DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const override
Compute distance from array of input points having directions specified by dirs. Store output in dist...
 
Double_t SafetyToSegment(const Double_t *point, Int_t ipl, Bool_t in=kTRUE, Double_t safmin=TGeoShape::Big()) const
Compute safety from POINT to segment between planes ipl, ipl+1 within safmin.
 
void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm) const override
Compute normal to closest surface from POINT.
 
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save a primitive as a C++ statement(s) on output stream "out".
 
void SetPoints(Double_t *points) const override
create polycone mesh points
 
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 override
compute distance from outside point to surface of the tube
 
TBuffer3D * MakeBuffer3D() const override
Creates a TBuffer3D describing this shape.
 
Bool_t Contains(const Double_t *point) const override
test if point is inside this shape check total z range
 
const char * GetAxisName(Int_t iaxis) const override
Returns name of axis IAXIS.
 
Double_t Capacity() const override
Computes capacity of the shape in [length^3].
 
void Streamer(TBuffer &) override
Stream an object of class TGeoPcon.
 
Int_t GetNmeshVertices() const override
Return number of vertices of the mesh representation.
 
void Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const override
Check the inside status for each of the points in the array.
 
virtual void DefineSection(Int_t snum, Double_t z, Double_t rmin, Double_t rmax)
Defines z position of a section plane, rmin and rmax at this z.
 
Double_t GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const override
Get range of shape for a given axis.
 
Double_t fC1
Full phi range flag.
 
void InspectShape() const override
print shape parameters
 
void SetDimensions(Double_t *param) override
Set polycone dimensions starting from an array.
 
Double_t fCdphi
Sine of (phi1+phi2)/2.
 
Double_t fS1
Cosine of phi1.
 
TGeoVolume * Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step) override
Divide this polycone shape belonging to volume "voldiv" into ndiv volumes called divname,...
 
Double_t DistToSegZ(const Double_t *point, const Double_t *dir, Int_t &iz) const
compute distance to a pcon Z slice. Segment iz must be valid
 
Double_t fCm
Sine of phi1+dphi.
 
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
compute closest distance from point px,py to each corner
 
~TGeoPcon() override
destructor
 
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 override
compute distance from inside point to surface of the polycone
 
Bool_t HasInsideSurface() const
Returns true when pgon has internal surface It will be only disabled when all Rmin values are 0.
 
virtual Int_t GetNsegments() const
Returns number of segments on each mesh circle segment.
 
void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const override
Returns numbers of vertices, segments and polygons composing the shape mesh.
 
Double_t fS2
Cosine of phi1+dphi.
 
void SetSegsAndPolsNoInside(TBuffer3D &buff) const
Fill TBuffer3D structure for segments and polygons, when no inner surface exists.
 
void Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const override
Compute safe distance from each of the points in the input array.
 
void ComputeBBox() override
compute bounding box of the pcon Check if the sections are in increasing Z order
 
Double_t fC2
Sine of phi1.
 
void Sizeof3D() const override
fill size of this 3-D object
 
void SetSegsAndPols(TBuffer3D &buff) const override
Fill TBuffer3D structure for segments and polygons.
 
const TBuffer3D & GetBuffer3D(Int_t reqSections, Bool_t localFrame) const override
Fills a static 3D buffer and returns a reference.
 
void DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const override
Compute distance from array of input points having directions specified by dirs. Store output in dist...
 
void GetBoundingCylinder(Double_t *param) const override
Fill vector param[4] with the bounding cylinder parameters.
 
Double_t * GetRmin() const
 
Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const override
computes the closest distance from given point to this shape, according to option.
 
void ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize) override
Compute the normal for an array o points so that norm.dot.dir is positive Input: Arrays of point coor...
 
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.
 
const char * GetName() const override
Get the shape name.
 
static Double_t Tolerance()
 
A tube segment is a tube having a range in phi.
 
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 SafetyS(const Double_t *point, Bool_t in, Double_t rmin, Double_t rmax, Double_t dz, Double_t phi1, Double_t phi2, Int_t skipz=0)
Static method to compute the closest distance from given point to this shape.
 
static void 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.
 
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 SafetyS(const Double_t *point, Bool_t in, Double_t rmin, Double_t rmax, Double_t dz, Int_t skipz=0)
computes the closest distance from given point to this shape, according to option.
 
static void 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.
 
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.
 
Int_t IndexOf(const TObject *obj) const override
 
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
 
virtual const char * ClassName() const
Returns name of class to which the object belongs.
 
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
 
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.
 
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
 
const char * Data() const
 
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.
 
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.
 
Long64_t BinarySearch(Long64_t n, const T *array, T value)
Binary search in an array of n values to locate value.
 
constexpr Double_t RadToDeg()
Conversion from radian to degree: .
 
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.