53template<
typename MODEL>
69template<
typename MODEL>
77template<
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);
124template<
typename MODEL>
133 if(fVerboseLevel > 1)
134 G4cout <<
"Calling CrossSectionPerVolume() of G4DNAOneStepThermalizationModel"
138 if(ekin > HighEnergyLimit()){
144 if(waterDensity!= 0.0){
151template<
typename MODEL>
153 return MODEL::GetRmean(k);
159template<
typename MODEL>
163 return MODEL::GetPenetration(k, displacement);
167template<
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);
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4GLOB_DLL std::ostream G4cout
void CreateSolvatedElectron(const G4Track *, G4ThreeVector *pFinalPosition=nullptr)
static G4DNAChemistryManager * Instance()
static G4bool IsActivated()
static G4DNAMolecularMaterial * Instance()
G4double ExcitationEnergy(G4int level)
G4double GetKineticEnergy() const
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
G4VPhysicalVolume * GetWorldVolume() const
const G4String & GetParticleName() const
G4ParticleChangeForGamma * fpParticleChangeForGamma
const std::vector< G4double > * fpWaterDensity
virtual ~G4TDNAOneStepThermalizationModel()
void GetPenetration(G4double energy, G4ThreeVector &displacement)
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
virtual G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax)
double GetRmean(double energy)
G4TDNAOneStepThermalizationModel(const G4ParticleDefinition *p=0, const G4String &nam="DNAOneStepThermalizationModel")
const G4ThreeVector & GetPosition() const
const G4VTouchable * GetTouchable() const
static G4TransportationManager * GetTransportationManager()
void SetHighEnergyLimit(G4double)
void SetLowEnergyLimit(G4double)