51 const G4Track& track, G4double ,
52 G4ForceCondition* condition)
58 *condition = NotForced;
59 G4double proposedStep = DBL_MAX;
64 track.GetVolume()->GetLogicalVolume()->GetUserLimits());
67 (
TG4Limits*)track.GetVolume()->GetLogicalVolume()->GetUserLimits();
70 if (!limits)
return proposedStep;
75 if (trackInformation && trackInformation->
IsStop()) {
81 if (track.GetKineticEnergy() <= minEkine)
return 0.;
85 (limits->GetUserMaxTrackLength(track) - track.GetTrackLength());
86 if (proposedStep < 0.)
return 0.;
89 G4double tlimit = limits->GetUserMaxTime(track);
90 if (tlimit < DBL_MAX) {
91 G4double beta = (track.GetDynamicParticle()->GetTotalMomentum()) /
92 (track.GetTotalEnergy());
93 G4double dTime = (tlimit - track.GetGlobalTime());
94 G4double temp = beta * c_light * dTime;
98 if (proposedStep > temp) {
105 G4double rmin = limits->GetUserMinRange(track);
106 if (rmin > DBL_MIN) {
108 if ((particle->GetPDGCharge() != 0.) && (particle->GetPDGMass() > 0.0)) {
109 G4double ekin = track.GetKineticEnergy();
110 const G4MaterialCutsCouple* couple = track.GetMaterialCutsCouple();
112 G4double temp = rangeNow - rmin;
116 if (proposedStep > temp) {