Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry_option3.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // ********************************************************************
 25 //
 26 /*
 27  * G4EmDNAChemistry_option3.cc
 28  *
 29  *  Created on: Jul 23, 2019
 30  *      Author: W. G. Shin
 31  *              J. Ramos-Mendez and B. Faddegon
 32  *  Updated: Hoang Tran : add SBS and IRT_syn models
 33 */
 34 
 35 #include "G4EmDNAChemistry_option3.hh"
 36 #include "G4SystemOfUnits.hh"
 37 #include "G4DNAWaterDissociationDisplacer.hh"
 38 #include "G4DNAChemistryManager.hh"
 39 #include "G4ProcessManager.hh"
 40 // *** Processes and models for Geant4-DNA
 41 
 42 #include "G4DNAElectronSolvation.hh"
 43 
 44 #include "G4DNAVibExcitation.hh"
 45 #include "G4DNASancheExcitationModel.hh"
 46 #include "G4DNAMolecularDissociation.hh"
 47 #include "G4DNABrownianTransportation.hh"
 48 #include "G4DNAMolecularReactionTable.hh"
 49 #include "G4DNAMolecularStepByStepModel.hh"
 50 #include "G4DNAMolecularIRTModel.hh"
 51 #include "G4DNAIndependentReactionTimeModel.hh"
 52 #include "G4VDNAReactionModel.hh"
 53 #include "G4DNAIRT.hh"
 54 #include "G4DNAElectronHoleRecombination.hh"
 55 // particles
 56 #include "G4Electron.hh"
 57 #include "G4MoleculeTable.hh"
 58 #include "G4H2O.hh"
 59 #include "G4PhysicsListHelper.hh"
 60 
 61 /****/
 62 #include "G4DNAMoleculeEncounterStepper.hh"
 63 #include "G4ProcessTable.hh"
 64 #include "G4MolecularConfiguration.hh"
 65 /****/
 66 // factory
 67 #include "G4PhysicsConstructorFactory.hh"
 68 #include "G4ChemDissociationChannels_option1.hh"
 69 //Parameter
 70 #include "G4EmParameters.hh"
 71 
 72 G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry_option3);
 73 
 74 G4EmDNAChemistry_option3::G4EmDNAChemistry_option3() :
 75     G4VUserChemistryList(true)
 76 {
 77   G4DNAChemistryManager::Instance()->SetChemistryList(this);
 78 }
 79 
 80 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 81 
 82 void G4EmDNAChemistry_option3::ConstructMolecule()
 83 {
 84   G4ChemDissociationChannels_option1::ConstructMolecule();
 85 }
 86 
 87 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 88 
 89 void G4EmDNAChemistry_option3::ConstructDissociationChannels()
 90 {
 91   G4ChemDissociationChannels_option1::ConstructDissociationChannels();
 92 }
 93 
 94 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 95 
 96 void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTable*
 97                                               theReactionTable)
 98 {
 99   auto model = G4EmParameters::Instance()->GetTimeStepModel();
100   //-----------------------------------
101   //Get the molecular configuration
102   G4MolecularConfiguration* OH =
103    G4MoleculeTable::Instance()->GetConfiguration("°OH");
104   G4MolecularConfiguration* OHm =
105    G4MoleculeTable::Instance()->GetConfiguration("OHm");
106   G4MolecularConfiguration* e_aq =
107    G4MoleculeTable::Instance()->GetConfiguration("e_aq");
108   G4MolecularConfiguration* H2 =
109    G4MoleculeTable::Instance()->GetConfiguration("H2");
110   G4MolecularConfiguration* H3Op =
111    G4MoleculeTable::Instance()->GetConfiguration("H3Op");
112   G4MolecularConfiguration* H =
113    G4MoleculeTable::Instance()->GetConfiguration("H");
114   G4MolecularConfiguration* H2O2 =
115    G4MoleculeTable::Instance()->GetConfiguration("H2O2");
116   G4MolecularConfiguration* HO2 =
117    G4MoleculeTable::Instance()->GetConfiguration("HO2°");
118   G4MolecularConfiguration* HO2m =
119    G4MoleculeTable::Instance()->GetConfiguration("HO2m");
120   G4MolecularConfiguration* O =
121    G4MoleculeTable::Instance()->GetConfiguration("Oxy");
122   G4MolecularConfiguration* Om =
123    G4MoleculeTable::Instance()->GetConfiguration("Om");
124   G4MolecularConfiguration* O2 =
125    G4MoleculeTable::Instance()->GetConfiguration("O2");
126   G4MolecularConfiguration* O2m =
127    G4MoleculeTable::Instance()->GetConfiguration("O2m");
128   G4MolecularConfiguration* O3 =
129    G4MoleculeTable::Instance()->GetConfiguration("O3");
130   G4MolecularConfiguration* O3m =
131    G4MoleculeTable::Instance()->GetConfiguration("O3m");
132 
133   G4MolecularConfiguration* H2OB =
134    G4MoleculeTable::Instance()->GetConfiguration("H2O(B)");
135   G4MolecularConfiguration* H3OpB =
136    G4MoleculeTable::Instance()->GetConfiguration("H3Op(B)");
137   G4MolecularConfiguration* OHmB =
138    G4MoleculeTable::Instance()->GetConfiguration("OHm(B)");
139 
140   G4MolecularConfiguration* None =
141    G4MoleculeTable::Instance()->GetConfiguration("NoneM");
142 
143   // Type I //
144   //------------------------------------------------------------------
145   // *H + *H -> H2
146   G4DNAMolecularReactionData* reactionData = new G4DNAMolecularReactionData(
147       0.503e10 * (1e-3 * m3 / (mole * s)), H, H);
148   reactionData->AddProduct(H2);
149   theReactionTable->SetReaction(reactionData);
150   //------------------------------------------------------------------
151   // e_aq + H* + H2O -> H2 + OH-
152   reactionData = new G4DNAMolecularReactionData(
153       2.50e10 * (1e-3 * m3 / (mole * s)), e_aq, H);
154   reactionData->AddProduct(OHm);
155   reactionData->AddProduct(H2);
156   theReactionTable->SetReaction(reactionData);
157 
158   // H + O(3p) -> OH
159   reactionData = new G4DNAMolecularReactionData(
160       2.02e10 * (1e-3 * m3 / (mole * s)), H, O);
161   reactionData->AddProduct(OH);
162   theReactionTable->SetReaction(reactionData);
163   //------------------------------------------------------------------
164   // H + O- -> OH-
165   reactionData = new G4DNAMolecularReactionData(
166       2.00e10 * (1e-3 * m3 / (mole * s)), H, Om);
167   reactionData->AddProduct(OHm);
168   theReactionTable->SetReaction(reactionData);
169   //------------------------------------------------------------------
170   // OH + O(3p) -> HO2
171   reactionData = new G4DNAMolecularReactionData(
172       2.02e10 * (1e-3 * m3 / (mole * s)), OH, O);
173   reactionData->AddProduct(HO2);
174   theReactionTable->SetReaction(reactionData);
175   //------------------------------------------------------------------
176   // HO2 + O(3p) -> O2
177   reactionData = new G4DNAMolecularReactionData(
178       2.02e10 * (1e-3 * m3 / (mole * s)), HO2, O);
179   reactionData->AddProduct(O2);
180   reactionData->AddProduct(OH);
181   theReactionTable->SetReaction(reactionData);
182   //------------------------------------------------------------------
183   // O(3p) + O(3p) -> O2
184   reactionData = new G4DNAMolecularReactionData(
185       2.20e10 * (1e-3 * m3 / (mole * s)), O, O);
186   reactionData->AddProduct(O2);
187   theReactionTable->SetReaction(reactionData);
188 
189   // Type III //
190   //------------------------------------------------------------------
191   // e_aq + e_aq + 2H2O -> H2 + 2OH-
192   reactionData = new G4DNAMolecularReactionData(
193       0.636e10 * (1e-3 * m3 / (mole * s)), e_aq, e_aq);
194   reactionData->AddProduct(OHm);
195   reactionData->AddProduct(OHm);
196   reactionData->AddProduct(H2);
197   theReactionTable->SetReaction(reactionData);
198   //------------------------------------------------------------------
199   // H3O+ + OH- -> 2H2O
200   reactionData = new G4DNAMolecularReactionData(
201       1.13e11 * (1e-3 * m3 / (mole * s)), H3Op, OHm);
202   theReactionTable->SetReaction(reactionData);
203   //------------------------------------------------------------------
204   // H3O+ + O3- -> OH + O2
205   reactionData = new G4DNAMolecularReactionData(
206       9.0e10 * (1e-3 * m3 / (mole * s)), H3Op, O3m);
207   reactionData->AddProduct(OH);
208   reactionData->AddProduct(O2);
209   theReactionTable->SetReaction(reactionData);
210 
211   // Type II //
212 
213   //------------------------------------------------------------------
214   // *OH + *H -> H2O
215   reactionData = new G4DNAMolecularReactionData(
216       1.55e10 * (1e-3 * m3 / (mole * s)), OH, H);
217   SetReactionType(reactionData,model);//partially diffusion-controlled
218   theReactionTable->SetReaction(reactionData);
219   //------------------------------------------------------------------
220   // H + H2O2 -> OH
221   reactionData = new G4DNAMolecularReactionData(
222       3.50e7 * (1e-3 * m3 / (mole * s)), H, H2O2);
223   reactionData->AddProduct(OH);
224   SetReactionType(reactionData,model);//partially diffusion-controlled
225   theReactionTable->SetReaction(reactionData);
226   //------------------------------------------------------------------
227   // H + OH- -> eaq-
228   reactionData = new G4DNAMolecularReactionData(
229       2.51e7 * (1e-3 * m3 / (mole * s)), H, OHm);
230   reactionData->AddProduct(e_aq);
231   SetReactionType(reactionData,model);//partially diffusion-controlled
232   theReactionTable->SetReaction(reactionData);
233   //------------------------------------------------------------------
234   // H + O2 -> HO2
235   reactionData = new G4DNAMolecularReactionData(
236       2.10e10 * (1e-3 * m3 / (mole * s)), H, O2);
237   reactionData->AddProduct(HO2);
238   SetReactionType(reactionData,model);//partially diffusion-controlled
239   theReactionTable->SetReaction(reactionData);
240   //------------------------------------------------------------------
241   // H + HO2 -> H2O2
242   reactionData = new G4DNAMolecularReactionData(
243       1.00e10 * (1e-3 * m3 / (mole * s)), H, HO2);
244   reactionData->AddProduct(H2O2);
245   SetReactionType(reactionData,model);//partially diffusion-controlled
246   theReactionTable->SetReaction(reactionData);
247   //------------------------------------------------------------------
248   // H + O2- -> HO2-
249   reactionData = new G4DNAMolecularReactionData(
250       1.00e10 * (1e-3 * m3 / (mole * s)), H, O2m);
251   reactionData->AddProduct(HO2m);
252   SetReactionType(reactionData,model);//partially diffusion-controlled
253   theReactionTable->SetReaction(reactionData);
254   //------------------------------------------------------------------
255   // *OH + *OH -> H2O2
256   reactionData = new G4DNAMolecularReactionData(
257       0.55e10 * (1e-3 * m3 / (mole * s)), OH, OH);
258   reactionData->AddProduct(H2O2);
259   SetReactionType(reactionData,model);//partially diffusion-controlled
260   theReactionTable->SetReaction(reactionData);
261   //------------------------------------------------------------------
262   // OH + H2O2 -> HO2
263   reactionData = new G4DNAMolecularReactionData(
264       2.88e7 * (1e-3 * m3 / (mole * s)), OH, H2O2);
265   reactionData->AddProduct(HO2);
266   SetReactionType(reactionData,model);//partially diffusion-controlled
267   theReactionTable->SetReaction(reactionData);
268   //------------------------------------------------------------------
269   // OH + H2 -> H
270   reactionData = new G4DNAMolecularReactionData(
271       3.28e7 * (1e-3 * m3 / (mole * s)), OH, H2);
272   reactionData->AddProduct(H);
273   SetReactionType(reactionData,model);//partially diffusion-controlled
274   theReactionTable->SetReaction(reactionData);
275   //------------------------------------------------------------------
276   // e_aq + *OH -> OH-
277   reactionData = new G4DNAMolecularReactionData(
278       2.95e10 * (1e-3 * m3 / (mole * s)), e_aq, OH);
279   reactionData->AddProduct(OHm);
280   SetReactionType(reactionData,model);//partially diffusion-controlled
281   theReactionTable->SetReaction(reactionData);
282   //------------------------------------------------------------------
283   // OH + OH- -> O-
284   reactionData = new G4DNAMolecularReactionData(
285       6.30e9 * (1e-3 * m3 / (mole * s)), OH, OHm);
286   reactionData->AddProduct(Om);
287   SetReactionType(reactionData,model);//partially diffusion-controlled
288   theReactionTable->SetReaction(reactionData);
289   //------------------------------------------------------------------
290   // OH + HO2 -> O2
291   reactionData = new G4DNAMolecularReactionData(
292       7.90e9 * (1e-3 * m3 / (mole * s)), OH, HO2);
293   reactionData->AddProduct(O2);
294   SetReactionType(reactionData,model);//partially diffusion-controlled
295   theReactionTable->SetReaction(reactionData);
296   //------------------------------------------------------------------
297   // OH + O2- -> O2 + OH-
298   reactionData = new G4DNAMolecularReactionData(
299       1.07e10 * (1e-3 * m3 / (mole * s)), OH, O2m);
300   reactionData->AddProduct(O2);
301   reactionData->AddProduct(OHm);
302   SetReactionType(reactionData,model);//partially diffusion-controlled
303   theReactionTable->SetReaction(reactionData);
304   //------------------------------------------------------------------
305   // OH + HO2- -> HO2 + OH-
306   reactionData = new G4DNAMolecularReactionData(
307       8.32e9 * (1e-3 * m3 / (mole * s)), OH, HO2m);
308   reactionData->AddProduct(HO2);
309   reactionData->AddProduct(OHm);
310   SetReactionType(reactionData,model);//partially diffusion-controlled
311   theReactionTable->SetReaction(reactionData);
312   //------------------------------------------------------------------
313   // OH + O- -> HO2-
314   reactionData = new G4DNAMolecularReactionData(
315       1.00e9 * (1e-3 * m3 / (mole * s)), OH, Om);
316   reactionData->AddProduct(HO2m);
317   SetReactionType(reactionData,model);//partially diffusion-controlled
318   theReactionTable->SetReaction(reactionData);
319   //------------------------------------------------------------------
320   // OH + O3- -> O2- + HO2
321   reactionData = new G4DNAMolecularReactionData(
322       8.50e9 * (1e-3 * m3 / (mole * s)), OH, O3m);
323   reactionData->AddProduct(O2m);
324   reactionData->AddProduct(HO2);
325   SetReactionType(reactionData,model);//partially diffusion-controlled
326   theReactionTable->SetReaction(reactionData);
327   //------------------------------------------------------------------
328   // e_aq + H2O2 -> OH- + *OH
329   reactionData = new G4DNAMolecularReactionData(
330       1.10e10 * (1e-3 * m3 / (mole * s)), e_aq, H2O2);
331   reactionData->AddProduct(OHm);
332   reactionData->AddProduct(OH);
333   SetReactionType(reactionData,model);//partially diffusion-controlled
334   theReactionTable->SetReaction(reactionData);
335   //------------------------------------------------------------------
336   // H2O2 + OH- -> HO2-
337   reactionData = new G4DNAMolecularReactionData(
338       4.71e8 * (1e-3 * m3 / (mole * s)), H2O2, OHm);
339   reactionData->AddProduct(HO2m);
340   SetReactionType(reactionData,model);//partially diffusion-controlled
341   theReactionTable->SetReaction(reactionData);
342   //------------------------------------------------------------------
343   // H2O2 + O(3p) -> HO2 + OH
344   reactionData = new G4DNAMolecularReactionData(
345       1.60e9 * (1e-3 * m3 / (mole * s)), H2O2, O);
346   reactionData->AddProduct(HO2);
347   reactionData->AddProduct(OH);
348   SetReactionType(reactionData,model);//partially diffusion-controlled
349   theReactionTable->SetReaction(reactionData);
350   //------------------------------------------------------------------
351   // H2O2 + O- -> HO2 + OH-
352   reactionData = new G4DNAMolecularReactionData(
353       5.55e8 * (1e-3 * m3 / (mole * s)), H2O2, Om);
354   reactionData->AddProduct(HO2);
355   reactionData->AddProduct(OHm);
356   SetReactionType(reactionData,model);//partially diffusion-controlled
357   theReactionTable->SetReaction(reactionData);
358   //------------------------------------------------------------------
359   // H2 + O(3p) -> H + OH
360   reactionData = new G4DNAMolecularReactionData(
361       4.77e3 * (1e-3 * m3 / (mole * s)), H2, O);
362   reactionData->AddProduct(H);
363   reactionData->AddProduct(OH);
364   SetReactionType(reactionData,model);//partially diffusion-controlled
365   theReactionTable->SetReaction(reactionData);
366   //------------------------------------------------------------------
367   // H2 + O- -> H + OH-
368   reactionData = new G4DNAMolecularReactionData(
369       1.21e8 * (1e-3 * m3 / (mole * s)), H2, Om);
370   reactionData->AddProduct(H);
371   reactionData->AddProduct(OHm);
372   SetReactionType(reactionData,model);//partially diffusion-controlled
373   theReactionTable->SetReaction(reactionData);
374   //------------------------------------------------------------------
375   // eaq- + O2 -> O2-
376   reactionData = new G4DNAMolecularReactionData(
377       1.74e10 * (1e-3 * m3 / (mole * s)), e_aq, O2);
378   reactionData->AddProduct(O2m);
379   SetReactionType(reactionData,model);//partially diffusion-controlled
380   theReactionTable->SetReaction(reactionData);
381   //------------------------------------------------------------------
382   // eaq + HO2 -> HO2-
383   reactionData = new G4DNAMolecularReactionData(
384       1.29e10 * (1e-3 * m3 / (mole * s)), e_aq, HO2);
385   reactionData->AddProduct(HO2m);
386   SetReactionType(reactionData,model);//partially diffusion-controlled
387   theReactionTable->SetReaction(reactionData);
388   //------------------------------------------------------------------
389   // OH- + HO2 -> O2-
390   reactionData = new G4DNAMolecularReactionData(
391       6.30e9 * (1e-3 * m3 / (mole * s)), OHm, HO2);
392   reactionData->AddProduct(O2m);
393   SetReactionType(reactionData,model);//partially diffusion-controlled
394   theReactionTable->SetReaction(reactionData);
395   //------------------------------------------------------------------
396   // OH- + O(3p) -> HO2-
397   reactionData = new G4DNAMolecularReactionData(
398       4.20e8 * (1e-3 * m3 / (mole * s)), OHm, O);
399   reactionData->AddProduct(HO2m);
400   SetReactionType(reactionData,model);//partially diffusion-controlled
401   theReactionTable->SetReaction(reactionData);
402   //------------------------------------------------------------------
403   // O2 + O(3p) -> O3
404   reactionData = new G4DNAMolecularReactionData(
405       4.00e9 * (1e-3 * m3 / (mole * s)), O2, O);
406   reactionData->AddProduct(O3);
407   SetReactionType(reactionData,model);//partially diffusion-controlled
408   theReactionTable->SetReaction(reactionData);
409   //------------------------------------------------------------------
410   // O2 + O- -> O3-
411   reactionData = new G4DNAMolecularReactionData(
412       3.70e9 * (1e-3 * m3 / (mole * s)), O2, Om);
413   reactionData->AddProduct(O3m);
414   SetReactionType(reactionData,model);//partially diffusion-controlled
415   theReactionTable->SetReaction(reactionData);
416   //------------------------------------------------------------------
417   // HO2 + HO2 -> H2O2 + O2
418   reactionData = new G4DNAMolecularReactionData(
419       9.80e5 * (1e-3 * m3 / (mole * s)), HO2, HO2);
420   reactionData->AddProduct(H2O2);
421   reactionData->AddProduct(O2);
422   SetReactionType(reactionData,model);//partially diffusion-controlled
423   theReactionTable->SetReaction(reactionData);
424   //------------------------------------------------------------------
425   // HO2 + O2- -> HO2- + O2
426   reactionData = new G4DNAMolecularReactionData(
427       9.70e7 * (1e-3 * m3 / (mole * s)), HO2, O2m);
428   reactionData->AddProduct(HO2m);
429   reactionData->AddProduct(O2);
430   SetReactionType(reactionData,model);//partially diffusion-controlled
431   theReactionTable->SetReaction(reactionData);
432   //------------------------------------------------------------------
433   // HO2- + O(3p) -> O2- + OH
434   reactionData = new G4DNAMolecularReactionData(
435       5.30e9 * (1e-3 * m3 / (mole * s)), HO2m, O);
436   reactionData->AddProduct(O2m);
437   reactionData->AddProduct(OH);
438   SetReactionType(reactionData,model);//partially diffusion-controlled
439   theReactionTable->SetReaction(reactionData);
440 
441   // Type IV //
442   //------------------------------------------------------------------
443   // e_aq + H3O+ -> H* + H2O
444   reactionData = new G4DNAMolecularReactionData(
445       2.11e10 * (1e-3 * m3 / (mole * s)), e_aq, H3Op);
446   reactionData->AddProduct(H);
447   SetReactionType(reactionData,model);//partially diffusion-controlled
448   theReactionTable->SetReaction(reactionData);
449   //------------------------------------------------------------------
450   // e_aq + O2- -> H2O2 + OH- + OH-
451   reactionData = new G4DNAMolecularReactionData(
452       1.29e10 * (1e-3 * m3 / (mole * s)), e_aq, O2m);
453   reactionData->AddProduct(H2O2);
454   reactionData->AddProduct(OHm);
455   reactionData->AddProduct(OHm);
456   SetReactionType(reactionData,model);//partially diffusion-controlled
457   theReactionTable->SetReaction(reactionData);
458   //------------------------------------------------------------------
459   // e_aq + HO2- -> O- + OH-
460   reactionData = new G4DNAMolecularReactionData(
461       3.51e9 * (1e-3 * m3 / (mole * s)), e_aq, HO2m);
462   reactionData->AddProduct(Om);
463   reactionData->AddProduct(OHm);
464   SetReactionType(reactionData,model);//partially diffusion-controlled
465   theReactionTable->SetReaction(reactionData);
466   //------------------------------------------------------------------
467   // e_aq + O- -> OH- + OH-
468   reactionData = new G4DNAMolecularReactionData(
469       2.31e10 * (1e-3 * m3 / (mole * s)), e_aq, Om);
470   reactionData->AddProduct(OHm);
471   reactionData->AddProduct(OHm);
472   SetReactionType(reactionData,model);//partially diffusion-controlled
473   theReactionTable->SetReaction(reactionData);
474   //------------------------------------------------------------------
475   // H3O+ + O2- -> HO2
476   reactionData = new G4DNAMolecularReactionData(
477       4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, O2m);
478   reactionData->AddProduct(HO2);
479   SetReactionType(reactionData,model);//partially diffusion-controlled
480   theReactionTable->SetReaction(reactionData);
481   //------------------------------------------------------------------
482   // H3O+ + HO2- -> H2O2
483   reactionData = new G4DNAMolecularReactionData(
484       5.00e10 * (1e-3 * m3 / (mole * s)), H3Op, HO2m);
485   reactionData->AddProduct(H2O2);
486   SetReactionType(reactionData,model);//partially diffusion-controlled
487   theReactionTable->SetReaction(reactionData);
488   //------------------------------------------------------------------
489   // H3O+ + O- -> OH
490   reactionData = new G4DNAMolecularReactionData(
491      4.78e10  * (1e-3 * m3 / (mole * s)), H3Op, Om);
492   reactionData->AddProduct(OH);
493   SetReactionType(reactionData,model);//partially diffusion-controlled
494   theReactionTable->SetReaction(reactionData);
495   //------------------------------------------------------------------
496   // O2- + O- -> O2 + OH- + OH-
497   reactionData = new G4DNAMolecularReactionData(
498       6.00e8 * (1e-3 * m3 / (mole * s)), O2m, Om);
499   reactionData->AddProduct(O2);
500   reactionData->AddProduct(OHm);
501   reactionData->AddProduct(OHm);
502   SetReactionType(reactionData,model);//partially diffusion-controlled
503   theReactionTable->SetReaction(reactionData);
504   //------------------------------------------------------------------
505   // HO2- + O- -> O2- + OH-
506   reactionData = new G4DNAMolecularReactionData(
507       3.50e8 * (1e-3 * m3 / (mole * s)), HO2m, Om);
508   reactionData->AddProduct(O2m);
509   reactionData->AddProduct(OHm);
510   SetReactionType(reactionData,model);//partially diffusion-controlled
511   theReactionTable->SetReaction(reactionData);
512   //------------------------------------------------------------------
513   // O- + O- -> H2O2 + OH- + OH-
514   reactionData = new G4DNAMolecularReactionData(
515       1.00e8 * (1e-3 * m3 / (mole * s)), Om, Om);
516   reactionData->AddProduct(H2O2);
517   reactionData->AddProduct(OHm);
518   reactionData->AddProduct(OHm);
519   SetReactionType(reactionData,model);//partially diffusion-controlled
520   theReactionTable->SetReaction(reactionData);
521   //------------------------------------------------------------------
522   // O- + O3- -> O2- + O2-
523   reactionData = new G4DNAMolecularReactionData(
524       7.00e8 * (1e-3 * m3 / (mole * s)), Om, O3m);
525   reactionData->AddProduct(O2m);
526   reactionData->AddProduct(O2m);
527   SetReactionType(reactionData,model);//partially diffusion-controlled
528   theReactionTable->SetReaction(reactionData);
529 
530   // Type VI
531   // First order reaction
532   //------------------------------------------------------------------
533   // O3- -> O- + O2
534   reactionData = new G4DNAMolecularReactionData(
535       2.66e3 / s, O3m,None);
536   reactionData->AddProduct(H3Op);
537   reactionData->AddProduct(O2m);
538   theReactionTable->SetReaction(reactionData);
539 
540   // Scavenging reactions
541 
542   //------------------------------------------------------------------
543   // HO2 + H2O -> H3O+ + O2-
544   reactionData = new G4DNAMolecularReactionData(
545       7.15e5 / s, HO2,H2OB);
546   reactionData->AddProduct(H3Op);
547   reactionData->AddProduct(O2m);
548   theReactionTable->SetReaction(reactionData);
549   //------------------------------------------------------------------
550   // H + H2O -> eaq- + H3O+ 5.94 / s
551   reactionData = new G4DNAMolecularReactionData(
552       5.94e0 / s, H,H2OB);
553   reactionData->AddProduct(e_aq);
554   reactionData->AddProduct(H3Op);
555   theReactionTable->SetReaction(reactionData);
556   //------------------------------------------------------------------
557   // eaq- + H2O -> H + OH- 15.8 / s
558   reactionData = new G4DNAMolecularReactionData(
559       1.58e1 / s, e_aq,H2OB);
560   reactionData->AddProduct(H);
561   reactionData->AddProduct(OHm);
562   theReactionTable->SetReaction(reactionData);
563   //------------------------------------------------------------------
564   // O2- + H2O -> HO2 + OH- 0.15 / s
565   reactionData = new G4DNAMolecularReactionData(
566       1.50e-1 / s, O2m,H2OB);
567   reactionData->AddProduct(HO2);
568   reactionData->AddProduct(OHm);
569   theReactionTable->SetReaction(reactionData);
570   //------------------------------------------------------------------
571   // HO2- + H2O -> H2O2 + OH- 1.36e6 / s
572   reactionData = new G4DNAMolecularReactionData(
573       1.36e6 / s, HO2m,H2OB);
574   reactionData->AddProduct(H2O2);
575   reactionData->AddProduct(OHm);
576   theReactionTable->SetReaction(reactionData);
577   //------------------------------------------------------------------
578   // O(3p) + H2O -> OH + OH 1.90e3 / s
579   reactionData = new G4DNAMolecularReactionData(
580       1.00e3 / s, O,H2OB);
581   reactionData->AddProduct(OH);
582   reactionData->AddProduct(OH);
583   theReactionTable->SetReaction(reactionData);
584   //------------------------------------------------------------------
585   // O- + H2O -> OH + OH- 1.36e6 / s
586   reactionData = new G4DNAMolecularReactionData(
587       1.36e6 / s, Om,H2OB);
588   reactionData->AddProduct(OH);
589   reactionData->AddProduct(OHm);
590   theReactionTable->SetReaction(reactionData);
591   //------------------------------------------------------------------
592   // eaq- + H3O+(B) -> H + H2O 2.09e3 / s
593   reactionData = new G4DNAMolecularReactionData(
594       2.09e3 / s, e_aq,H3OpB);
595   reactionData->AddProduct(H);
596   theReactionTable->SetReaction(reactionData);
597   //------------------------------------------------------------------
598   // O2- + H3O+(B) -> HO2 + H2O 4.73e3 / s
599   reactionData = new G4DNAMolecularReactionData(
600       4.73e3 / s, O2m,H3OpB);
601   reactionData->AddProduct(HO2);
602   theReactionTable->SetReaction(reactionData);
603   //------------------------------------------------------------------
604   // OH- + H3O+(B) -> 2H2O 1.11e4 / s
605   reactionData = new G4DNAMolecularReactionData(
606       1.12e4 / s, OHm,H3OpB);
607   theReactionTable->SetReaction(reactionData);
608 
609   //------------------------------------------------------------------
610   // H3O+ + OH-(B) -> 2H2O 1.11e4 / s
611   // opposite description of OH- + H3O+(B) -> 2H2O
612   reactionData = new G4DNAMolecularReactionData(
613       1.12e4 / s, H3Op,OHmB);
614   theReactionTable->SetReaction(reactionData);
615   //------------------------------------------------------------------
616   // HO2- + H3O+(B) -> H2O2 + H2O 4.98e3 / s
617   reactionData = new G4DNAMolecularReactionData(
618       4.95e3 / s, HO2m,H3OpB);
619   reactionData->AddProduct(H2O2);
620   theReactionTable->SetReaction(reactionData);
621   //------------------------------------------------------------------
622   // O- + H3O+(B) -> OH + H2O 4.73e3 / s
623   reactionData = new G4DNAMolecularReactionData(
624       4.73e3 / s, Om,H3OpB);
625   reactionData->AddProduct(OH);
626   theReactionTable->SetReaction(reactionData);
627   //------------------------------------------------------------------
628   // O3- + H3O+(B) -> OH + O2 + H2O 8.91e3 / s
629   reactionData = new G4DNAMolecularReactionData(
630       8.91e3 / s, O3m,H3OpB);
631   reactionData->AddProduct(OH);
632   reactionData->AddProduct(O2);
633   theReactionTable->SetReaction(reactionData);
634   //------------------------------------------------------------------
635   // H + OH-(B) -> H2O + eaq- 2.49e3 / s
636   reactionData = new G4DNAMolecularReactionData(
637       2.48e0 / s, H,OHmB);
638   reactionData->AddProduct(e_aq);
639   theReactionTable->SetReaction(reactionData);
640   //------------------------------------------------------------------
641   // OH + OH-(B) -> O- + H2O 6.24e2 / s
642   reactionData = new G4DNAMolecularReactionData(
643       6.24e2 / s, OH,OHmB);
644   reactionData->AddProduct(Om);
645   theReactionTable->SetReaction(reactionData);
646   //------------------------------------------------------------------
647   // H2O2 + OH-(B) -> HO2- + H2O 4.66e2 / s
648   reactionData = new G4DNAMolecularReactionData(
649       4.66e1 / s, H2O2,OHmB);
650   reactionData->AddProduct(HO2m);
651   theReactionTable->SetReaction(reactionData);
652   //------------------------------------------------------------------
653   // HO2 + OH-(B) -> O2- + H2O 6.24e2 / s
654   reactionData = new G4DNAMolecularReactionData(
655       6.24e2 / s, HO2,OHmB);
656   reactionData->AddProduct(O2m);
657   theReactionTable->SetReaction(reactionData);
658   //------------------------------------------------------------------
659   // O(3p) + OH-(B) -> HO2- 4.16e1 / s
660   reactionData = new G4DNAMolecularReactionData(
661       4.16e1 / s, O,OHmB);
662   reactionData->AddProduct(HO2m);
663   theReactionTable->SetReaction(reactionData);
664   //------------------------------------------------------------------
665 
666 }
667 
668 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
669 
670 void G4EmDNAChemistry_option3::ConstructProcess()
671 {
672   auto ChemModel = G4EmParameters::Instance()->GetTimeStepModel();
673   G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
674 
675   //===============================================================
676   // Extend vibrational to low energy
677   // Anyway, solvation of electrons is taken into account from 7.4 eV
678   // So below this threshold, for now, no accurate modeling is done
679   //
680   G4VProcess* process =
681       G4ProcessTable::GetProcessTable()->
682         FindProcess("e-_G4DNAVibExcitation", "e-");
683 
684   if (process)
685   {
686     G4DNAVibExcitation* vibExcitation = (G4DNAVibExcitation*) process;
687     G4VEmModel* model = vibExcitation->EmModel();
688     G4DNASancheExcitationModel* sancheExcitationMod =
689         dynamic_cast<G4DNASancheExcitationModel*>(model);
690     if(sancheExcitationMod)
691     {
692       sancheExcitationMod->ExtendLowEnergyLimit(0.025 * eV);
693     }
694   }
695 
696   //===============================================================
697   // *** Electron Solvatation ***
698   //
699   process =
700   G4ProcessTable::GetProcessTable()->
701   FindProcess("e-_G4DNAElectronSolvation", "e-");
702   
703   if (process == 0)
704   {
705     ph->RegisterProcess(
706         new G4DNAElectronSolvation("e-_G4DNAElectronSolvation"),
707         G4Electron::Definition());
708   }
709 
710 
711   //===============================================================
712   // Define processes for molecules
713   //
714   G4MoleculeTable* theMoleculeTable = G4MoleculeTable::Instance();
715   G4MoleculeDefinitionIterator iterator =
716       theMoleculeTable->GetDefintionIterator();
717   iterator.reset();
718   while (iterator())
719   {
720     G4MoleculeDefinition* moleculeDef = iterator.value();
721 
722     if (moleculeDef != G4H2O::Definition())
723     {
724       if(ChemModel != G4ChemTimeStepModel::IRT)
725       {
726         auto* brown = new G4DNABrownianTransportation();
727         ph->RegisterProcess(brown, moleculeDef);
728       }
729     }
730     else
731     {
732       moleculeDef->GetProcessManager()
733                       ->AddRestProcess(new G4DNAElectronHoleRecombination(), 2);
734       auto* dissociationProcess =
735           new G4DNAMolecularDissociation("H2O_DNAMolecularDecay");
736       dissociationProcess->SetDisplacer(
737           moleculeDef, new G4DNAWaterDissociationDisplacer);
738       dissociationProcess->SetVerboseLevel(3);
739 
740       moleculeDef->GetProcessManager()
741                 ->AddRestProcess(dissociationProcess, 1);
742     }
743     /*
744      * Warning : end of particles and processes are needed by
745      * EM Physics builders
746      */
747   }
748 
749   G4DNAChemistryManager::Instance()->Initialize();
750 }
751 
752 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
753 
754 void G4EmDNAChemistry_option3::ConstructTimeStepModel(G4DNAMolecularReactionTable*
755                                               /*reactionTable*/)
756 {
757   auto model = G4EmParameters::Instance()->GetTimeStepModel();
758   if(model == G4ChemTimeStepModel::IRT)
759   {
760     RegisterTimeStepModel(new G4DNAMolecularIRTModel(), 0);
761   }else if(model == G4ChemTimeStepModel::SBS)
762   {
763     RegisterTimeStepModel(new G4DNAMolecularStepByStepModel(), 0);
764   }else if(model == G4ChemTimeStepModel::IRT_syn)
765   {
766     RegisterTimeStepModel(new G4DNAIndependentReactionTimeModel(), 0);
767   }
768 }
769 
770 void G4EmDNAChemistry_option3::SetReactionType(G4DNAMolecularReactionData* pData,
771                                                G4ChemTimeStepModel model)
772 {
773   if(model != G4ChemTimeStepModel::SBS) { pData->SetReactionType(1); }
774 }
775