56#ifndef G4ITNAVIGATOR_HH
57#define G4ITNAVIGATOR_HH
123 const G4double pCurrentProposedStepLength,
140 const G4double pCurrentProposedStepLength,
160 const G4bool pRelativeSearch=
true,
161 const G4bool ignoreDirection=
true);
198 const G4bool RelativeSearch =
true);
207 const G4bool RelativeSearch =
true);
215 const G4bool RelativeSearch =
true);
224 const G4bool keepState =
true);
237 const G4double CurrentProposedStepLength,
239 G4double *prNewSafety=
nullptr)
const;
403 G4int fActionThreshold_NoZeroSteps;
405 G4int fAbandonThreshold_NoZeroSteps;
410 struct G4SaveNavigatorState;
464 G4bool fLastTriedStepComputation;
470 G4bool fEntering,fExiting;
480 G4int fBlockedReplicaNo;
484 G4bool fLocatedOutsideWorld;
493 G4bool fChangedGrandMotherRefFrame;
497 G4bool fCalculatedExitNormal;
511 G4int fNumberZeroSteps;
587#define CheckNavigatorStateIsValid() \
588if(fpNavigatorState == 0) \
590 G4ExceptionDescription exceptionDescription; \
591 exceptionDescription << "The navigator state is NULL. "; \
592 exceptionDescription << "Either NewNavigatorStateAndLocate was not called "; \
593 exceptionDescription << "or the provided navigator state was already NULL."; \
594 G4Exception((G4String("G4Navigator")+G4String(__FUNCTION__)).c_str(),\
595 "NavigatorStateNotValid",FatalException,exceptionDescription); \
598#include "G4ITNavigator2.icc"
std::ostream & operator<<(std::ostream &out, const G4CellScoreComposer &ps)
G4PVDivision & operator=(const G4PVDivision &)=delete
CLHEP::HepRotation G4RotationMatrix
CLHEP::Hep3Vector G4ThreeVector
G4ReferenceCountedHandle< G4VTouchable > G4TouchableHandle
G4TouchableHandle is a type providing reference counting mechanism for any kind of touchable objects....
#define RegisterTrackState(CLASS, STATE)
G4TouchableHistory G4VTouchable
G4VTouchable is a G4TouchableHistory object.
G4ReplicaNavigation freplicaNav
G4bool ExitedMotherVolume() const
void GetRandomInCurrentVolume(G4ThreeVector &rndmPoint) const
void SetVerboseLevel(G4int level)
virtual G4ThreeVector GetLocalExitNormalAndCheck(const G4ThreeVector &point, G4bool *valid)
G4ThreeVector ComputeLocalPoint(const G4ThreeVector &rGlobPoint) const
G4ITNavigator2 & operator=(const G4ITNavigator2 &)=delete
virtual void ResetState()
void ResetFromSnapshot(std::shared_ptr< G4ITNavigatorState_Lock2 >)
void SetNavigatorState(G4ITNavigatorState_Lock2 *)
G4VPhysicalVolume * NewNavigatorStateAndLocate(const G4ThreeVector &p, const G4ThreeVector &direction)
std::shared_ptr< G4ITNavigatorState_Lock2 > GetSnapshotOfState()
void LocateGlobalPointAndUpdateTouchable(const G4ThreeVector &position, G4VTouchable *touchableToUpdate, const G4bool RelativeSearch=true)
G4VPhysicalVolume * GetWorldVolume() const
G4TouchableHistory * CreateTouchableHistory() const
G4VoxelNavigation fvoxelNav
G4TouchableHistory * CreateTouchableHistory(const G4NavigationHistory *) const
virtual G4double ComputeSafety(const G4ThreeVector &globalpoint, const G4double pProposedMaxLength=DBL_MAX, const G4bool keepState=true)
G4NormalNavigation fnormalNav
void CheckNavigatorState() const
void Activate(G4bool flag)
G4double CheckNextStep(const G4ThreeVector &pGlobalPoint, const G4ThreeVector &pDirection, const G4double pCurrentProposedStepLength, G4double &pNewSafety)
const G4AffineTransform & GetGlobalToLocalTransform() const
G4bool IsCheckModeActive() const
G4AffineTransform GetMotherToDaughterTransform(G4VPhysicalVolume *dVolume, G4int dReplicaNo, EVolume dVolumeType)
virtual void SetupHierarchy()
G4ITNavigator2(const G4ITNavigator2 &)=delete
void EnableBestSafety(G4bool value=false)
G4ThreeVector NetTranslation() const
void SetPushVerbosity(G4bool mode)
G4int GetDaughtersRegularStructureId(const G4LogicalVolume *pLog) const
virtual G4VPhysicalVolume * ResetHierarchyAndLocate(const G4ThreeVector &point, const G4ThreeVector &direction, const G4TouchableHistory &h)
virtual G4double ComputeStep(const G4ThreeVector &pGlobalPoint, const G4ThreeVector &pDirection, const G4double pCurrentProposedStepLength, G4double &pNewSafety)
EVolume CharacteriseDaughters(const G4LogicalVolume *pLog) const
const G4AffineTransform GetLocalToGlobalTransform() const
virtual G4ThreeVector GetGlobalExitNormal(const G4ThreeVector &point, G4bool *valid)
G4ITNavigatorState_Lock2 * GetNavigatorState()
static const G4int fMaxNav
void LocateGlobalPointAndUpdateTouchableHandle(const G4ThreeVector &position, const G4ThreeVector &direction, G4TouchableHandle &oldTouchableToUpdate, const G4bool RelativeSearch=true)
G4RegularNavigation fregularNav
G4ParameterisedNavigation fparamNav
G4VoxelSafety * fpVoxelSafety
G4int GetVerboseLevel() const
void SetWorldVolume(G4VPhysicalVolume *pWorld)
void ResetStackAndState()
void CheckMode(G4bool mode)
EVolume VolumeType(const G4VPhysicalVolume *pVol) const
G4NavigatorState * fpNavigatorState
void LocateGlobalPointAndUpdateTouchable(const G4ThreeVector &position, const G4ThreeVector &direction, G4VTouchable *touchableToUpdate, const G4bool RelativeSearch=true)
G4VPhysicalVolume * fTopPhysical
EInside InsideCurrentVolume(const G4ThreeVector &globalPoint) const
virtual G4TouchableHandle CreateTouchableHistoryHandle() const
virtual void LocateGlobalPointWithinVolume(const G4ThreeVector &position)
virtual G4bool RecheckDistanceToCurrentBoundary(const G4ThreeVector &pGlobalPoint, const G4ThreeVector &pDirection, const G4double CurrentProposedStepLength, G4double *prDistance, G4double *prNewSafety=nullptr) const
void SetGeometricallyLimitedStep()
G4RotationMatrix NetRotation() const
G4int SeverityOfZeroStepping(G4int *noZeroSteps) const
void ResetNavigatorState()
G4ThreeVector GetCurrentLocalCoordinate() const
G4ThreeVector ComputeLocalAxis(const G4ThreeVector &pVec) const
virtual G4ThreeVector GetLocalExitNormal(G4bool *valid)
virtual G4VPhysicalVolume * LocateGlobalPointAndSetup(const G4ThreeVector &point, const G4ThreeVector *direction=nullptr, const G4bool pRelativeSearch=true, const G4bool ignoreDirection=true)
G4bool EnteredDaughterVolume() const
G4LogicalVolume represents a leaf node or unpositioned subtree in the geometry hierarchy....
G4NavigationHistory is a class responsible for the maintenance of the history of the path taken throu...
G4NormalNavigation is a concrete utility class for navigation in volumes containing only G4PVPlacemen...
G4ParameterisedNavigation is a concrete utility class for navigation in volumes containing a single G...
G4RegularNavigation is a concrete utility class for fast navigation in volumes containing a regular p...
G4ReplicaNavigation is a utility class for navigation in volumes containing a single G4PVParameterise...
G4TouchableHistory is an object representing a touchable detector element, and its history in the geo...
G4VPhysicalVolume is an abstract base class for the representation of a positioned volume....
G4VoxelNavigation is a concrete utility class for navigation in volumes containing only G4PVPlacement...
G4VoxelSafety is an utility class for the handling isotropic safety in volumes containing only G4PVPl...
friend class G4ITNavigator2
friend struct G4SaveNavigatorState
G4ThreeVector fStepEndPoint
~G4NavigatorState() override
G4bool fWasLimitedByGeometry
void ResetStackAndState()
G4ThreeVector fLastStepEndPointLocal
G4NavigationHistory fHistory
G4ThreeVector sPreviousSftOrigin
G4VPhysicalVolume * spBlockedPhysicalVolume
G4bool sWasLimitedByGeometry
G4bool sLocatedOutsideWorld
G4ThreeVector sLastLocatedPointLocal
G4ThreeVector sExitNormal
virtual ~G4SaveNavigatorState()
G4ITNavigatorState_Lock2()=default
virtual ~G4ITNavigatorState_Lock2()=default