63 if(reactionData ==
nullptr)
66 exceptionDescription <<
"No reactionData"
67 <<
" for : " << pMol1->
GetName() <<
" and "
70 "::GetReactionRadius()",
72 exceptionDescription);
76 return reactionData->GetEffectiveReactionRadius();
82 auto pMol1 = (*fpReactionData)[i]->GetReactant1();
83 auto pMol2 = (*fpReactionData)[i]->GetReactant2();
94 pMolConfA->GetDiffusionCoefficient() + pMolConfB->GetDiffusionCoefficient();
99 exceptionDescription <<
"The total diffusion coefficient for : "
100 << pMolConfA->GetName() <<
" and "
101 << pMolConfB->GetName() <<
" is null ";
103 "::GetTimeToEncounter()",
105 exceptionDescription);
109 pMolConfA, pMolConfB);
112 G4double SmoluchowskiRadius = reactionData->GetEffectiveReactionRadius();
114 if(distance == 0 || distance < SmoluchowskiRadius)
117 exceptionDescription <<
"distance = " << distance <<
" is uncorrected with "
118 <<
" Reff = " << SmoluchowskiRadius
119 <<
" for : " << pMolConfA->GetName() <<
" and "
120 << pMolConfB->GetName();
122 "::GetTimeToEncounter()",
124 exceptionDescription);
128 G4double Winf = SmoluchowskiRadius / distance;
132 if(Winf > 0 && U < Winf)
138 (distance - SmoluchowskiRadius) / erfcIn;
139 irt_1 = (1.0 / (4 *
D)) * d * d;
143 if(reactionData->GetReactionType() == 0)
154 G4double kdif = 4 * CLHEP::pi *
D * SmoluchowskiRadius * Avogadro;
156 if(pMolConfA == pMolConfB)
164 G4double rateFactor = kact / sumOfk;
169 G4double Y = std::abs(G4RandGauss::shoot(0.0, std::sqrt(2)));
175 G4double f = X * SmoluchowskiRadius * kdif / sumOfk;
177 return irt_1 + irt_2;
G4double D(G4double temp)
G4double Y(G4double density)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4double G4Log(G4double x)
G4Molecule * GetMolecule(const G4Track &track)
G4double GetObservedReactionRateConstant() const
Data * GetReactionData(Reactant *, Reactant *) const
static G4DNAMolecularReactionTable * Instance()
G4DiffusionControlledReactionModel()
G4double GetTimeToEncounter(const G4Track &trackA, const G4Track &trackB)
void InitialiseToPrint(const G4MolecularConfiguration *) override
~G4DiffusionControlledReactionModel() override
G4double GetReactionRadius(const G4MolecularConfiguration *, const G4MolecularConfiguration *) override
void Initialise(const G4MolecularConfiguration *, const G4Track &) override
static G4double erfcInv(G4double x)
static G4double GetKact(const G4double &obs, const G4double &dif)
const G4String & GetName() const
const G4MolecularConfiguration * GetMolecularConfiguration() const
const G4ThreeVector & GetPosition() const
const G4DNAMolecularReactionTable * fpReactionTable