74 Fatal(
"AddNode",
"Cannot add nodes to a closed parallel geometry");
76 Error(
"AddNode",
"Path %s not valid.\nCannot add to parallel world!", path);
106 if (!strcmp(vol->
GetName(), volname))
122 Info(
"PrintDetectedOverlaps",
"List of detected volumes overlapping with the PW");
149 Fatal(
"CloseGeometry",
"Main geometry must be closed first");
151 Error(
"CloseGeometry",
"List of paths is empty");
156 Info(
"CloseGeometry",
"Parallel world %s contains %d prioritised objects",
GetName(),
fPaths->GetEntriesFast());
163 Info(
"CloseGeometry",
"Number of declared overlaps: %d", novlp);
165 Info(
"CloseGeometry",
"Parallel world will use declared overlaps");
167 Info(
"CloseGeometry",
"Parallel world will detect overlaps with other volumes");
196 fVolume->GetShape()->ComputeBBox();
206 Fatal(
"FindNode",
"Parallel geometry must be closed first");
223 for (
id = 0;
id < ncheck;
id++) {
224 node =
fVolume->GetNode(check_list[
id]);
243 Fatal(
"FindNextBoundary",
"Parallel geometry must be closed first");
259 Int_t idaughter = -1;
267 for (
i = 0;
i < nd;
i++) {
280 if (idaughter >= 0) {
289 Int_t sumchecked = 0;
290 Int_t *vlist =
nullptr;
296 while ((sumchecked < nd) && (vlist = voxels->
GetNextVoxel(point, dir, ncheck, info))) {
297 for (
i = 0;
i < ncheck;
i++) {
303 current =
fVolume->GetNode(vlist[
i]);
307 if (snext < step - 1.E-8) {
309 idaughter = vlist[
i];
312 if (idaughter >= 0) {
348 for (
Int_t id = 0;
id < nd;
id++) {
361 dxyz += dxyz0 * dxyz0;
363 dxyz += dxyz1 * dxyz1;
365 dxyz += dxyz2 * dxyz2;
366 if (dxyz >= safe * safe)
372 current =
fVolume->GetNode(
id);
376 if (safnext < tolerance)
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
Matrix class used for computing global transformations Should NOT be used for node definition.
The manager class for any TGeo geometry.
Class providing navigation API for TGeo geometries.
TGeoVolume * GetCurrentVolume() const
TGeoNodeCache * GetCache() const
Special pool of reusable nodes.
TGeoStateInfo * GetMakePWInfo(Int_t nd)
Get the PW info, if none create one.
A node represent a volume positioned inside another.They store links to both volumes and to the TGeoM...
TGeoVolume * GetVolume() const
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
Base class for a flat parallel geometry.
TGeoManager * fGeoManager
void Draw(Option_t *option) override
Draw the parallel world.
Double_t Safety(Double_t point[3], Double_t safmax=1.E30)
Compute safety for the parallel world.
TObjArray * fPhysical
Last PN touched.
Bool_t CloseGeometry()
The main geometry must be closed.
void AddNode(const char *path)
Add a node normally to this world. Overlapping nodes not allowed.
TGeoPhysicalNode * FindNextBoundary(Double_t point[3], Double_t dir[3], Double_t &step, Double_t stepmax=1.E30)
Same functionality as TGeoNavigator::FindNextDaughterBoundary for the parallel world.
void ResetOverlaps() const
Reset overlapflag for all volumes in geometry.
TGeoPhysicalNode * FindNode(Double_t point[3])
Finds physical node containing the point.
~TGeoParallelWorld() override
Destructor.
TGeoVolume * fVolume
Closed flag.
Int_t PrintDetectedOverlaps() const
Print the overlaps which were detected during real tracking.
void CheckOverlaps(Double_t ovlp=0.001)
Check overlaps within a tolerance value.
TGeoPhysicalNode * fLastState
helper volume
void AddOverlap(TGeoVolume *vol, Bool_t activate=kTRUE)
To use this optimization, the user should declare the full list of volumes which may overlap with any...
void RefreshPhysicalNodes()
Refresh the node pointers and re-voxelize.
Physical nodes are the actual 'touchable' objects in the geometry, representing a path of positioned ...
Bool_t IsMatchingState(TGeoNavigator *nav) const
Checks if a given navigator state matches this physical node.
TGeoHMatrix * GetMatrix(Int_t level=-1) const
Return global matrix for node at LEVEL.
TGeoVolume * GetVolume(Int_t level=-1) const
Return volume associated with node at LEVEL in the branch.
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
static Double_t Tolerance()
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Bool_t Contains(const Double_t *point) const
TGeoShape * GetShape() const
void SetOverlappingCandidate(Bool_t flag)
Bool_t IsOverlappingCandidate() const
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.
Collectable string class.
const char * GetName() const override
Returns name of object.
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.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
Statefull info for the current geometry level.