12#ifndef ROOT_TGeoParallelWorld 
   13#define ROOT_TGeoParallelWorld 
  101   bool CheckBVH(
void *, 
size_t) 
const;
 
  175   std::pair<double, double>
 
  178   std::pair<double, double>
 
 
#define ClassDefOverride(name, id)
 
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 mode
 
The manager class for any TGeo geometry.
 
Base class for a flat parallel geometry.
 
TGeoManager * fGeoManager
 
Double_t SafetyBVH(Double_t point[3], Double_t safmax=1.E30)
Compute safety for the parallel world (using pure BVH traversal, mainly for debugging/fallback since ...
 
std::pair< double, double > GetBVHSafetyCandidates(double point[3], std::vector< int > &candidates, double margin=0.) const
Method to find potentially relevant candidate bounding boxes for safety calculation given a point.
 
void SetUseOverlaps(Bool_t flag)
 
Double_t Safety(Double_t point[3], Double_t safmax=1.E30)
 
TObjArray * fPhysical
Last PN touched.
 
TGeoVolume * GetVolume() const
 
TGeoPhysicalNode * FindNodeOrig(Double_t point[3])
Finds physical node containing the point (original version based on TGeoVoxelFinder)
 
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)
 
void ResetOverlaps() const
Reset overlapflag for all volumes in geometry.
 
std::vector< unsigned int > fSafetyCandidateStore
A regular 3D cache layer for fast point-based safety lookups.
 
TGeoManager * GetGeometry() const
 
TGeoPhysicalNode * FindNodeBVH(Double_t point[3])
Finds physical node containing the point.
 
Bool_t IsUsingOverlaps() const
 
void * fBoundingBoxes
stores bounding boxes serving a quick safety candidates (to be used with the VoxelGrid and SafetyVoxe...
 
TGeoPhysicalNode * FindNode(Double_t point[3])
 
TGeoPhysicalNode * FindNextBoundaryLoop(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 in a trivial loo...
 
TGeoVoxelGrid< SafetyVoxelInfo > * fSafetyVoxelCache
BVH helper structure for safety and navigation.
 
void SetAccelerationMode(AccelerationMode const &mode)
 
bool CheckBVH(void *, size_t) const
Check/validate the BVH acceleration structure.
 
~TGeoParallelWorld() override
Destructor.
 
TGeoVolume * fVolume
Closed flag.
 
Double_t SafetyLoop(Double_t point[3], Double_t safmax=1.E30)
Compute safety for the parallel world (trivial loop version for comparison/debugging)
 
Int_t PrintDetectedOverlaps() const
Print the overlaps which were detected during real tracking.
 
TGeoPhysicalNode * FindNextBoundaryBVH(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 CheckOverlaps(Double_t ovlp=0.001)
Check overlaps within a tolerance value.
 
std::pair< double, double > GetLoopSafetyCandidates(double point[3], std::vector< int > &candidates, double margin=0.) const
Method to find potentially relevant candidate bounding boxes for safety calculation given a point.
 
TGeoPhysicalNode * fLastState
helper volume
 
Double_t SafetyOrig(Double_t point[3], Double_t safmax=1.E30)
Compute safety for the parallel world (original version based on TGeoVoxelFinder)
 
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.
 
TGeoPhysicalNode * FindNodeLoop(Double_t point[3])
Finds physical node containing the point using simple algorithm (for debugging)
 
TGeoParallelWorld & operator=(const TGeoParallelWorld &)=delete
 
AccelerationMode fAccMode
to keep the vector of primitive axis aligned bounding boxes
 
TGeoParallelWorld(const TGeoParallelWorld &)=delete
switch between different algorithm implementations
 
AccelerationMode const & GetAccelerationMode() const
 
void InitSafetyVoxel(TGeoVoxelGridIndex const &)
Method to initialize the safety voxel at a specific 3D voxel (grid) index.
 
void * fBVH
array of physical nodes
 
void BuildBVH()
Build the BVH acceleration structure.
 
Double_t VoxelSafety(Double_t point[3], Double_t safmax=1.E30)
Compute safety for the parallel world used BVH structure with addiditional on-the-fly 3D grid/voxel c...
 
TGeoPhysicalNode * FindNextBoundaryOrig(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 PrintBVH() const
Prints the BVH.
 
Physical nodes are the actual 'touchable' objects in the geometry, representing a path of positioned ...
 
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
 
The TNamed class is the base class for all named ROOT classes.
 
unsigned int num_candidates
 
bool isInitialized() const