261{
263
266
269
270 if (previousStepSize > 0.)
271 { fGhostSafety -= previousStepSize; }
272 if (fGhostSafety < 0.) fGhostSafety = 0.0;
273
274 if (currentMinimumStep <= fGhostSafety && currentMinimumStep > 0.)
275 {
276
277 returnedStep = currentMinimumStep;
278 fOnBoundary = false;
279 proposedSafety = fGhostSafety - currentMinimumStep;
281 }
282 else
283 {
285 returnedStep
286 = fPathFinder->
ComputeStep(fFieldTrack,currentMinimumStep,fNavigatorID,
290 {
291 fOnBoundary = false;
292 fGhostSafety = fGhostNavigator->
ComputeSafety(endTrack.GetPosition());
293 }
294 else
295 {
296 fOnBoundary = true;
297 }
298 proposedSafety = fGhostSafety;
301 }
303 returnedStep *= (1.0 + 1.0e-9);
304 }
305 eLim = eLimited;
306 }
307
308 if(iParallelWorld==nParallelWorlds) fNavIDHyp = 0;
310 return returnedStep;
311}
@ NotCandidateForSelection
static void Update(G4FieldTrack *, const G4Track *)
virtual G4double ComputeSafety(const G4ThreeVector &globalpoint, const G4double pProposedMaxLength=DBL_MAX, const G4bool keepState=true)
G4double ComputeStep(const G4FieldTrack &pFieldTrack, G4double pCurrentProposedStepLength, G4int navigatorId, G4int stepNo, G4double &pNewSafety, ELimited &limitedStep, G4FieldTrack &EndState, G4VPhysicalVolume *currentVolume)
G4VPhysicalVolume * GetVolume() const
G4int GetCurrentStepNumber() const