89{
92
94 pMolConfA->GetDiffusionCoefficient() + pMolConfB->GetDiffusionCoefficient();
95
97 {
99 exceptionDescription << "The total diffusion coefficient for : "
100 << pMolConfA->GetName() << " and "
101 << pMolConfB->GetName() << " is null ";
103 "::GetTimeToEncounter()",
105 exceptionDescription);
106 }
107
109 pMolConfA, pMolConfB);
112 G4double SmoluchowskiRadius = reactionData->GetEffectiveReactionRadius();
113
114 if(distance == 0 || distance < SmoluchowskiRadius)
115 {
117 exceptionDescription << "distance = " << distance << " is uncorrected with "
118 << " Reff = " << SmoluchowskiRadius
119 << " for : " << pMolConfA->GetName() << " and "
120 << pMolConfB->GetName();
122 "::GetTimeToEncounter()",
124 exceptionDescription);
125 }
126 else
127 {
128 G4double Winf = SmoluchowskiRadius / distance;
132 if(Winf > 0 && U < Winf)
133 {
135 if(erfcIn != 0)
136 {
138 (distance - SmoluchowskiRadius) / erfcIn;
139 irt_1 = (1.0 / (4 *
D)) * d * d;
140 }
141 }
142
143 if(reactionData->GetReactionType() == 0)
144 {
145 return irt_1;
146 }
147
148 if(irt_1 < 0)
149 {
150 return irt_1;
151 }
152 else
153 {
154 G4double kdif = 4 * CLHEP::pi *
D * SmoluchowskiRadius * Avogadro;
155
156 if(pMolConfA == pMolConfB)
157 {
158 kdif /= 2;
159 }
162 if(sumOfk != 0)
163 {
164 G4double rateFactor = kact / sumOfk;
166 {
167 return -1.0 * ps;
168 }
169 G4double Y = std::abs(G4RandGauss::shoot(0.0, std::sqrt(2)));
170
172 {
174 }
175 G4double f = X * SmoluchowskiRadius * kdif / sumOfk;
177 return irt_1 + irt_2;
178 }
179 }
180 }
181 return -1.0 * ps;
182}
G4double D(G4double temp)
G4double Y(G4double density)
G4double G4Log(G4double x)
G4Molecule * GetMolecule(const G4Track &track)
G4double GetObservedReactionRateConstant() const
static G4DNAMolecularReactionTable * Instance()
static G4double erfcInv(G4double x)
static G4double GetKact(const G4double &obs, const G4double &dif)
const G4MolecularConfiguration * GetMolecularConfiguration() const
const G4ThreeVector & GetPosition() const