44 G4double
ComputeStep(
const G4ThreeVector& globalPoint,
const G4ThreeVector& direction,
45 const G4double proposedStepLength, G4double& newSafety)
override;
48 const G4TouchableHistory& history)
override;
51 const G4bool relativeSearch =
true,
52 const G4bool ignoreDirection =
true)
override;
56 G4double
ComputeSafety(
const G4ThreeVector& globalPoint,
const G4double proposedMaxLength = DBL_MAX,
57 const G4bool keepState =
true)
override;
65 G4VPhysicalVolume* updateG4History();
66 void locateFromWorld(
const V3& point);
68 void leaveFlushVolumes(
const V3& point,
const V3& dir,
int minLevel, vecgeom::VPlacedVolume
const* avoid);
70 void updateCrossingFlags(
bool entering);
71 void clearLastExited()
73 mCurState.SetLastExited(mEmptyState.GetLastExitedState());
74 mExitBlockPending =
false;
77 void setExited(vecgeom::NavigationState
const&
st,
bool normalFromPush)
80 mExitBlockPending =
true;
81 mExitNormalFromPush = normalFromPush && mPushNormalValid;
85 double boundaryPush(
const V3& point,
const V3& dir);
87 bool computeExitNormal(
const G4ThreeVector& point,
V3& globalNormal)
const;
89 double mPushDepth = 1.e-9;
90 bool mZeroSafety =
false;
92 vecgeom::NavigationState mCurState;
93 vecgeom::NavigationState mNextState;
94 vecgeom::NavigationState mStepState;
95 vecgeom::NavigationState mReloScratch;
96 vecgeom::NavigationState mPathScratch;
97 vecgeom::NavigationState mHistoryState;
98 vecgeom::NavigationState mEmptyState;
99 vecgeom::NavigationState mNormalState;
100 vecgeom::NavigationState mExitedState;
101 bool mExitBlockPending =
false;
102 bool mExitNormalFromPush =
false;
104 bool mPushNormalValid =
false;
105 bool mHistoryValid =
false;
107 bool mWouldEnter =
false;
108 bool mWouldExit =
false;
109 G4ThreeVector mNextPoint{-1e8, -1e8, -1e8};
110 G4ThreeVector mLastLocatedPoint{-1e8, -1e8, -1e8};
111 bool mLocatedOnBoundary =
false;
112 G4ThreeVector mSafetyOrig{-1e8, -1e8, -1e8};
113 double mLastSafety = 0.;
114 double mLastSafetyLimit = kInfinity;
115 bool mNormalEnter =
false;
116 bool mNormalValid =
false;
117 G4ThreeVector mNormalPoint{-1e8, -1e8, -1e8};
120 static constexpr int kActionThresholdNoZeroSteps = 10;
121 static constexpr int kAbandonThresholdNoZeroSteps = 25;
125 long mZeroStepCount = 0;
126 long mStuckPushCount = 0;
127 long mAbandonCount = 0;
128 long mNegativeSafetyCount = 0;
129 long mUnmappableHistoryCount = 0;
130 long mRelocatedResumeCount = 0;
131 long mNoNormalCount = 0;