53 template<
typename MODEL>
69 template<
typename MODEL>
77 template<
typename MODEL>
84 G4cout <<
"Calling G4DNAOneStepThermalizationModel::Initialise()"
90 errMsg <<
"G4DNAOneStepThermalizationModel can only be applied "
92 G4Exception(
"G4DNAOneStepThermalizationModel::CrossSectionPerVolume",
93 "G4DNAOneStepThermalizationModel001",
100 fIsInitialised =
true;
101 fpParticleChangeForGamma = GetParticleChangeForGamma();
106 GetNavigatorForTracking();
113 fpNavigator->SetWorldVolume(
world);
124 template<
typename MODEL>
133 if(fVerboseLevel > 1)
134 G4cout <<
"Calling CrossSectionPerVolume() of G4DNAOneStepThermalizationModel"
138 if(ekin > HighEnergyLimit()){
144 if(waterDensity!= 0.0){
151 template<
typename MODEL>
153 return MODEL::GetRmean(k);
159 template<
typename MODEL>
163 return MODEL::GetPenetration(k, displacement);
167 template<
typename MODEL>
177 G4cout <<
"Calling SampleSecondaries() of G4DNAOneStepThermalizationModel"
183 if (k <= HighEnergyLimit())
185 fpParticleChangeForGamma->ProposeTrackStatus(
fStopAndKill);
186 fpParticleChangeForGamma->ProposeLocalEnergyDeposit(k);
191 GetPenetration(k, displacement);
194 const G4Track * theIncomingTrack =
195 fpParticleChangeForGamma->GetCurrentTrack();
198 fpNavigator->SetWorldVolume(theIncomingTrack->
GetTouchable()->
202 double displacementMag = displacement.
mag();
208 double mag_displacement = displacement.
mag();
209 G4ThreeVector displacement_direction = displacement/mag_displacement;
226 fpNavigator->ResetHierarchyAndLocate(theIncomingTrack->
GetPosition(),
231 fpNavigator->ComputeStep(theIncomingTrack->
GetPosition(),
232 displacement/displacementMag,
236 if(safety <= displacementMag)
239 + (displacement/displacementMag)*safety*0.80;
245 fpParticleChangeForGamma->SetProposedKineticEnergy(25.
e-3*
eV);