54 template<
typename MODEL>
71 template<
typename MODEL>
83 template<
typename MODEL>
90 G4cout <<
"Calling G4DNAOneStepThermalizationModel::Initialise()"
96 errMsg <<
"G4DNAOneStepThermalizationModel can only be applied "
98 G4Exception(
"G4DNAOneStepThermalizationModel::CrossSectionPerVolume",
99 "G4DNAOneStepThermalizationModel001",
106 fIsInitialised =
true;
107 fParticleChangeForGamma = GetParticleChangeForGamma();
112 GetNavigatorForTracking();
119 fNavigator->SetWorldVolume(world);
130 template<
typename MODEL>
139 if(fVerboseLevel > 1)
140 G4cout <<
"Calling CrossSectionPerVolume() of G4DNAOneStepThermalizationModel"
144 if(ekin > HighEnergyLimit()){
150 if(waterDensity!= 0.0){
157 template<
typename MODEL>
159 return MODEL::GetRmean(k);
165 template<
typename MODEL>
169 return MODEL::GetPenetration(k, displacement);
173 template<
typename MODEL>
183 G4cout <<
"Calling SampleSecondaries() of G4DNAOneStepThermalizationModel"
189 if (k <= HighEnergyLimit())
191 fParticleChangeForGamma->ProposeTrackStatus(
fStopAndKill);
192 fParticleChangeForGamma->ProposeLocalEnergyDeposit(k);
197 GetPenetration(k, displacement);
200 const G4Track * theIncomingTrack =
201 fParticleChangeForGamma->GetCurrentTrack();
204 fNavigator->SetWorldVolume(theIncomingTrack->
GetTouchable()->
208 double displacementMag = displacement.
mag();
214 double mag_displacement = displacement.
mag();
215 G4ThreeVector displacement_direction = displacement/mag_displacement;
232 fNavigator->ResetHierarchyAndLocate(theIncomingTrack->
GetPosition(),
237 fNavigator->ComputeStep(theIncomingTrack->
GetPosition(),
238 displacement/displacementMag,
242 if(safety <= displacementMag)
245 + (displacement/displacementMag)*safety*0.80;
251 fParticleChangeForGamma->SetProposedKineticEnergy(25.e-3*
eV);
G4double ExcitationEnergy(G4int level)
std::ostringstream G4ExceptionDescription
G4double GetKineticEnergy() const
const std::vector< G4double > * fpWaterDensity
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
void CreateSolvatedElectron(const G4Track *, G4ThreeVector *finalPosition=0)
virtual ~G4TDNAOneStepThermalizationModel()
const G4ThreeVector & GetPosition() const
G4TDNAOneStepThermalizationModel(const G4ParticleDefinition *p=0, const G4String &nam="DNAOneStepThermalizationModel")
const G4String & GetParticleName() const
void SetHighEnergyLimit(G4double)
G4GLOB_DLL std::ostream G4cout
void GetPenetration(G4double energy, G4ThreeVector &displacement)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
static constexpr double eV
static G4bool IsActivated()
G4ParticleChangeForGamma * fParticleChangeForGamma
virtual G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
static G4TransportationManager * GetTransportationManager()
static G4DNAChemistryManager * Instance()
static G4DNAMolecularMaterial * Instance()
const G4VTouchable * GetTouchable() const
double GetRmean(double energy)
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
void SetLowEnergyLimit(G4double)
G4VPhysicalVolume * GetWorldVolume() const