60 Fatal(
"ComputeBBox",
"Assembly shape %s without volume",
GetName());
78 for (
Int_t i = 0; i < nd; i++) {
84 box->SetBoxPoints(vert);
85 for (
Int_t ipt = 0; ipt < 8; ipt++) {
105 fDZ = 0.5 * (zmax - zmin);
106 fOrigin[2] = 0.5 * (zmin + zmax);
139 box->SetBoxPoints(vert);
140 for (
Int_t ipt = 0; ipt < 8; ipt++) {
159 fDZ = 0.5 * (zmax - zmin);
160 fOrigin[2] = 0.5 * (zmin + zmax);
181 Double_t local[3], ldir[3], lnorm[3];
200 Int_t *check_list =
nullptr;
212 for (
id = 0;
id < ncheck;
id++) {
227 for (
id = 0;
id < nd;
id++) {
254 Info(
"DistFromInside",
"Cannot compute distance from inside the assembly (but from a component)");
275 if (iact < 3 && safe) {
282 if ((iact == 1) && (step <= *safe))
307 if (idebug > 4 && snext > stepmax)
316 for (i = 0; i < 3; i++)
317 pt[i] += snext * dir[i];
334 if (nd < 5 || !voxels) {
335 for (i = 0; i < nd; i++) {
346 if (dist < stepmax) {
349 printf(
"%s[%d] %s -> from local=(%19.16f, %19.16f, %19.16f, %19.16f, %19.16f, %19.16f)\n",
352 printf(
"%s[%d] -> (l)to: %s shape %s snext=%g\n", sindent.
Data(),
indent, node->
GetName(),
381 Int_t *vlist =
nullptr;
387 for (i = 0; i < ncheck; i++) {
396 if (dist < stepmax) {
399 printf(
"%s[%d] %s -> from local=(%19.16f, %19.16f, %19.16f, %19.16f, %19.16f, %19.16f)\n",
402 printf(
"%s[%d] -> to: %s shape %s snext=%g\n", sindent.
Data(),
indent, node->
GetName(),
437 Error(
"Divide",
"Assemblies cannot be divided. Division volume %s not created", divname);
447 Error(
"GetMakeRuntimeShape",
"Assemblies cannot be parametrized.");
456 printf(
"*** Shape %s: TGeoShapeAssembly ***\n",
GetName());
458 printf(
" Bounding box:\n");
469 Error(
"SetSegsAndPols",
"Drawing functions should not be called for assemblies, but rather for their content");
486 memcpy(loc, point, 3 *
sizeof(
Double_t));
507 for (
Int_t id = 0;
id < nd;
id++) {
508 if (boxes &&
id > 0) {
521 dxyz += dxyz0 * dxyz0;
523 dxyz += dxyz1 * dxyz1;
525 dxyz += dxyz2 * dxyz2;
526 if (dxyz >= safety * safety)
549 Error(
"SetPoints",
"Drawing functions should not be called for assemblies, but rather for their content");
557 Error(
"SetPoints",
"Drawing functions should not be called for assemblies, but rather for their content");
577 for (
Int_t i = 0; i < vecsize; i++)
588 for (
Int_t i = 0; i < vecsize; i++)
598 for (
Int_t i = 0; i < vecsize; i++)
608 for (
Int_t i = 0; i < vecsize; i++)
619 for (
Int_t i = 0; i < vecsize; i++)
static void indent(ostringstream &buf, int indent_level)
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
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.
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
void InspectShape() const override
Bool_t Contains(const Double_t *point) const override
TGeoNavigator * GetCurrentNavigator() const
Returns current navigator for the calling thread.
static Int_t GetVerboseLevel()
Set verbosity level (static function).
Geometrical transformation package.
virtual void MasterToLocal(const Double_t *master, Double_t *local) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix
Class providing navigation API for TGeo geometries.
TGeoNodeCache * GetCache() const
TGeoStateInfo * GetInfo()
Get next state info pointer.
void ReleaseInfo()
Release last used state info pointer.
A node represent a volume positioned inside another.They store links to both volumes and to the TGeoM...
TGeoVolume * GetVolume() const
virtual TGeoMatrix * GetMatrix() const =0
virtual void LocalToMasterVect(const Double_t *local, Double_t *master) const
Convert a vector from local reference system to mother reference.
virtual void LocalToMaster(const Double_t *local, Double_t *master) const
Convert the point coordinates from local reference system to mother reference.
virtual void MasterToLocal(const Double_t *master, Double_t *local) const
Convert the point coordinates from mother reference to local reference system.
virtual void MasterToLocalVect(const Double_t *master, Double_t *local) const
Convert a vector from mother reference to local reference system.
Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const
computes the closest distance from given point to this shape
The shape encapsulating an assembly (union) of volumes.
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 hyperboloid.
~TGeoShapeAssembly() override
destructor
void SetPoints(Double_t *points) const override
No mesh for assemblies.
void InspectShape() const override
print shape parameters
TGeoShapeAssembly()
Default constructor.
TGeoShape * GetMakeRuntimeShape(TGeoShape *mother, TGeoMatrix *mat) const override
in case shape has some negative parameters, these has to be computed in order to fit the mother
void ComputeBBox() override
Compute bounding box of the assembly.
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...
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
compute closest distance from point px,py to each vertex. Should not be called.
TGeoVolumeAssembly * fVolume
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.
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 ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm) override
Compute normal to closest surface from POINT. Should not be called.
void RecomputeBoxLast()
Recompute bounding box of the assembly after adding a node.
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 hyperboloid.
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save a primitive as a C++ statement(s) on output stream "out".
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.
Bool_t Contains(const Double_t *point) const override
Test if point is inside the assembly.
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...
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...
TGeoVolume * Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step) override
Cannot divide assemblies.
void SetSegsAndPols(TBuffer3D &buff) const override
Fill TBuffer3D structure for segments and polygons.
void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const override
Returns numbers of vertices, segments and polygons composing the shape mesh.
Base abstract class for all shapes.
virtual void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm)=0
static Bool_t IsSameWithinTolerance(Double_t a, Double_t b)
Check if two numbers differ with less than a tolerance.
virtual Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const =0
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 =0
const char * GetName() const override
Get the shape name.
virtual void ComputeBBox()=0
virtual Bool_t Contains(const Double_t *point) const =0
Int_t GetNextNodeIndex() const override
void SetNextNodeIndex(Int_t index)
Int_t GetCurrentNodeIndex() const override
void SetCurrentNodeIndex(Int_t index)
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Int_t GetNdaughters() const
TGeoNode * GetNode(const char *name) const
get the pointer to a daughter node
TGeoVoxelFinder * GetVoxels() const
Getter for optimization structure.
TGeoShape * GetShape() const
virtual Int_t GetCurrentNodeIndex() const
virtual Bool_t IsAssembly() const
Returns true if the volume is an assembly or a scaled assembly.
Finder class handling voxels.
Double_t * GetBoxes() const
virtual Int_t * GetCheckList(const Double_t *point, Int_t &nelem, TGeoStateInfo &td)
get the list of daughter indices for which point is inside their bbox
virtual Int_t * GetNextVoxel(const Double_t *point, const Double_t *dir, Int_t &ncheck, TGeoStateInfo &td)
get the list of new candidates for the next voxel crossed by current ray printf("### GetNextVoxel\n")...
Bool_t IsSafeVoxel(const Double_t *point, Int_t inode, Double_t minsafe) const
Computes squared distance from POINT to the voxel(s) containing node INODE.
virtual void SortCrossedVoxels(const Double_t *point, const Double_t *dir, TGeoStateInfo &td)
get the list in the next voxel crossed by a ray
const char * GetName() const override
Returns name of object.
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.
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.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
const char * Data() const
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
Statefull info for the current geometry level.