42#ifndef G4PATHFINDER_HH
43#define G4PATHFINDER_HH 1
85 G4bool relativeSearch =
true);
109 const G4double pCurrentProposedStepLength,
111 G4double* prNewSafety =
nullptr)
const;
209 G4int fNoActiveNavigators = 0;
212 static const G4int fMaxNav = 16;
221 G4bool fLimitTruth[fMaxNav];
223 G4int fNoGeometriesLimiting = 0;
229 G4double fPreSafetyValues[ fMaxNav ];
236 G4double fMinSafety_PreStepPt = -1.0;
238 G4double fCurrentPreStepSafety[ fMaxNav ];
243 G4bool fPreStepCenterRenewed =
false;
258 G4bool fFieldExertedForce =
false;
260 G4bool fRelocatedPoint =
false;
269 G4double fMinSafety_atSafLocation = -1.0;
271 G4double fNewSafetyComputed[ fMaxNav ];
276 G4int fLastStepNo = -1, fCurrentStepNo = -1;
278 G4int fVerboseLevel = 0;
295 if( (navId < fMaxNav) && (navId >= 0) ) { vol= fLocatedVolume[navId]; }
301 G4int old = fVerboseLevel;
302 fVerboseLevel = newLevel;
313 unsigned int noGeometries = fNoGeometriesLimiting;
319 return fMinSafety_PreStepPt;
324 fRelocatedPoint =
true;
329 if( (n>fNoActiveNavigators) || (n<0) ) { n=0; }
330 return fpNavigator[n];
336 globalCenterPoint = fSafetyLocation;
337 return fNewSafetyComputed[ navId ];
344 globalCenterPoint = fPreSafetyLocation;
345 minSafety = fPreSafetyMinValue;
346 return fPreSafetyValues[ navId ];
G4double ComputeSafety(const G4ThreeVector &globalPoint)
void EnableParallelNavigation(G4bool enableChoice=true)
G4Navigator * GetNavigator(G4int n) const
void ReLocate(const G4ThreeVector &position)
void ReportMove(const G4ThreeVector &OldV, const G4ThreeVector &NewV, const G4String &Quantity) const
G4double DoNextLinearStep(const G4FieldTrack &FieldTrack, G4double proposedStepLength)
G4bool IsParticleLooping() const
unsigned int GetNumberGeometriesLimitingStep() const
void PushPostSafetyToPreSafety()
G4double ObtainSafety(G4int navId, G4ThreeVector &globalCenterPoint)
G4VPhysicalVolume * GetLocatedVolume(G4int navId) const
G4double ComputeStep(const G4FieldTrack &pFieldTrack, G4double pCurrentProposedStepLength, G4int navigatorId, G4int stepNo, G4double &pNewSafety, ELimited &limitedStep, G4FieldTrack &EndState, G4VPhysicalVolume *currentVolume)
G4double DoNextCurvedStep(const G4FieldTrack &FieldTrack, G4double proposedStepLength, G4VPhysicalVolume *pCurrentPhysVolume)
void Locate(const G4ThreeVector &position, const G4ThreeVector &direction, G4bool relativeSearch=true)
G4bool UseSafetyForOptimization(G4bool)
G4double LastPreSafety(G4int navId, G4ThreeVector &globalCenterPoint, G4double &minSafety)
G4String & LimitedString(ELimited lim)
G4double GetCurrentSafety() const
G4bool RecheckDistanceToCurrentBoundary(const G4ThreeVector &pGlobalPoint, const G4ThreeVector &pDirection, const G4double pCurrentProposedStepLength, G4double *prDistance, G4double *prNewSafety=nullptr) const
G4int GetMaxLoopCount() const
void PrepareNewTrack(const G4ThreeVector &position, const G4ThreeVector &direction, G4VPhysicalVolume *massStartVol=nullptr)
void SetMaxLoopCount(G4int new_max)
G4double GetMinimumStep() const
static G4PathFinder * GetInstance()
G4int SetVerboseLevel(G4int lev=-1)
G4TouchableHandle CreateTouchableHandle(G4int navId) const
static G4PathFinder * GetInstanceIfExist()