12#ifndef ROOT_TGeoNavigator 
   13#define ROOT_TGeoNavigator 
#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 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
 
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.
 
Matrix class used for computing global transformations Should NOT be used for node definition.
 
The manager class for any TGeo geometry.
 
Geometrical transformation package.
 
TGeoNavigatorArray(const TGeoNavigatorArray &)=delete
 
TGeoNavigatorArray(TGeoManager *mgr)
 
TGeoNavigator * fCurrentNavigator
 
TGeoNavigator * AddNavigator()
Add a new navigator to the array.
 
TGeoNavigator * GetCurrentNavigator() const
 
TGeoNavigatorArray & operator=(const TGeoNavigatorArray &)=delete
 
TGeoManager * fGeoManager
 
TGeoNavigator * SetCurrentNavigator(Int_t inav)
 
~TGeoNavigatorArray() override
 
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
 
void SetCurrentPoint(Double_t x, Double_t y, Double_t z)
 
void DoRestoreState()
Restore a backed-up state without affecting the cache stack.
 
Double_t fPoint[3]
unit vector to current checked shape
 
Bool_t IsStepExiting() const
 
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...
 
TGeoHMatrix * GetHMatrix()
Return stored current matrix (global matrix of the next touched node).
 
Bool_t IsCheckingOverlaps() const
 
void LocalToMaster(const Double_t *local, Double_t *master) const
 
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.
 
TGeoNode * GetNextNode() const
 
Double_t Safety(Bool_t inside=kFALSE)
Compute safe distance from the current point.
 
const Double_t * GetCldirChecked() const
 
Bool_t GotoSafeLevel()
Go upwards the tree until a non-overlapping node.
 
Double_t fNormal[3]
last computed safety radius
 
Double_t GetLastSafety() const
 
Bool_t PopPoint(Int_t index)
 
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
 
void SetLastPoint(Double_t x, Double_t y, Double_t z)
 
void MasterToLocal(const Double_t *master, Double_t *local) const
 
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.
 
const Double_t * GetLastPoint() const
 
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.
 
TGeoNavigator(const TGeoNavigator &)=delete
 
Bool_t IsNullStep() const
 
TGeoVolume * GetCurrentVolume() const
 
Int_t GetNextDaughterIndex() const
 
void SafetyOverlaps()
Compute safe distance from the current point within an overlapping node.
 
TGeoHMatrix * GetCurrentMatrix() const
 
TGeoNode * CrossDivisionCell()
Cross a division cell.
 
void ResetState()
Reset current state flags.
 
Double_t GetSafeDistance() const
 
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 SetCheckingOverlaps(Bool_t flag=kTRUE)
 
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.
 
void SetOutside(Bool_t flag=kTRUE)
 
void SetStartSafe(Bool_t flag=kTRUE)
 
Bool_t IsEntering() const
 
TGeoHMatrix * GetMotherMatrix(Int_t up=1) const
 
TGeoVolume * fCurrentVolume
cache of states
 
TGeoNode * fLastNode
top physical node
 
void SetCldirChecked(Double_t *dir)
 
Int_t fThreadId
last point for which safety was computed
 
void LocalToMasterBomb(const Double_t *local, Double_t *master) 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 * GetCurrentNode() const
 
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.
 
Int_t GetThreadId() const
 
void CdTop()
Make top level node the current node.
 
void SetStep(Double_t step)
 
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...
 
const Double_t * GetCurrentDirection() const
 
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
 
void GetBranchOnlys(Int_t *isonly) const
Fill node copy numbers of current branch into an array.
 
void SetCurrentDirection(Double_t nx, Double_t ny, Double_t nz)
 
Int_t GetStackLevel() const
 
const Double_t * GetNormal() const
 
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
 
const Double_t * GetCldir() const
 
TGeoNode * fTopNode
current node
 
void LocalToMasterVect(const Double_t *local, Double_t *master) const
 
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()
path to current node
 
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 PopPath(Int_t index)
 
Bool_t fIsNullStep
flag that a new point is in the same node as previous
 
void SetLastSafetyForPoint(Double_t safe, const Double_t *point)
 
void CdNode(Int_t nodeid)
Change current path to point to the node having this id.
 
Bool_t IsCurrentOverlapping() const
 
TGeoNavigator & operator=(const TGeoNavigator &)=delete
 
TGeoNodeCache * GetCache() const
 
TGeoNode * fNextNode
last searched node
 
Double_t fCldirChecked[3]
unit vector to current closest shape
 
void SetLastSafetyForPoint(Double_t safe, Double_t x, Double_t y, Double_t z)
 
Int_t fLevel
thread id for this navigator
 
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 IsOnBoundary() const
 
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
 
const Double_t * GetCurrentPoint() const
 
Bool_t IsStartSafe() const
 
TGeoNode * fForcedNode
next node that will be crossed
 
TGeoHMatrix * GetDivMatrix() const
 
void MasterToLocalVect(const Double_t *master, Double_t *local) const
 
void MasterToLocalBomb(const Double_t *master, Double_t *local) const
 
const char * GetPath() const
Get path to the current node in the form /node0/node1/...
 
Bool_t IsStepEntering() const
 
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
 
Bool_t PopState(Int_t &nmany, Double_t *point=nullptr)
Pop next state/point from heap.
 
void MasterToLocal(const Double_t *master, Double_t *local) const
Point in master frame defined by current matrix converted to local one.
 
Int_t PushState(Bool_t ovlp, Int_t ntmany=0, Int_t startlevel=0, Double_t *point=nullptr)
Push current state into heap.
 
void PopDummy(Int_t ipop=9999)
 
Int_t GetNodeId() const
Get unique node id.
 
TGeoHMatrix * GetMotherMatrix(Int_t up=1) const
 
void MasterToLocalVect(const Double_t *master, Double_t *local) const
Vector in master frame defined by current matrix converted to local one.
 
void MasterToLocalBomb(const Double_t *master, Double_t *local) const
Point in master frame defined by current matrix converted to local one and rescaled with bomb factor.
 
void LocalToMaster(const Double_t *local, Double_t *master) const
Local point converted to master frame defined by current matrix.
 
void LocalToMasterVect(const Double_t *local, Double_t *master) const
Local vector converted to master frame defined by current matrix.
 
Int_t GetCurrentNodeId() const
Returns a fixed ID for current physical node.
 
void LocalToMasterBomb(const Double_t *local, Double_t *master) const
Local point converted to master frame defined by current matrix and rescaled with bomb factor.
 
Int_t GetStackLevel() const
 
TGeoHMatrix * GetCurrentMatrix() const
 
TGeoNode * GetMother(Int_t up=1) const
 
A node represent a volume positioned inside another.They store links to both volumes and to the TGeoM...
 
TGeoVolume * GetVolume() const
 
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
 
TObject * At(Int_t idx) const override
 
Mother of all ROOT objects.