591 G4cout <<
" G4DNABrownianTransportation::AlongStepGetPhysicalInteractionLength - track ID: "
600 track, previousStepSize, currentMinimumStep, currentSafety,
603 if(geometryStepLength==0)
606 if(
State(fGeometryLimitedStep))
612 State(fCurrentTouchableHandle)->GetHistory());
624 State(fCurrentTouchableHandle) = newTouchable;
639 track, previousStepSize, currentMinimumStep, currentSafety,
681 State(fComputeLastPosition) =
false;
682 State(fTimeStepReachedLimit) =
false;
684 if (
State(fGeometryLimitedStep))
694 State(theInteractionTimeLeft) = (geometryStepLength * geometryStepLength)
695 / (diffusionCoefficient);
699 State(theInteractionTimeLeft) = (currentSafety * currentSafety)
700 / (diffusionCoefficient);
707 State(fComputeLastPosition) =
true;
714 State(theInteractionTimeLeft) = 1 / (4 * diffusionCoefficient)
715 * pow(geometryStepLength /
InvErfc(
State(fRandomNumber)),2);
717 State(fTransportEndPosition) = geometryStepLength*
729 if (
State(theInteractionTimeLeft) < minTimeStepAllowed)
731 State(theInteractionTimeLeft) = minTimeStepAllowed;
732 State(fTimeStepReachedLimit) =
true;
733 State(fComputeLastPosition) =
true;
739 State(fTimeStepReachedLimit) =
true;
743 State(fComputeLastPosition) =
true;
747 State(fCandidateEndGlobalTime) =
750 State(fEndGlobalTimeComputed) =
true;
752 State(fPathLengthWasCorrected) =
false;
757 geometryStepLength = 2
758 * sqrt(diffusionCoefficient *
State(theInteractionTimeLeft))
760 State(fPathLengthWasCorrected) =
true;
762 State(fTransportEndPosition) = geometryStepLength*
771 <<
"G4DNABrownianTransportation::AlongStepGetPhysicalInteractionLength = "
783 return geometryStepLength;
virtual void UpdateYourself(G4VPhysicalVolume *pPhysVol, const G4NavigationHistory *history=0)
static G4VScheduler * Instance()
const G4ThreeVector & GetPosition() const
G4double GetDiffusionCoefficient() const
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
virtual G4double AlongStepGetPhysicalInteractionLength(const G4Track &track, G4double, G4double currentMinimumStep, G4double ¤tSafety, G4GPILSelection *selection)
static double InvErfc(double x)
G4double fInternalMinTimeStep
G4ITNavigator * fLinearNavigator
G4bool fUseMaximumTimeBeforeReachingBoundary
G4GLOB_DLL std::ostream G4cout
const G4String & GetName() const
G4double GetGlobalTime() const
G4Molecule * GetMolecule(const G4Track &track)
const G4ThreeVector & GetMomentumDirection() const
virtual G4VPhysicalVolume * GetVolume(G4int depth=0) const
virtual double GetLimitingTimeStep() const
G4bool fUseSchedulerMinTimeSteps
G4VPhysicalVolume * GetVolume() const
static double InvErf(double x)