55template<
typename MODEL>
71template<
typename MODEL>
76template<
typename MODEL>
83 G4cout <<
"Calling G4DNAOneStepThermalizationModel::Initialise()"
89 errMsg <<
"G4DNAOneStepThermalizationModel can only be applied "
91 G4Exception(
"G4DNAOneStepThermalizationModel::CrossSectionPerVolume",
92 "G4DNAOneStepThermalizationModel001",
99 fIsInitialised =
true;
100 fpParticleChangeForGamma = GetParticleChangeForGamma();
105 GetNavigatorForTracking();
107 fpNavigator = std::make_unique<G4Navigator>();
109 if(navigator !=
nullptr){
111 if(world !=
nullptr){
112 fpNavigator->SetWorldVolume(world);
123template<
typename MODEL>
132 if(fVerboseLevel > 1)
133 G4cout <<
"Calling CrossSectionPerVolume() of G4DNAOneStepThermalizationModel"
137 if(ekin > HighEnergyLimit()){
143 if(waterDensity!= 0.0){
150template<
typename MODEL>
152 return MODEL::GetRmean(k);
158template<
typename MODEL>
162 return MODEL::GetPenetration(k, displacement);
166template<
typename MODEL>
176 G4cout <<
"Calling SampleSecondaries() of G4DNAOneStepThermalizationModel"
182 if (k <= HighEnergyLimit())
184 fpParticleChangeForGamma->ProposeTrackStatus(
fStopAndKill);
185 fpParticleChangeForGamma->ProposeLocalEnergyDeposit(k);
190 GetPenetration(k, displacement);
193 const G4Track * theIncomingTrack =
194 fpParticleChangeForGamma->GetCurrentTrack();
197 fpNavigator->SetWorldVolume(theIncomingTrack->
GetTouchable()->
201 double displacementMag = displacement.
mag();
207 double mag_displacement = displacement.
mag();
208 G4ThreeVector displacement_direction = displacement/mag_displacement;
225 fpNavigator->ResetHierarchyAndLocate(theIncomingTrack->
GetPosition(),
230 fpNavigator->ComputeStep(theIncomingTrack->
GetPosition(),
231 displacement/displacementMag,
235 if(safety <= displacementMag)
238 + (displacement/displacementMag)*safety*0.80;
244 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
std::size_t GetIndex() const
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
G4VPhysicalVolume * GetWorldVolume() const
const G4String & GetParticleName() const
G4ParticleChangeForGamma * fpParticleChangeForGamma
const std::vector< G4double > * fpWaterDensity
void GetPenetration(G4double energy, G4ThreeVector &displacement)
~G4TDNAOneStepThermalizationModel() override
void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
G4TDNAOneStepThermalizationModel(const G4ParticleDefinition *p=nullptr, const G4String &nam="DNAOneStepThermalizationModel")
double GetRmean(double energy)
G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax) override
const G4ThreeVector & GetPosition() const
const G4VTouchable * GetTouchable() const
static G4TransportationManager * GetTransportationManager()
void SetHighEnergyLimit(G4double)
void SetLowEnergyLimit(G4double)