43 G4double
ComputeStep(
const G4ThreeVector& globalPoint,
const G4ThreeVector& direction,
44 const G4double proposedStepLength, G4double& newSafety)
override;
47 const G4TouchableHistory& history)
override;
50 const G4bool relativeSearch =
true,
51 const G4bool ignoreDirection =
true)
override;
55 G4double
ComputeSafety(
const G4ThreeVector& globalPoint,
const G4double proposedMaxLength = DBL_MAX,
56 const G4bool keepState =
true)
override;
64 G4VPhysicalVolume* updateG4History();
65 void locateFromWorld(
const V3& point);
67 void leaveFlushVolumes(
const V3& point,
const V3& dir,
int minLevel, vecgeom::VPlacedVolume
const* avoid);
69 void updateCrossingFlags(
bool entering);
70 void clearLastExited()
72 mCurState.SetLastExited(mEmptyState.GetLastExitedState());
73 mExitBlockPending =
false;
76 void setExited(vecgeom::NavigationState
const&
st,
bool normalFromPush)
79 mExitBlockPending =
true;
80 mExitNormalFromPush = normalFromPush && mPushNormalValid;
84 double boundaryPush(
const V3& point,
const V3& dir);
86 bool computeExitNormal(
const G4ThreeVector& point,
V3& globalNormal)
const;
88 double mPushDepth = 1.e-9;
89 bool mZeroSafety =
false;
91 vecgeom::NavigationState mCurState;
92 vecgeom::NavigationState mNextState;
93 vecgeom::NavigationState mStepState;
94 vecgeom::NavigationState mReloScratch;
95 vecgeom::NavigationState mPathScratch;
96 vecgeom::NavigationState mHistoryState;
97 vecgeom::NavigationState mEmptyState;
98 vecgeom::NavigationState mNormalState;
99 vecgeom::NavigationState mExitedState;
100 bool mExitBlockPending =
false;
101 bool mExitNormalFromPush =
false;
103 bool mPushNormalValid =
false;
104 bool mHistoryValid =
false;
106 bool mWouldEnter =
false;
107 bool mWouldExit =
false;
108 G4ThreeVector mNextPoint{-1e8, -1e8, -1e8};
109 G4ThreeVector mLastLocatedPoint{-1e8, -1e8, -1e8};
110 bool mLocatedOnBoundary =
false;
111 G4ThreeVector mSafetyOrig{-1e8, -1e8, -1e8};
112 double mLastSafety = 0.;
113 bool mNormalEnter =
false;
114 bool mNormalValid =
false;
115 G4ThreeVector mNormalPoint{-1e8, -1e8, -1e8};
118 static constexpr int kActionThresholdNoZeroSteps = 10;
119 static constexpr int kAbandonThresholdNoZeroSteps = 25;
123 long mZeroStepCount = 0;
124 long mStuckPushCount = 0;
125 long mAbandonCount = 0;
126 long mNegativeSafetyCount = 0;
127 long mUnmappableHistoryCount = 0;
128 long mRelocatedResumeCount = 0;
129 long mNoNormalCount = 0;