65 fNextDaughterIndex(0),
68 fOverlapClusters(nullptr),
70 fCurrentOverlapping(
kFALSE),
82 fCurrentVolume(nullptr),
83 fCurrentNode(nullptr),
88 fBackupState(nullptr),
89 fCurrentMatrix(nullptr),
90 fGlobalMatrix(nullptr),
96 for (
Int_t i = 0; i < 3; i++) {
117 fNextDaughterIndex(-2),
120 fOverlapClusters(nullptr),
122 fCurrentOverlapping(
kFALSE),
130 fIsSameLocation(
kTRUE),
134 fCurrentVolume(nullptr),
135 fCurrentNode(nullptr),
139 fForcedNode(nullptr),
140 fBackupState(nullptr),
141 fCurrentMatrix(nullptr),
142 fGlobalMatrix(nullptr),
150 for (
Int_t i = 0; i < 3; i++) {
191 if (first && verbose > 0)
192 Info(
"BuildCache",
"--- Maximum geometry depth set to 100");
194 if (first && verbose > 0)
195 Info(
"BuildCache",
"--- Maximum geometry depth is %i", nlevel);
227 ind2 = spath.
Index(
"/", ind1 + 1);
228 if (ind2 < 0 || ind2 ==
length - 1) {
233 name = spath(ind1 + 1, ind2 - ind1 - 1);
244 Error(
"cd",
"Path %s not valid", path);
273 ind2 = spath.
Index(
"/", ind1 + 1);
274 if (ind2 < 0 || ind2 ==
length - 1) {
279 name = spath(ind1 + 1, ind2 - ind1 - 1);
422 if (
fCurrentNode && fNextDaughterIndex < fCurrentNode->GetNdaughters()) {
425 while (nextindex >= 0) {
465 Fatal(
"CrossDivisionCell",
"Volume has no pattern finder");
471 Double_t point[3], newpoint[3], dir[3];
533 for (
Int_t i = 0; i < 10; ++i)
534 crtstate[i] =
nullptr;
555 while (nextindex >= 0) {
561 printf(
"CrossBoundaryAndLocate: entered %s\n",
GetPath());
567 if (current == skipnode) {
571 for (
Int_t i = 1; i < level; i++) {
585 printf(
"CrossBoundaryAndLocate: Exited geometry\n");
595 printf(
"CrossBoundaryAndLocate: Exited geometry\n");
598 printf(
"CrossBoundaryAndLocate: entered %s\n",
GetPath());
605 printf(
"CrossBoundaryAndLocate: entered %s\n",
GetPath());
642 if (stepmax < 1E29) {
645 computeGlobal =
kTRUE;
675 printf(
"TGeoManager::FindNextBoundary: point=(%19.16f, %19.16f, %19.16f)\n",
fPoint[0],
fPoint[1],
fPoint[2]);
678 printf(
" pstep=%9.6g path=%s\n", stepmax,
GetPath());
693 printf(
"=== To path: %s\n", path);
694 printf(
"=== local to %s: (%19.16f, %19.16f, %19.16f, %19.16f, %19.16f, %19.16f)\n", tvol->
GetName(), point[0],
695 point[1], point[2], dir[0], dir[1], dir[2]);
699 printf(
"=== volume %s contains point\n", tvol->
GetName());
704 printf(
"=== volume %s does not contain point\n", tvol->
GetName());
705 printf(
"=== distance to path: %g\n",
fStep);
709 newpt[0] = point[0] +
fStep * dir[0];
710 newpt[1] = point[1] +
fStep * dir[1];
711 newpt[2] = point[2] +
fStep * dir[2];
712 printf(
"=== Propagated point: (%19.16f, %19.16f, %19.16f)", newpt[0], newpt[1], newpt[2]);
719 printf(
"=== local to %s: (%19.16f, %19.16f, %19.16f, %19.16f, %19.16f, %19.16f)\n", tvol->
GetName(),
720 point[0], point[1], point[2], dir[0], dir[1], dir[2]);
722 printf(
"=== volume %s contains point\n", tvol->
GetName());
724 printf(
"=== volume %s does not contain point\n", tvol->
GetName());
744 while (indnext >= 0) {
758 printf(
" -> from local=(%19.16f, %19.16f, %19.16f)\n", point[0], point[1], point[2]);
759 printf(
" ldir =(%19.16f, %19.16f, %19.16f)\n", dir[0], dir[1], dir[2]);
777 Int_t idaughter = -1;
814 for (
Int_t i = 0; i < novlps; i++) {
815 current = mother->
GetNode(ovlps[i]);
857 while (indnext >= 0) {
906 Fatal(
"FindNextBoundary",
"Cannot find mother node");
920 nmany -= imother - up;
926 if (ovlp || nextovlp) {
929 Fatal(
"FindNextBoundary",
"Cannot find mother matrix");
954 currentnode = mothernode;
974 while (nextindex >= 0) {
1015 if ((
index - 1) >= ifirst)
1019 if ((
index + 1) <= ilast)
1025 current = vol->
GetNode(ifirst);
1039 nodefound = current;
1043 if (ilast == ifirst)
1046 current = vol->
GetNode(ilast);
1060 nodefound = current;
1070 printf(
" Checking distance to %d daughters...\n", nd);
1071 if (nd < 5 || !voxels) {
1072 for (i = 0; i < nd; i++) {
1087 printf(
" -> from local=(%19.16f, %19.16f, %19.16f)\n", lpoint[0], lpoint[1], lpoint[2]);
1088 printf(
" ldir =(%19.16f, %19.16f, %19.16f)\n", ldir[0], ldir[1], ldir[2]);
1089 printf(
" -> to: %s shape %s snext=%g\n", current->
GetName(),
1103 while (indnext >= 0) {
1108 nodefound = current;
1119 Int_t sumchecked = 0;
1120 Int_t *vlist =
nullptr;
1123 while ((sumchecked < nd) && (vlist = voxels->
GetNextVoxel(point, dir, ncheck, info))) {
1124 for (i = 0; i < ncheck; i++) {
1125 current = vol->
GetNode(vlist[i]);
1139 printf(
" -> from local=(%19.16f, %19.16f, %19.16f)\n", lpoint[0], lpoint[1], lpoint[2]);
1140 printf(
" ldir =(%19.16f, %19.16f, %19.16f)\n", ldir[0], ldir[1], ldir[2]);
1141 printf(
" -> to: %s shape %s snext=%g\n", current->
GetName(),
1154 idaughter = vlist[i];
1155 while (indnext >= 0) {
1160 nodefound = current;
1220 printf(
"TGeoManager::FindNextBAndStep: point=(%19.16f, %19.16f, %19.16f)\n",
fPoint[0],
fPoint[1],
fPoint[2]);
1223 printf(
" pstep=%9.6g path=%s\n", stepmax,
GetPath());
1236 fStep = snext + extra;
1241 while (nextindex >= 0) {
1271 Int_t icrossed = -2;
1277 printf(
" -> from local=(%19.16f, %19.16f, %19.16f)\n", point[0], point[1], point[2]);
1278 printf(
" ldir =(%19.16f, %19.16f, %19.16f)\n", dir[0], dir[1], dir[2]);
1298 if (!
fLevel && !is_assembly) {
1319 Int_t idaughter = -1;
1323 icrossed = idaughter;
1359 for (
Int_t i = 0; i < novlps; i++) {
1360 current = mother->
GetNode(ovlps[i]);
1373 icrossed = ovlps[i];
1389 icrossed = idaughter;
1407 icrossed = ovlps[i];
1440 nmany -= imother - up;
1446 if (ovlp || nextovlp) {
1470 currentnode = mothernode;
1494 while (nextindex >= 0) {
1506 if (icrossed == -2) {
1512 if (icrossed == -1) {
1516 if (!
fLevel && !is_assembly) {
1531 while (nextindex >= 0) {
1554 if (found != last) {
1580 if (found != last) {
1670 const auto newsafety = pw->
Safety(cpoint );
1765 if (ilast == ifirst)
1785 for (
id = 0;
id < nd;
id++) {
1808 for (
id = 0;
id < nd;
id++) {
1821 dxyz += dxyz0 * dxyz0;
1823 dxyz += dxyz1 * dxyz1;
1825 dxyz += dxyz2 * dxyz2;
1864 if (safe < fSafety && safe >= 0)
1866 if (!novlp || !contains)
1869 for (io = 0; io < novlp; io++) {
1870 nodeovlp = vol->
GetNode(ovlp[io]);
1880 if (safe < fSafety && safe >= 0)
1902 if (crtovlp || nextovlp) {
1933 while (crtindex >= 0) {
1957 inside_current =
kTRUE;
1959 if (!inside_current) {
1961 inside_current = vol->
Contains(point);
1967 if (!inside_current) {
1982 if (!inside_current && downwards) {
1985 inside_current =
kTRUE;
1987 inside_current = vol->
Contains(point);
1988 if (!inside_current) {
1997 printf(
"Search node local=(%19.16f, %19.16f, %19.16f) -> %s\n", point[0], point[1], point[2],
2011 while (crtindex >= 0 && downwards) {
2041 if (node && node != skipnode) {
2056 Int_t *check_list =
nullptr;
2079 for (
id = 0;
id < ncheck;
id++) {
2080 node = vol->
GetNode(check_list[
id]);
2081 if (node == skipnode)
2127 for (
id = 0;
id < nd;
id++) {
2129 if (node == skipnode)
2172 Int_t found_virtual = 0;
2176 for (i = 0; i < nc; i++) {
2190 if (found_virtual > deepest_virtual) {
2193 if (found_virtual == deepest_virtual) {
2197 if ((
fLevel == deepest) && (clnode == priority))
2206 if (i == (nc - 1)) {
2222 deepest_virtual = found_virtual;
2231 deepest_virtual = found_virtual;
2258 result[ntotal++] = check_list[start];
2261 Int_t jst = 0, i, j;
2262 while ((jst < novlps) && (ovlps[jst] <= check_list[start]))
2266 for (i = start; i < ncheck; i++) {
2267 for (j = jst; j < novlps; j++) {
2268 if (check_list[i] == ovlps[j]) {
2275 result[ntotal++] = check_list[i];
2301 epsil = (cross) ? 1E-6 : -1E-6;
2307 for (
Int_t i = 0; i < 3; i++)
2336 Int_t new_media = 0;
2338 Int_t virtual_level = 1;
2341 while ((mother =
GetMother(virtual_level))) {
2344 new_media = (mother->
GetMedium() == medium) ? 0 : virtual_level;
2348 new_media = (mother->
GetMedium() == medium) ? 0 : virtual_level;
2351 return (new_media == 0) ? virtual_level : (new_media - 1);
2385 if (ovlp || nextovlp) {
2413 while (overlapping && level) {
2427 Info(
"InspectState",
"Current path is: %s",
GetPath());
2430 Bool_t is_offset, is_overlapping;
2431 for (level = 0; level <
fLevel + 1; level++) {
2437 Info(
"InspectState",
"level %i: %s div=%i many=%i", level, node->
GetName(), is_offset, is_overlapping);
2453 Double_t dsq = dx * dx + dy * dy + dz * dz;
2518 while (crtindex >= 0) {
2546 Int_t *check_list =
nullptr;
2557 for (
Int_t id = 0;
id < ncheck;
id++) {
2625 if (safe < proposed)
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 winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
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 result
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 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 winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h length
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
R__EXTERN TGeoIdentity * gGeoIdentity
const char * kGeoOutsidePath
static Double_t gTolerance
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
Class storing the state of the cache at a given moment.
void SetState(Int_t level, Int_t startlevel, Int_t nmany, Bool_t ovlp, Double_t *point=nullptr)
Fill current modeller state.
Matrix class used for computing global transformations Should NOT be used for node definition.
void CopyFrom(const TGeoMatrix *other)
Fast copy method.
const Double_t * GetTranslation() const override
void Multiply(const TGeoMatrix *right)
multiply to the right with an other transformation if right is identity matrix, just return
The manager class for any TGeo geometry.
TGeoNode * GetCurrentNode() const
TGeoParallelWorld * GetParallelWorld() const
Int_t GetMaxLevel() const
Bool_t IsParallelWorldNav() const
Bool_t IsActivityEnabled() const
TGeoNode * GetTopNode() const
static Int_t GetVerboseLevel()
Set verbosity level (static function).
void MasterToLocal(const Double_t *master, Double_t *local) const
TGeoVolume * GetTopVolume() const
static Int_t ThreadId()
Translates the current thread id to an ordinal number.
virtual void LocalToMasterVect(const Double_t *local, Double_t *master) const
convert a vector by multiplying its column vector (x, y, z, 1) to matrix inverse
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
virtual void MasterToLocalVect(const Double_t *master, Double_t *local) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix
virtual void RegisterYourself()
Register the matrix in the current manager, which will become the owner.
virtual void LocalToMaster(const Double_t *local, Double_t *master) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix inverse
Media are used to store properties related to tracking and which are useful only when using geometry ...
TGeoNavigator * AddNavigator()
Add a new navigator to the array.
TGeoManager * fGeoManager
TGeoNavigator * SetCurrentNavigator(Int_t inav)
Class providing navigation API for TGeo geometries.
void CdUp()
Go one level up in geometry.
void DoBackupState()
Backup the current state without affecting the cache stack.
TGeoNode * GetMother(Int_t up=1) const
Double_t fLastPWSaftyPnt[3]
last point for which safety was computed
void DoRestoreState()
Restore a backed-up state without affecting the cache stack.
Double_t fPoint[3]
unit vector to current checked shape
Bool_t fSearchOverlaps
internal array for overlaps
Bool_t fIsExiting
flag if current step just got into a new node
TString fPath
current local matrix of the selected division cell
TGeoHMatrix * fDivMatrix
current pointer to cached global matrix
TGeoNode * CrossBoundaryAndLocate(Bool_t downwards, TGeoNode *skipnode)
Cross next boundary and locate within current node The current point must be on the boundary of fCurr...
Double_t fLastPWSafety
last point for which parallel world safety was "evaluated"
TGeoHMatrix * GetHMatrix()
Return stored current matrix (global matrix of the next touched node).
TGeoNodeCache * fCache
current geometry
Bool_t fStartSafe
flags the type of the current node
void CdNext()
Do a cd to the node found next by FindNextBoundary.
Double_t Safety(Bool_t inside=kFALSE)
Compute safe distance from the current point.
Bool_t GotoSafeLevel()
Go upwards the tree until a non-overlapping node.
Double_t fNormal[3]
last computed safety radius
Bool_t cd(const char *path="")
Browse the tree of nodes starting from top node according to pathname.
Double_t fLastPoint[3]
current direction
Bool_t IsSameLocation() const
Double_t fCldir[3]
cosine of incident angle on current checked surface
Bool_t fIsStepEntering
flag that current track is about to leave current node
Int_t GetVirtualLevel()
Find level of virtuality of current overlapping node (number of levels up having the same tracking me...
Int_t fOverlapSize
next daughter index after FindNextBoundary
TGeoNode * InitTrack(const Double_t *point, const Double_t *dir)
Initialize current point and current direction vector (normalized) in MARS.
void InspectState() const
Inspects path and all flags for the current state.
Int_t PushPoint(Int_t startlevel=0)
TGeoNode * Step(Bool_t is_geom=kTRUE, Bool_t cross=kTRUE)
Make a rectiliniar step of length fStep from current point (fPoint) on current direction (fDirection)...
TGeoNode * FindInCluster(Int_t *cluster, Int_t nc)
Find a node inside a cluster of overlapping nodes.
void SafetyOverlaps()
Compute safe distance from the current point within an overlapping node.
TGeoNode * CrossDivisionCell()
Cross a division cell.
void ResetState()
Reset current state flags.
static Bool_t IsPWSafetyCaching()
TGeoNode * FindNextDaughterBoundary(Double_t *point, Double_t *dir, Int_t &idaughter, Bool_t compmatrix=kFALSE)
Computes as fStep the distance to next daughter of the current volume.
Bool_t fIsSameLocation
flag that current point is on some boundary
void GetBranchNumbers(Int_t *copyNumbers, Int_t *volumeNumbers) const
Fill node copy numbers of current branch into an array.
Bool_t CheckPath(const char *path) const
Check if a geometry path is valid without changing the state of the navigator.
TGeoHMatrix * GetMotherMatrix(Int_t up=1) const
TGeoVolume * fCurrentVolume
cache of states
TGeoNode * fLastNode
top physical node
Int_t fThreadId
last safety returned from parallel world (negative if invalid)
Double_t GetPWSafetyEstimateFromCache(Double_t cpoint[3]) const
Double_t fDirection[3]
current point
void PopDummy(Int_t ipop=9999)
Int_t GetTouchedCluster(Int_t start, Double_t *point, Int_t *check_list, Int_t ncheck, Int_t *result)
Make the cluster of overlapping nodes in a voxel, containing point in reference of the mother.
TGeoNode * FindNextBoundary(Double_t stepmax=TGeoShape::Big(), const char *path="", Bool_t frombdr=kFALSE)
Find distance to next boundary and store it in fStep.
TGeoNode * FindNode(Bool_t safe_start=kTRUE)
Returns deepest node containing current point.
Int_t fOverlapMark
current size of fOverlapClusters
TGeoNode * FindNextBoundaryAndStep(Double_t stepmax=TGeoShape::Big(), Bool_t compsafe=kFALSE)
Compute distance to next boundary within STEPMAX.
void CdTop()
Make top level node the current node.
Int_t fNmany
current geometry level;
TGeoManager * fGeometry
flag that last geometric step was null
TGeoHMatrix * fGlobalMatrix
current stored global matrix
void MasterToTop(const Double_t *master, Double_t *top) const
Convert coordinates from master volume frame to top.
Int_t GetCurrentNodeId() const
Double_t * FindNormalFast()
Computes fast normal to next crossed boundary, assuming that the current point is close enough to the...
Int_t PushPath(Int_t startlevel=0)
Bool_t fIsStepExiting
flag that next geometric step will enter new volume
Bool_t fIsOnBoundary
flag that current point is outside geometry
static Bool_t fgUsePWSafetyCaching
path to current node
void GetBranchOnlys(Int_t *isonly) const
Fill node copy numbers of current branch into an array.
void TopToMaster(const Double_t *top, Double_t *master) const
Convert coordinates from top volume frame to master.
void SetCurrentPoint(const Double_t *point)
TGeoHMatrix * fCurrentMatrix
backup state
Int_t * fOverlapClusters
current recursive position in fOverlapClusters
Bool_t IsSafeStep(Double_t proposed, Double_t &newsafety) const
In case a previous safety value was computed, check if the safety region is still safe for the curren...
TGeoNode * SearchNode(Bool_t downwards=kFALSE, const TGeoNode *skipnode=nullptr)
Returns the deepest node containing fPoint, which must be set a priori.
Double_t fLastSafety
safety radius from current point
~TGeoNavigator() override
Destructor.
TGeoNavigator()
global mode is caching enabled for parallel world safety calls
void SetCurrentDirection(const Double_t *dir)
void BuildCache(Bool_t dummy=kFALSE, Bool_t nodeid=kFALSE)
Builds the cache for physical nodes and global matrices.
Int_t fNextDaughterIndex
number of overlapping nodes on current branch
Bool_t fIsNullStep
flag that a new point is in the same node as previous
void CdNode(Int_t nodeid)
Change current path to point to the node having this id.
TGeoNode * fNextNode
last searched node
Double_t fCldirChecked[3]
unit vector to current closest shape
Int_t fLevel
thread id for this navigator
Double_t GetPWSafety(Double_t cpoint[3], Double_t saf_max)
Wrapper for getting the safety from the parallel world.
void ResetAll()
Reset the navigator.
TGeoCacheState * fBackupState
current point is supposed to be inside this node
Bool_t IsSamePoint(Double_t x, Double_t y, Double_t z) const
Check if a new point with given coordinates is the same as the last located one.
Bool_t fCurrentOverlapping
flag set when an overlapping cluster is searched
Bool_t fIsOutside
flag that next geometric step will exit current volume
void CdDown(Int_t index)
Make a daughter of current node current.
Bool_t fIsEntering
flag a safe start for point classification
TGeoNode * fForcedNode
next node that will be crossed
const char * GetPath() const
Get path to the current node in the form /node0/node1/...
Int_t GetSafeLevel() const
Go upwards the tree until a non-overlapping node.
TGeoNode * fCurrentNode
current volume
Double_t fSafety
step to be done from current point and direction
Double_t * FindNormal(Bool_t forward=kTRUE)
Computes normal vector to the next surface that will be or was already crossed when propagating on a ...
void GetBranchNames(Int_t *names) const
Fill volume names of current branch into an array.
Special pool of reusable nodes.
TGeoNode * GetNode() const
void CdNode(Int_t nodeid)
Change current path to point to the node having this id.
void GetBranchOnlys(Int_t *isonly) const
Fill copy numbers of current branch nodes.
const char * GetPath()
Returns the current geometry path.
void GetBranchNumbers(Int_t *copyNumbers, Int_t *volumeNumbers) const
Fill copy numbers of current branch nodes.
TGeoStateInfo * GetInfo()
Get next state info pointer.
Bool_t HasIdArray() const
Bool_t CdDown(Int_t index)
Make daughter INDEX of current node the active state. Compute global matrix.
Bool_t RestoreState(Int_t &nmany, TGeoCacheState *state, Double_t *point=nullptr)
Pop next state/point from a backed-up state.
void CdUp()
Make mother of current node the active state.
void GetBranchNames(Int_t *names) const
Fill names with current branch volume names (4 char - used by GEANT3 interface).
TGeoHMatrix * GetCurrentMatrix() const
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...
TGeoMedium * GetMedium() const
Bool_t IsOverlapping() const
TGeoVolume * GetVolume() const
Int_t GetNdaughters() const
TGeoNode * GetDaughter(Int_t ind) const
virtual TGeoMatrix * GetMatrix() const =0
Int_t * GetOverlaps(Int_t &novlp) const
virtual void MasterToLocal(const Double_t *master, Double_t *local) const
Convert the point coordinates from mother reference to local reference system.
virtual Int_t GetIndex() const
virtual TGeoPatternFinder * GetFinder() const
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
Double_t Safety(Double_t point[3], Double_t safmax=1.E30)
TGeoPhysicalNode * FindNextBoundary(Double_t point[3], Double_t dir[3], Double_t &step, Double_t stepmax=1.E30)
TGeoPhysicalNode * FindNode(Double_t point[3])
Base finder class for patterns.
virtual TGeoNode * CdNext()
Make next node (if any) current.
virtual TGeoNode * FindNode(Double_t *, const Double_t *=nullptr)
virtual Bool_t IsOnBoundary(const Double_t *) const
Int_t GetNext() const
Get index of next division.
Physical nodes are the actual 'touchable' objects in the geometry, representing a path of positioned ...
TGeoNode * GetNode(Int_t level=-1) const
Return node in branch at LEVEL. If not specified, return last leaf.
virtual void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm)=0
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 =0
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
virtual Bool_t Contains(const Double_t *point) const =0
static Double_t Tolerance()
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
virtual Int_t GetNextNodeIndex() const
Bool_t IsActiveDaughters() const
Bool_t Contains(const Double_t *point) const
Int_t GetNdaughters() const
void FindOverlaps() const
loop all nodes marked as overlaps and find overlapping brothers
TGeoNode * GetNode(const char *name) const
get the pointer to a daughter node
Int_t GetIndex(const TGeoNode *node) const
get index number for a given daughter
TGeoPatternFinder * GetFinder() const
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.
void InspectShape() 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")...
virtual void Voxelize(Option_t *option="")
Voxelize attached volume according to option If the volume is an assembly, make sure the bbox is comp...
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.
Bool_t NeedRebuild() const
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.
Int_t GetEntriesFast() const
TObject * UncheckedAt(Int_t i) const
void Add(TObject *obj) override
virtual const char * ClassName() const
Returns name of class to which the object belongs.
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.
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
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.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
Statefull info for the current geometry level.