48#define State(X) fpTrackState->X
49#define fNewTrack State(fNewTrack)
50#define fLimitedStep State(fLimitedStep)
51#define fLimitTruth State(fLimitTruth)
52#define fCurrentStepSize State(fCurrentStepSize)
53#define fNoGeometriesLimiting State(fNoGeometriesLimiting)
54#define fPreSafetyLocation State(fPreSafetyLocation)
55#define fPreSafetyMinValue State(fPreSafetyMinValue)
56#define fPreSafetyValues State(fPreSafetyValues)
57#define fPreStepLocation State(fPreStepLocation)
58#define fMinSafety_PreStepPt State(fMinSafety_PreStepPt)
59#define fCurrentPreStepSafety State(fCurrentPreStepSafety)
60#define fPreStepCenterRenewed State(fPreStepCenterRenewed)
61#define fMinStep State(fMinStep)
62#define fTrueMinStep State(fTrueMinStep)
63#define fLocatedVolume State(fLocatedVolume)
64#define fLastLocatedPosition State(fLastLocatedPosition)
65#define fEndState State(fEndState)
66#define fFieldExertedForce State(fFieldExertedForce)
67#define fRelocatedPoint State(fRelocatedPoint)
68#define fSafetyLocation State(fSafetyLocation)
69#define fMinSafety_atSafLocation State(fMinSafety_atSafLocation)
70#define fNewSafetyComputed State(fNewSafetyComputed)
71#define fLastStepNo State(fLastStepNo)
72#define fCurrentStepNo State(fCurrentStepNo)
85 if( fpPathFinder ==
nullptr )
104 fNoActiveNavigators= 0;
105 for(
auto & num : fpNavigator)
116 delete fpMultiNavigator;
117 if (fpPathFinder !=
nullptr) {
delete fpPathFinder; fpPathFinder=
nullptr; }
163#ifdef G4DEBUG_PATHFINDER
164 if( fVerboseLevel > 2 )
167 G4cout <<
" G4ITPathFinder::ComputeStep - entered " <<
G4endl;
168 G4cout <<
" - stepNo = " << std::setw(4) << stepNo <<
" "
169 <<
" navigatorId = " << std::setw(2) << navigatorNo <<
" "
170 <<
" proposed step len = " << proposedStepLength <<
" " <<
G4endl;
171 G4cout <<
" PF::ComputeStep requested step "
177 if( navigatorNo >= fNoActiveNavigators )
179 std::ostringstream message;
180 message <<
"Bad Navigator ID !" <<
G4endl
181 <<
" Requested Navigator ID = " << navigatorNo <<
G4endl
182 <<
" Number of active navigators = " << fNoActiveNavigators;
183 G4Exception(
"G4ITPathFinder::ComputeStep()",
"GeomNav0002",
203 if( moveLenSq > kCarTolerance * kCarTolerance )
206#ifdef G4DEBUG_PATHFINDER
207 if( fVerboseLevel > 2 )
209 G4double moveLen= std::sqrt( moveLenSq );
210 G4cout <<
" G4ITPathFinder::ComputeStep : Point moved since last step "
211 <<
" -- at step # = " << stepNo <<
G4endl
212 <<
" by " << moveLen <<
" to " << newPosition <<
G4endl;
219 Locate( newPosition, newDirection );
253#ifdef G4DEBUG_PATHFINDER
257 std::ostringstream message;
258 message <<
"Number of geometries limiting the step not set." <<
G4endl
259 <<
" Number of geometries limiting step = "
266#ifdef G4DEBUG_PATHFINDER
271 std::ostringstream message;
272 message <<
"Problem in step size request." <<
G4endl
273 <<
" Error can be caused by incorrect process ordering."
274 <<
" Being requested to make a step which is shorter"
275 <<
" than the minimum Step " <<
G4endl
276 <<
" already computed for any Navigator/geometry during"
277 <<
" this tracking-step: " <<
G4endl
278 <<
" This can happen due to an error in process ordering."
280 <<
" Check that all physics processes are registered"
282 <<
" before all processes with a navigator/geometry."
284 <<
" If using pre-packaged physics list and/or"
286 <<
" functionality, please report this error."
288 <<
" Additional information for problem: " <<
G4endl
289 <<
" Steps request/proposed = " << proposedStepLength
293 <<
" MinimumStep (navraw) = " <<
fMinStep
295 <<
" Navigator raw return value" <<
G4endl
296 <<
" Requested step now = " << proposedStepLength
298 <<
" Difference min-req = "
300 <<
" -- Step info> stepNo= " << stepNo
313 if( fVerboseLevel > 1 )
315 G4cout <<
" G4P::CS -> Not calling DoNextLinearStep: "
316 <<
" stepNo= " << stepNo <<
" last= " <<
fLastStepNo
331 possibleStep= std::min(proposedStepLength,
fCurrentStepSize[ navigatorNo ]);
334#ifdef G4DEBUG_PATHFINDER
335 if( fVerboseLevel > 0 )
337 G4cout <<
" G4ITPathFinder::ComputeStep returns "
339 <<
" for Navigator " << navigatorNo
340 <<
" Limited step = " << limitedStep
341 <<
" Safety(mm) = " << pNewSafety / mm
373 std::vector<G4ITNavigator*>::iterator pNavigatorIter;
375 fNoActiveNavigators = (
G4int)fpTransportManager-> GetNoActiveNavigators();
376 if( fNoActiveNavigators > G4ITNavigator::fMaxNav )
378 std::ostringstream message;
379 message <<
"Too many active Navigators / worlds." <<
G4endl
380 <<
" Transportation Manager has "
381 << fNoActiveNavigators <<
" active navigators." <<
G4endl
382 <<
" This is more than the number allowed = "
383 << G4ITNavigator::fMaxNav <<
" !";
384 G4Exception(
"G4ITPathFinder::PrepareNewTrack()",
"GeomNav0002",
392 for( num=0; num< fNoActiveNavigators; ++pNavigatorIter,++num )
396 fpNavigator[num] = *pNavigatorIter;
406 if( fNoActiveNavigators > 1 )
426 for( num=0; num< fNoActiveNavigators; ++num )
446 std::ostringstream message;
447 message <<
"Endpoint moved between value returned by ComputeStep()"
448 <<
" and call to Locate(). " <<
G4endl
449 <<
" Change of " << Quantity <<
" is "
450 << moveVec.
mag() / mm <<
" mm long" <<
G4endl
451 <<
" and its vector is "
452 << (1.0/mm) * moveVec <<
" mm " <<
G4endl
453 <<
" Endpoint of ComputeStep() was " << OldVector <<
G4endl
454 <<
" and current position to locate is " << NewVector;
455 G4Exception(
"G4ITPathFinder::ReportMove()",
"GeomNav1002",
474 && ( moveLenSq> 10*kCarTolerance*kCarTolerance ) )
480#ifdef G4DEBUG_PATHFINDER
481 if( fVerboseLevel > 2 )
484 G4cout <<
" G4ITPathFinder::Locate : entered " <<
G4endl;
487 <<
" with direction " << direction
488 <<
" relative= " << relative <<
G4endl;
489 if ( (fVerboseLevel > 1) || ( moveLenSq > 0.0) )
491 G4cout <<
" lastEndPosition = " << lastEndPosition
492 <<
" moveVec = " << moveVec
502 for (
G4int num=0; num< fNoActiveNavigators ; ++pNavIter,++num )
506 if(
fLimitTruth[num] ) { (*pNavIter)->SetGeometricallyLimitedStep(); }
509 (*pNavIter)->LocateGlobalPointAndSetup(
position, &direction,
521#ifdef G4DEBUG_PATHFINDER
522 if( fVerboseLevel > 2 )
525 <<
" gives volume= " << pLocated ;
528 G4cout <<
" name = '" << pLocated->GetName() <<
"'";
529 G4cout <<
" - CopyNo= " << pLocated->GetCopyNo();
546#ifdef G4DEBUG_PATHFINDER
558 G4double endPointSafety_Est1 = std::max( 0.0, endPointSafety_raw );
571 G4double distCheckEnd_sq= ( moveLenEndPosSq - endPointSafety_Est1
572 *endPointSafety_Est1 );
576 G4bool longMoveEnd = distCheckEnd_sq > 0.0;
577 G4bool longMoveSaf = distCheckSaf_sq > 0.0;
581 if( (!
fNewTrack) && ( longMoveEnd && longMoveSaf ) )
589 const G4double cErrorTolerance=1e-12;
592 G4double distCheckRevisedEnd= moveLenEndPosSq-revisedSafety*revisedSafety;
594 G4bool longMoveRevisedEnd= ( distCheckRevisedEnd > 0. ) ;
597 G4double moveLenEndPosition= std::sqrt( moveLenEndPosSq );
598 moveMinusSafety = moveLenEndPosition - revisedSafety;
600 if ( longMoveRevisedEnd && (moveMinusSafety > 0.0 )
601 && ( revisedSafety > 0.0 ) )
606 if( fVerboseLevel > 0 )
608 G4cout <<
" G4PF:Relocate> Ratio to revised safety is "
609 << std::fabs(moveMinusSafety)/revisedSafety <<
G4endl;
612 G4double absMoveMinusSafety= std::fabs(moveMinusSafety);
613 G4bool smallRatio= absMoveMinusSafety < kRadTolerance * revisedSafety ;
618 G4bool smallValue= absMoveMinusSafety < cErrorTolerance * maxCoordPos;
619 if( ! (smallRatio || smallValue) )
621 G4cout <<
" G4PF:Relocate> Ratio to revised safety is "
622 << std::fabs(moveMinusSafety)/revisedSafety <<
G4endl;
623 G4cout <<
" Difference of move and safety is not very small."
628 moveMinusSafety = 0.0;
629 longMoveRevisedEnd =
false;
631 G4cout <<
" Difference of move & safety is very small in magnitude, "
632 << absMoveMinusSafety <<
G4endl;
635 G4cout <<
" ratio to safety " << revisedSafety
636 <<
" is " << absMoveMinusSafety / revisedSafety
637 <<
"smaller than " << kRadTolerance <<
" of safety ";
641 G4cout <<
" as fraction " << absMoveMinusSafety / maxCoordPos
642 <<
" of position vector max-coord " << maxCoordPos
643 <<
" smaller than " << cErrorTolerance ;
645 G4cout <<
" -- reset moveMinusSafety to "
646 << moveMinusSafety <<
G4endl;
650 if ( longMoveEnd && longMoveSaf
651 && longMoveRevisedEnd && (moveMinusSafety>0.0) )
654 std::ostringstream message;
655 message <<
"ReLocation is further than end-safety value." <<
G4endl
656 <<
" Moved from last endpoint by " << moveLenEndPosition
657 <<
" compared to end safety (from preStep point) = "
658 << endPointSafety_Est1 <<
G4endl
665 <<
" --> last EndStep Location was " << lastEndPosition
667 <<
" safety value = " << endPointSafety_Est1
668 <<
" raw-value = " << endPointSafety_raw <<
G4endl
669 <<
" --> Calling again at this endpoint, we get "
670 << revisedSafety <<
" as safety value." <<
G4endl
675 <<
" move from safety location = "
676 << std::sqrt(moveLenSafSq) <<
G4endl
677 <<
" again= " << moveVecSafety.
mag() <<
G4endl
678 <<
" safety - Move-from-end= "
679 << revisedSafety - moveLenEndPosition
680 <<
" (negative is Bad.)" <<
G4endl
681 <<
" Debug: distCheckRevisedEnd = "
682 << distCheckRevisedEnd;
684 G4Exception(
"G4ITPathFinder::ReLocate",
"GeomNav0003",
686 G4cout.precision(oldPrec);
690 if( fVerboseLevel > 2 )
693 G4cout <<
" G4ITPathFinder::ReLocate : entered " <<
G4endl;
698 if ( (fVerboseLevel > -1) || ( moveLenEndPosSq > 0.0) )
700 G4cout <<
" lastEndPosition = " << lastEndPosition
701 <<
" moveVec from step-end = " << moveVecEndPos
708 for (
G4int num=0; num< fNoActiveNavigators ; ++pNavIter,++num )
712 (*pNavIter)->LocateGlobalPointWithinVolume(
position );
724#ifdef G4DEBUG_PATHFINDER
725 if( fVerboseLevel > 2 )
727 G4cout <<
" G4ITPathFinder::ReLocate : exiting "
741 std::vector<G4ITNavigator*>::iterator pNavigatorIter;
744 for(
G4int num=0; num<fNoActiveNavigators; ++pNavigatorIter,++num )
747 if( safety < minSafety ) { minSafety = safety; }
754#ifdef G4DEBUG_PATHFINDER
755 if( fVerboseLevel > 1 )
757 G4cout <<
" G4ITPathFinder::ComputeSafety - returns "
770#ifdef G4DEBUG_PATHFINDER
771 if( fVerboseLevel > 2 )
773 G4cout <<
"G4ITPathFinder::CreateTouchableHandle : navId = "
779 touchHist=
GetNavigator(navId) -> CreateTouchableHistory();
782 if( locatedVolume ==
nullptr )
789#ifdef G4DEBUG_PATHFINDER
790 if( fVerboseLevel > 2 )
793 if( locatedVolume ) { VolumeName= locatedVolume->
GetName(); }
794 G4cout <<
" Touchable History created at address " << touchHist
795 <<
" volume = " << locatedVolume <<
" name= " << VolumeName
807 std::vector<G4ITNavigator*>::iterator pNavigatorIter;
809 G4double minSafety= kInfinity, minStep;
811 const G4int IdTransport= 0;
814#ifdef G4DEBUG_PATHFINDER
815 if( fVerboseLevel > 2 )
817 G4cout <<
" G4ITPathFinder::DoNextLinearStep : entered " <<
G4endl;
818 G4cout <<
" Input field track= " << initialState <<
G4endl;
819 G4cout <<
" Requested step= " << proposedStepLength <<
G4endl;
836 MagShift= std::sqrt(MagSqShift) ;
838#ifdef G4PATHFINDER_OPTIMISATION
850 if( proposedStepLength < fullSafety )
857 for( num=0; num< fNoActiveNavigators; ++num )
861 minSafety= std::min( safety, minSafety );
866#ifdef G4DEBUG_PATHFINDER
867 if( fVerboseLevel > 2 )
869 G4cout <<
"G4ITPathFinder::DoNextLinearStep : Quick Stepping. " <<
G4endl
870 <<
" proposedStepLength " << proposedStepLength
871 <<
" < (full) safety = " << fullSafety
872 <<
" at " << initialPosition
884 pNavigatorIter= fpTransportManager-> GetActiveNavigatorsIterator();
888 for( num=0; num< fNoActiveNavigators; ++pNavigatorIter,++num )
892#ifdef G4PATHFINDER_OPTIMISATION
893 if( proposedStepLength <= safety )
899#ifdef G4DEBUG_PATHFINDER
901 G4cout <<
"G4ITNavigator::ComputeStep> small proposed step = "
902 << proposedStepLength
903 <<
" <= safety = " << safety <<
" for nav " << num
904 <<
" Step fully taken. " <<
G4endl;
910#ifdef G4DEBUG_PATHFINDER
913 step= (*pNavigatorIter)->ComputeStep( initialPosition,
917 minStep = std::min( step, minStep);
922#ifdef G4DEBUG_PATHFINDER
923 if( fVerboseLevel > 0)
926 G4cout <<
"G4ITNavigator::ComputeStep> long proposed step = "
927 << proposedStepLength
928 <<
" > safety = " << previousSafety
929 <<
" for nav " << num
930 <<
" . New safety = " << safety <<
" step= " << step
944 minSafety= std::min( safety, minSafety );
946#ifdef G4DEBUG_PATHFINDER
947 if( fVerboseLevel > 2 )
949 G4cout <<
"G4ITPathFinder::DoNextLinearStep : Navigator ["
950 << num <<
"] -- step size " << step <<
G4endl;
971 minStep = proposedStepLength;
980 endPosition= initialPosition + minStep * initialDirection ;
982#ifdef G4DEBUG_PATHFINDER
983 if( fVerboseLevel > 1 )
985 G4cout <<
"G4ITPathFinder::DoNextLinearStep : "
986 <<
" initialPosition = " << initialPosition
987 <<
" and endPosition = " << endPosition<<
G4endl;
992 fEndState.SetProperTimeOfFlight( -1.000 );
994 if( fNoActiveNavigators == 1 )
1008#ifdef G4DEBUG_PATHFINDER
1009 if( fVerboseLevel > 2 )
1011 G4cout <<
" G4ITPathFinder::DoNextLinearStep : exits returning "
1025 G4int num=-1, last=-1;
1029 const G4int IdTransport= 0;
1036 if( transportLimited ) {
1040 for ( num= 0; num < fNoActiveNavigators; num++ )
1046 limitedStep = ( std::fabs(step -
fMinStep) < kCarTolerance )
1047 && ( step != kInfinity);
1063 if( (last > -1) && (noLimited == 1 ) )
1068#ifdef G4DEBUG_PATHFINDER
1069 if( fVerboseLevel > 1 )
1072 if( fVerboseLevel > 4 ) {
1073 G4cout <<
" G4ITPathFinder::WhichLimited - exiting. " <<
G4endl;
1083 G4cout <<
"G4ITPathFinder::PrintLimited reports: " ;
1089 G4cout << std::setw(5) <<
" Step#" <<
" "
1090 << std::setw(5) <<
" NavId" <<
" "
1091 << std::setw(12) <<
" step-size " <<
" "
1092 << std::setw(12) <<
" raw-size " <<
" "
1093 << std::setw(12) <<
" pre-safety " <<
" "
1094 << std::setw(15) <<
" Limited / flag" <<
" "
1095 << std::setw(15) <<
" World " <<
" "
1099 for ( num= 0; num < fNoActiveNavigators; num++ )
1110 << std::setw(5) << num <<
" "
1111 << std::setw(12) << stepLen <<
" "
1112 << std::setw(12) << rawStep <<
" "
1114 << std::setw(5) << (
fLimitTruth[num] ?
"YES" :
" NO") <<
" ";
1116 G4cout <<
" " << std::setw(15) << limitedStr <<
" ";
1117 G4cout.precision(oldPrec);
1121 if (pNav !=
nullptr)
1124 if( pWorld !=
nullptr )
1126 WorldName = pWorld->
GetName();
1129 G4cout <<
" " << WorldName ;
1133 if( fVerboseLevel > 4 )
1135 G4cout <<
" G4ITPathFinder::PrintLimited - exiting. " <<
G4endl;
1144 const G4double toleratedRelativeError= 1.0e-10;
1145 G4double minStep= kInfinity, newSafety=0.0;
1150#ifdef G4DEBUG_PATHFINDER
1152 if( fVerboseLevel > 2 )
1154 G4cout <<
" G4ITPathFinder::DoNextCurvedStep ****** " <<
G4endl;
1155 G4cout <<
" Initial value of field track is " << fieldTrack
1156 <<
" and proposed step= " << proposedStepLength <<
G4endl;
1162 if( fNoActiveNavigators > 1 )
1166 G4double minSafety= kInfinity, safety;
1167 for( numNav=0; numNav < fNoActiveNavigators; ++numNav )
1169 safety= fpNavigator[numNav]->ComputeSafety( startPoint, 0.0 );
1172 minSafety = std::min( safety, minSafety );
1195 fTrueMinStep = std::min( minStep, proposedStepLength );
1197 if( fNoActiveNavigators== 1 )
1213#ifdef G4DEBUG_PATHFINDER
1214 if( fVerboseLevel > 2 )
1216 G4cout <<
"G4ITPathFinder::DoNextCurvedStep : " <<
G4endl
1217 <<
" initialState = " << initialState <<
G4endl
1219 G4cout <<
"G4ITPathFinder::DoNextCurvedStep : "
1220 <<
" minStep = " << minStep
1221 <<
" proposedStepLength " << proposedStepLength
1222 <<
" safety = " << newSafety <<
G4endl;
1226 if( minStep < proposedStepLength )
1232 for( numNav=0; numNav < fNoActiveNavigators; ++numNav )
1234 G4double finalStep, lastPreSafety=0.0, minStepLast;
1239 minStepLast, didLimit );
1246 if( (minStepLast != kInfinity) )
1248 diffStep = (finalStep-minStepLast);
1249 if ( std::abs(diffStep) <= toleratedRelativeError * finalStep )
1253 currentStepSize += diffStep;
1270 if( limited ) { noLimited++; }
1272#ifdef G4DEBUG_PATHFINDER
1273 G4bool StepError= (currentStepSize < 0)
1274 || ( (minStepLast != kInfinity) && (diffStep < 0) ) ;
1275 if( StepError || (fVerboseLevel > 2) )
1279 G4cout <<
" G4ITPathFinder::ComputeStep. Geometry " << numNav
1281 <<
" from final-step= " << finalStep
1283 <<
" minStepLast= " << minStepLast
1284 <<
" limited = " << (
fLimitTruth[numNav] ?
"YES" :
" NO")
1286 G4cout <<
" status = " << limitedString <<
" #= " << didLimit
1291 std::ostringstream message;
1292 message <<
"Incorrect calculation of step size for one navigator"
1294 <<
" currentStepSize = " << currentStepSize
1295 <<
", diffStep= " << diffStep <<
G4endl
1296 <<
"ERROR in computing step size for this navigator.";
1306 else if ( (minStep == proposedStepLength)
1307 || (minStep == kInfinity)
1308 || ( std::abs(minStep-proposedStepLength)
1309 < toleratedRelativeError * proposedStepLength ) )
1318 currentStepSize= minStep;
1319 for( numNav=0; numNav < fNoActiveNavigators; ++numNav )
1330 std::ostringstream message;
1331 message <<
"Incorrect calculation of step size for one navigator." <<
G4endl
1332 <<
" currentStepSize = " << minStep <<
" is larger than "
1333 <<
" proposed StepSize = " << proposedStepLength <<
".";
1338#ifdef G4DEBUG_PATHFINDER
1339 if( fVerboseLevel > 2 )
1341 G4cout <<
" Exiting G4ITPathFinder::DoNextCurvedStep " <<
G4endl;
1353 StrUnique(
"Unique"),
1354 StrUndefined(
"Undefined"),
1355 StrSharedTransport(
"SharedTransport"),
1356 StrSharedOther(
"SharedOther");
1361 case kDoNot: limitedStr= &StrDoNot;
break;
1362 case kUnique: limitedStr = &StrUnique;
break;
1364 case kSharedOther: limitedStr = &StrSharedOther;
break;
1365 default: limitedStr = &StrUndefined;
break;
1374 for(
G4int nav=0; nav < fNoActiveNavigators; ++nav )
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
#define fMinSafety_atSafLocation
#define fLastLocatedPosition
#define fMinSafety_PreStepPt
#define fNoGeometriesLimiting
#define fPreSafetyMinValue
#define fPreSafetyLocation
#define fNewSafetyComputed
#define fCurrentPreStepSafety
#define fPreStepCenterRenewed
G4ReferenceCountedHandle< G4VTouchable > G4TouchableHandle
G4GLOB_DLL std::ostream G4cerr
G4GLOB_DLL std::ostream G4cout
G4ThreeVector GetMomentumDirection() const
G4ThreeVector GetPosition() const
G4double GetSurfaceTolerance() const
G4double GetRadialTolerance() const
static G4GeometryTolerance * GetInstance()
G4double ObtainFinalStep(G4int navigatorId, G4double &pNewSafety, G4double &minStepLast, ELimited &limitedStep)
G4ITNavigator * GetNavigator(G4int n) const
void ReportMove(const G4ThreeVector &OldV, const G4ThreeVector &NewV, const G4String &Quantity) const
static G4ITPathFinder * GetInstance()
G4double DoNextLinearStep(const G4FieldTrack &FieldTrack, G4double proposedStepLength)
G4double ComputeStep(const G4FieldTrack &pFieldTrack, G4double pCurrentProposedStepLength, G4int navigatorId, G4int stepNo, G4double &pNewSafety, ELimited &limitedStep, G4FieldTrack &EndState, G4VPhysicalVolume *currentVolume)
void ReLocate(const G4ThreeVector &position)
void EnableParallelNavigation(G4bool enableChoice=true)
void PushPostSafetyToPreSafety()
void PrepareNewTrack(const G4ThreeVector &position, const G4ThreeVector &direction, G4VPhysicalVolume *massStartVol=nullptr)
G4double DoNextCurvedStep(const G4FieldTrack &FieldTrack, G4double proposedStepLength, G4VPhysicalVolume *pCurrentPhysVolume)
~G4ITPathFinder() override
G4TouchableHandle CreateTouchableHandle(G4int navId) const
G4String & LimitedString(ELimited lim)
void Locate(const G4ThreeVector &position, const G4ThreeVector &direction, G4bool relativeSearch=true)
G4double ComputeSafety(const G4ThreeVector &globalPoint)
void EnableParallelNavigation(G4bool parallel)
std::vector< G4ITNavigator * >::iterator GetActiveNavigatorsIterator()
static G4ITTransportationManager * GetTransportationManager()
G4ITSafetyHelper * GetSafetyHelper() const
virtual const G4NavigationHistory * GetHistory() const
virtual void UpdateYourself(G4VPhysicalVolume *pPhysVol, const G4NavigationHistory *history=nullptr)
const G4String & GetName() const