55 double Y(
double density)
57 return 1. / (1. + 0.0012 / (density * density));
60 double A(
double temperature)
62 double temp_inverse = 1 / temperature;
64 + 642.0 * temp_inverse
65 - 1.167e5 * temp_inverse * temp_inverse
66 + 9.190e6 * temp_inverse * temp_inverse * temp_inverse;
69 double B(
double temperature)
71 double temp_inverse = 1 / temperature;
73 + 275.4 * temp_inverse
74 + 0.3245e5 * temp_inverse * temp_inverse;
79 double temp_inverse = 1 / temp;
82 - 11.41 * temp_inverse
83 - 35260.0 * temp_inverse * temp_inverse;
88 return A(temp) -
B(temp) - 3;
96 double epsilon(
double density,
double temperature)
98 return 1 +
G4Exp(std::log(10.)*
100 (
C(temperature) + (
S(temperature) - 1)*std::log(density)/std::log(10.))
101 +
D(temperature) + std::log(density)/std::log(10.)));
170 std::vector<ReactionProfile>& reactants = state->
fReactants;
172 G4Track* selected_reactant = 0;
174 for(
size_t i = 0; i < reactants.size(); ++i)
176 if(reactants[i].fElectron->GetTrackStatus() !=
fAlive)
continue;
177 if(reactants[i].fProbability > random)
179 selected_reactant = reactants[i].fElectron;
187 if(selected_reactant)
194 RemoveAMoleculeAtTime(
GetMolecule(track)->GetMolecularConfiguration(),
201 AddAMoleculeAtTime(
GetMolecule(track)->GetMolecularConfiguration(),
229 const std::vector<double>* densityTable =
248 10. * onsager_radius);
253 if(results == 0 || results->GetSize() == 0)
262 std::vector<ReactionProfile>& reactants = state->
fReactants;
265 reactants.resize(results->GetSize());
267 for(
size_t i = 0; results->End() ==
false; results->Next(), ++i)
269 reactants[i].fElectron = results->GetItem<
G4IT>()->GetTrack();
270 reactants[i].fDistance = std::sqrt(results->GetDistanceSqr());
272 if(reactants[i].fDistance != 0)
274 reactants[i].fProbability = 1.
275 -
G4Exp(-onsager_radius / reactants[i].fDistance);
279 reactants[i].fProbability = 1.;
286 if(results->GetSize() != 0 && reactants.empty())
292 if(reactants.empty())
return false;
300 if(reactants[0].fProbability > state->
fSampleProba)
return true;
329 double probaRemaining = 1.;
347 probaRemaining -= proba;
349 B1A1_DissociationDecay);
367 probaRemaining -= proba;
369 A1B1_DissociationDecay);
static G4MoleculeTable * Instance()
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
virtual ~G4DNAElectronHoleRecombination()
static double onsager_constant
virtual G4VParticleChange * AtRestDoIt(const G4Track &, const G4Step &)
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
void SetDisplacementType(DisplacementType)
G4DNAElectronHoleRecombination()
G4MoleculeDefinition * GetMoleculeDefinition(const G4String &, bool mustExist=true)
void AddProduct(const G4Molecule *, G4double=0)
void SetInstantiateProcessState(G4bool flag)
const G4String & GetParticleName() const
static G4Electron_aq * Definition()
void StartTracking(G4Track *)
void AddDecayChannel(const G4MolecularConfiguration *molConf, const G4MolecularDissociationChannel *channel)
G4shared_ptr< G4ProcessState > fpState
G4bool enablePostStepDoIt
static G4ITFinder * Instance()
static constexpr double epsilon0
G4MolecularConfiguration * NewConfiguration(const G4String &excitedStateLabel)
std::vector< ReactionProfile > fReactants
void MakeReaction(const G4Track &track)
void SetProbability(G4double)
static constexpr double g
virtual void ClearInteractionTimeLeft()
static constexpr double m
virtual void StartTracking(G4Track *)
G4VParticleChange * pParticleChange
virtual void Initialize(const G4Track &)
const std::vector< double > * GetDensityTableFor(const G4Material *) const
Retrieve a table of volumetric mass densities (mass per unit volume) in the G4 unit system for chosen...
G4ParticleChange fParticleChange
static G4DNAMolecularMaterial * Instance()
virtual G4double GetMeanFreePath(const G4Track &aTrack, G4double previousStepSize, G4ForceCondition *condition)
G4double GetGlobalTime() const
G4bool FindReactant(const G4Track &track)
double A(double temperature)
const G4ThreeVector & GetPosition() const
G4Material * GetMaterial() const
G4Molecule * GetMolecule(const G4Track &track)
virtual void StartTracking(G4Track *)
const std::vector< double > * fpMoleculeDensity
double epsilon(double density, double temperature)
void ChangeConfigurationToLabel(const G4String &label)
Identical to G4VRestDiscreteProcess with dependency from G4VITProcess.
static constexpr double k_Boltzmann
virtual void ClearNumberOfInteractionLengthLeft()
virtual G4double GetMeanLifeTime(const G4Track &aTrack, G4ForceCondition *condition)
void SetProcessSubType(G4int)
static G4H2O * Definition()
G4GLOB_DLL std::ostream G4cout
G4int GetMoleculeID() const
G4MolecularConfiguration * GetConfiguration(const G4String &, bool mustExist=true)
void SetTrackStatus(const G4TrackStatus aTrackStatus)
static constexpr double pi
static const G4double eps
G4bool enableAlongStepDoIt
static constexpr double e_squared
virtual G4bool IsApplicable(const G4ParticleDefinition &)
double B(double temperature)
void ProposeTrackStatus(G4TrackStatus status)
static G4VMoleculeCounter * Instance()
G4double GetTemperature() const
G4KDTreeResultHandle FindNearestInRange(const T *point, int key, G4double)