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.)));
134 fIsInitialized =
false;
136 fpMoleculeDensity = 0;
151 return &fParticleChange;
165 void G4DNAElectronHoleRecombination::MakeReaction(
const G4Track& track)
169 double random = state->fSampleProba;
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(),
221 G4bool G4DNAElectronHoleRecombination::FindReactant(
const G4Track& track)
229 const std::vector<double>* densityTable =
234 (
g/(1e-2*
m*1e-2*
m*1e-2*
m) );
247 e_aq.GetMoleculeID(),
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);
392 if(FindReactant(track))
410 if(FindReactant(track))
void SetTrackStatus(const G4TrackStatus aTrackStatus)
static double onsager_constant
const std::vector< double > * GetDensityTableFor(const G4Material *) const
static G4Electron_aq * Definition()
virtual void ClearNumberOfInteractionLengthLeft()
Identical to G4VRestDiscreteProcess with dependency from G4VITProcess.
G4MoleculeDefinition * GetMoleculeDefinition(const G4String &, bool mustExist=true)
virtual ~G4DNAElectronHoleRecombination()
static G4H2O * Definition()
void SetProbability(G4double)
void AddDecayChannel(const G4MolecularConfiguration *molConf, const G4MolecularDissociationChannel *channel)
void StartTracking(G4Track *)
const G4ThreeVector & GetPosition() const
static G4ITFinder * Instance()
static const G4double eps
double B(double temperature)
G4KDTreeResultHandle FindNearestInRange(const T *point, int key, G4double)
virtual G4bool IsApplicable(const G4ParticleDefinition &)
const G4String & GetParticleName() const
void SetInstantiateProcessState(G4bool flag)
void ChangeConfigurationToLabel(const G4String &label)
virtual void ClearInteractionTimeLeft()
G4MolecularConfiguration * NewConfiguration(const G4String &excitedStateLabel)
virtual void StartTracking(G4Track *)
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
static constexpr double m
void AddProduct(const G4Molecule *, G4double=0)
virtual G4VParticleChange * AtRestDoIt(const G4Track &, const G4Step &)
static G4MoleculeTable * Instance()
virtual void StartTracking(G4Track *)
void SetProcessSubType(G4int)
G4shared_ptr< G4ProcessState > fpState
G4bool enablePostStepDoIt
G4double GetGlobalTime() const
G4Molecule * GetMolecule(const G4Track &track)
static G4VMoleculeCounter * Instance()
G4Material * GetMaterial() const
virtual G4double GetMeanFreePath(const G4Track &aTrack, G4double previousStepSize, G4ForceCondition *condition)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
virtual void Initialize(const G4Track &)
static G4DNAMolecularMaterial * Instance()
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
G4VParticleChange * pParticleChange
virtual G4double GetMeanLifeTime(const G4Track &aTrack, G4ForceCondition *condition)
G4double GetTemperature() const
G4bool enableAlongStepDoIt
static constexpr double pi
void ProposeTrackStatus(G4TrackStatus status)
void SetDisplacementType(DisplacementType)
double epsilon(double density, double temperature)
G4DNAElectronHoleRecombination()
G4MolecularConfiguration * GetConfiguration(const G4String &, bool mustExist=true)