84{
87
90
92 {
94 exceptionDescription << "The total diffusion coefficient for : "
95 << pMolConfA->GetName() << " and "
96 << pMolConfB->GetName() << " is null ";
98 "::GetTimeToEncounter()",
100 exceptionDescription);
101 }
102
104 pMolConfA, pMolConfB);
107 G4double SmoluchowskiRadius = reactionData->GetEffectiveReactionRadius();
108
109 if(distance == 0 || distance < SmoluchowskiRadius)
110 {
112 exceptionDescription << "distance = " << distance << " is uncorrected with "
113 << " Reff = " << SmoluchowskiRadius
114 << " for : " << pMolConfA->GetName() << " and "
115 << pMolConfB->GetName();
117 "::GetTimeToEncounter()",
119 exceptionDescription);
120 }
121 else
122 {
123 G4double Winf = SmoluchowskiRadius / distance;
127 if(Winf > 0 && U < Winf)
128 {
130 if(erfcIn != 0)
131 {
133 (distance - SmoluchowskiRadius) / erfcIn;
134 irt_1 = (1.0 / (4 *
D)) * d * d;
135 }
136 }
137
138 if(reactionData->GetReactionType() == 0)
139 {
140 return irt_1;
141 }
142
143 if(irt_1 < 0)
144 {
145 return irt_1;
146 }
147
148 G4double kdif = 4 * CLHEP::pi *
D * SmoluchowskiRadius * Avogadro;
149
150 if(pMolConfA == pMolConfB)
151 {
152 kdif /= 2;
153 }
156 if(sumOfk != 0)
157 {
158 G4double rateFactor = kact / sumOfk;
160 {
161 return -1.0 * ps;
162 }
163 G4double Y = std::abs(G4RandGauss::shoot(0.0, std::sqrt(2)));
164
166 {
168 }
169 G4double f = X * SmoluchowskiRadius * kdif / sumOfk;
171 return irt_1 + irt_2;
172 }
173 }
174 return -1.0 * ps;
175}
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)
G4double GetDiffusionCoefficient() const
const G4MolecularConfiguration * GetMolecularConfiguration() const
const G4ThreeVector & GetPosition() const