Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/dna/moleculardna/src/ChemistryList.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 #include "ChemistryList.hh"
 28 
 29 #include "G4DNAChemistryManager.hh"
 30 #include "G4DNAWaterDissociationDisplacer.hh"
 31 #include "G4DNAWaterExcitationStructure.hh"
 32 #include "G4PhysicalConstants.hh"
 33 #include "G4ProcessManager.hh"
 34 #include "G4SystemOfUnits.hh"
 35 // *** Processes and models for Geant4-DNA
 36 #include "DetectorConstruction.hh"
 37 #include "IRTDamageReactionModel.hh"
 38 
 39 #include "G4ChemicalMoleculeFinder.hh"
 40 #include "G4DNABrownianTransportation.hh"
 41 #include "G4DNAElectronHoleRecombination.hh"
 42 #include "G4DNAElectronSolvation.hh"
 43 #include "G4DNAIndependentReactionTimeModel.hh"
 44 #include "G4DNAMolecularDissociation.hh"
 45 #include "G4DNAMolecularReactionTable.hh"
 46 #include "G4DNAMoleculeEncounterStepper.hh"
 47 #include "G4DNAPolyNucleotideReactionProcess.hh"
 48 #include "G4DNASancheExcitationModel.hh"
 49 #include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
 50 #include "G4DNAVibExcitation.hh"
 51 #include "G4Electron.hh"
 52 #include "G4Electron_aq.hh"
 53 #include "G4H2.hh"
 54 #include "G4H2O.hh"
 55 #include "G4H2O2.hh"
 56 #include "G4H3O.hh"
 57 #include "G4HO2.hh"
 58 #include "G4Hydrogen.hh"
 59 #include "G4MolecularConfiguration.hh"
 60 #include "G4MoleculeTable.hh"
 61 #include "G4O2.hh"
 62 #include "G4O3.hh"
 63 #include "G4OH.hh"
 64 #include "G4Oxygen.hh"
 65 #include "G4PhysicsListHelper.hh"
 66 #include "G4ProcessTable.hh"
 67 #include "G4RunManager.hh"
 68 #include "G4VDNAHitModel.hh"
 69 #include "G4VDNAReactionModel.hh"
 70 #include "G4ChemDissociationChannels_option1.hh"
 71 
 72 ChemistryList::ChemistryList() : G4VUserChemistryList(true)
 73 {
 74   G4DNAChemistryManager::Instance()->SetChemistryList(this);
 75 }
 76 
 77 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 78 
 79 void ChemistryList::ConstructMolecule()
 80 {
 81   //-----------------------------------
 82   // Create the definition
 83 
 84   G4H2O::Definition();
 85   G4Hydrogen::Definition();
 86   G4H3O::Definition();
 87   G4OH::Definition();
 88   G4Electron_aq::Definition();
 89   G4H2O2::Definition();
 90   G4H2::Definition();
 91 
 92   G4O2::Definition();
 93   G4HO2::Definition();
 94   G4Oxygen::Definition();
 95   G4O3::Definition();
 96 
 97   auto G4OHm = new G4MoleculeDefinition("OH",/*mass*/ 17.00734 * g / Avogadro * c_squared,
 98                                         2.8e-9 * (m * m / s), -1,
 99                                         5, 0.958 * angstrom, // radius
100                                         2 // number of atoms
101                                         );
102 
103   auto G4HO2m = new G4MoleculeDefinition("HO_2", 33.0034 * g / Avogadro * c_squared,
104                                          2.3e-9 * (m * m / s), -1, 0,
105                                          2.1 * angstrom, 3);
106   //____________________________________________________________________________
107 
108   G4MoleculeTable::Instance()->CreateConfiguration("H3Op", G4H3O::Definition());
109   G4MolecularConfiguration* OHm =
110     G4MoleculeTable::Instance()->CreateConfiguration("OHm",  // just a tag to store and retrieve
111                                                              // from G4MoleculeTable
112                                                      G4OHm,
113                                                      -1,  // charge
114                                                      5.0e-9 * (m2 / s));
115   OHm->SetMass(17.0079 * g / Avogadro * c_squared);
116   G4MoleculeTable::Instance()->CreateConfiguration("°OH", G4OH::Definition());
117   G4MoleculeTable::Instance()->CreateConfiguration("e_aq", G4Electron_aq::Definition());
118   G4MoleculeTable::Instance()->CreateConfiguration("H", G4Hydrogen::Definition());
119   G4MoleculeTable::Instance()->CreateConfiguration("H2", G4H2::Definition());
120   G4MoleculeTable::Instance()->CreateConfiguration("H2O2", G4H2O2::Definition());
121 
122   // molecules extension (RITRACKS)
123 
124   G4MoleculeTable::Instance()->CreateConfiguration("HO2°", G4HO2::Definition());
125   G4MoleculeTable::Instance()->GetConfiguration("HO2°")->SetVanDerVaalsRadius(0.21 * nm);
126 
127   G4MolecularConfiguration* HO2m =
128     G4MoleculeTable::Instance()->CreateConfiguration("HO2m",  // just a tag to store and retrieve
129                                                               // from G4MoleculeTable
130                                                      G4HO2m,
131                                                      -1,  // charge
132                                                      1.4e-9 * (m2 / s));
133   HO2m->SetMass(33.00396 * g / Avogadro * c_squared);
134   HO2m->SetVanDerVaalsRadius(0.25 * nm);
135 
136   G4MoleculeTable::Instance()->CreateConfiguration("Oxy", G4Oxygen::Definition());
137   G4MoleculeTable::Instance()->GetConfiguration("Oxy")->SetVanDerVaalsRadius(0.20 * nm);
138 
139   G4MolecularConfiguration* Om =
140     G4MoleculeTable::Instance()->CreateConfiguration("Om",  // just a tag to store and retrieve from
141                                                             // G4MoleculeTable
142                                                      G4Oxygen::Definition(),
143                                                      -1,  // charge
144                                                      2.0e-9 * (m2 / s));
145   Om->SetMass(15.99829 * g / Avogadro * c_squared);
146   Om->SetVanDerVaalsRadius(0.25 * nm);
147 
148   G4MoleculeTable::Instance()->CreateConfiguration("O2", G4O2::Definition());
149   G4MoleculeTable::Instance()->GetConfiguration("O2")->SetVanDerVaalsRadius(0.17 * nm);
150 
151   G4MolecularConfiguration* O2m =
152     G4MoleculeTable::Instance()->CreateConfiguration("O2m",  // just a tag to store and retrieve
153                                                              // from G4MoleculeTable
154                                                      G4O2::Definition(),
155                                                      -1,  // charge
156                                                      1.75e-9 * (m2 / s));
157   O2m->SetMass(31.99602 * g / Avogadro * c_squared);
158   O2m->SetVanDerVaalsRadius(0.22 * nm);
159 
160   G4MoleculeTable::Instance()->CreateConfiguration("O3", G4O3::Definition());
161   G4MoleculeTable::Instance()->GetConfiguration("O3")->SetVanDerVaalsRadius(0.20 * nm);
162 
163   G4MolecularConfiguration* O3m =
164     G4MoleculeTable::Instance()->CreateConfiguration("O3m",  // just a tag to store and retrieve
165                                                              // from G4MoleculeTable
166                                                      G4O3::Definition(),
167                                                      -1,  // charge
168                                                      2.0e-9 * (m2 / s));
169   O3m->SetMass(47.99375 * g / Avogadro * c_squared);
170   O3m->SetVanDerVaalsRadius(0.20 * nm);
171 
172   G4MoleculeDefinition* A = G4MoleculeTable::Instance()->CreateMoleculeDefinition("ADENINE", 0);
173   G4MoleculeTable::Instance()->CreateConfiguration("A", A);
174 
175   G4MoleculeDefinition* T = G4MoleculeTable::Instance()->CreateMoleculeDefinition("THYMINE", 0);
176   G4MoleculeTable::Instance()->CreateConfiguration("T", T);
177 
178   G4MoleculeDefinition* G = G4MoleculeTable::Instance()->CreateMoleculeDefinition("GUANINE", 0);
179   G4MoleculeTable::Instance()->CreateConfiguration("G", G);
180 
181   G4MoleculeDefinition* C = G4MoleculeTable::Instance()->CreateMoleculeDefinition("CYTOSINE", 0);
182   G4MoleculeTable::Instance()->CreateConfiguration("C", C);
183 
184   G4MoleculeDefinition* S = G4MoleculeTable::Instance()->CreateMoleculeDefinition("SUGAR", 0);
185   G4MoleculeTable::Instance()->CreateConfiguration("Sugar", S);
186 
187   G4DNAMolecularMaterial* molMaterialManager = G4DNAMolecularMaterial::Instance();
188 
189   molMaterialManager->SetMolecularConfiguration(G4Material::GetMaterial("G4_DNA_DEOXYRIBOSE"),
190                                                 "Sugar");
191   molMaterialManager->SetMolecularConfiguration("G4_DNA_PHOSPHATE", "Sugar");
192   molMaterialManager->SetMolecularConfiguration(G4Material::GetMaterial("G4_DNA_ADENINE"), "A");
193   molMaterialManager->SetMolecularConfiguration(G4Material::GetMaterial("G4_DNA_THYMINE"), "T");
194   molMaterialManager->SetMolecularConfiguration(G4Material::GetMaterial("G4_DNA_GUANINE"), "G");
195   molMaterialManager->SetMolecularConfiguration(G4Material::GetMaterial("G4_DNA_CYTOSINE"), "C");
196 }
197 
198 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
199 
200 void ChemistryList::ConstructDissociationChannels()
201 {
202   G4ChemDissociationChannels_option1::ConstructDissociationChannels();
203 }
204 
205 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
206 
207 void ChemistryList::ConstructReactionTable(G4DNAMolecularReactionTable* theReactionTable)
208 {
209   //-----------------------------------
210   // Get the molecular configuration
211   G4MolecularConfiguration* OH = G4MoleculeTable::Instance()->GetConfiguration("°OH");
212   G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()->GetConfiguration("OHm");
213   G4MolecularConfiguration* e_aq = G4MoleculeTable::Instance()->GetConfiguration("e_aq");
214   G4MolecularConfiguration* H2 = G4MoleculeTable::Instance()->GetConfiguration("H2");
215   G4MolecularConfiguration* H3Op = G4MoleculeTable::Instance()->GetConfiguration("H3Op");
216   G4MolecularConfiguration* H = G4MoleculeTable::Instance()->GetConfiguration("H");
217   G4MolecularConfiguration* H2O2 = G4MoleculeTable::Instance()->GetConfiguration("H2O2");
218   G4MolecularConfiguration* HO2 = G4MoleculeTable::Instance()->GetConfiguration("HO2°");
219   G4MolecularConfiguration* HO2m = G4MoleculeTable::Instance()->GetConfiguration("HO2m");
220   G4MolecularConfiguration* O = G4MoleculeTable::Instance()->GetConfiguration("Oxy");
221   G4MolecularConfiguration* Om = G4MoleculeTable::Instance()->GetConfiguration("Om");
222   G4MolecularConfiguration* O2 = G4MoleculeTable::Instance()->GetConfiguration("O2");
223   G4MolecularConfiguration* O2m = G4MoleculeTable::Instance()->GetConfiguration("O2m");
224   G4MolecularConfiguration* O3 = G4MoleculeTable::Instance()->GetConfiguration("O3");
225   G4MolecularConfiguration* O3m = G4MoleculeTable::Instance()->GetConfiguration("O3m");
226 
227   // Type I //
228   //------------------------------------------------------------------
229   // *H + *H -> H2
230   auto* reactionData = new G4DNAMolecularReactionData(0.503e10 * (1e-3 * m3 / (mole * s)), H, H);
231   reactionData->AddProduct(H2);
232   theReactionTable->SetReaction(reactionData);
233   //------------------------------------------------------------------
234   // e_aq + H* + H2O -> H2 + OH-
235   reactionData = new G4DNAMolecularReactionData(2.50e10 * (1e-3 * m3 / (mole * s)), e_aq, H);
236   reactionData->AddProduct(OHm);
237   reactionData->AddProduct(H2);
238   theReactionTable->SetReaction(reactionData);
239 
240   // H + O(3p) -> OH
241   reactionData = new G4DNAMolecularReactionData(2.02e10 * (1e-3 * m3 / (mole * s)), H, O);
242   reactionData->AddProduct(OH);
243   theReactionTable->SetReaction(reactionData);
244   //------------------------------------------------------------------
245   // H + O- -> OH-
246   reactionData = new G4DNAMolecularReactionData(2.00e10 * (1e-3 * m3 / (mole * s)), H, Om);
247   reactionData->AddProduct(OHm);
248   theReactionTable->SetReaction(reactionData);
249   //------------------------------------------------------------------
250   // OH + O(3p) -> HO2
251   reactionData = new G4DNAMolecularReactionData(2.02e10 * (1e-3 * m3 / (mole * s)), OH, O);
252   reactionData->AddProduct(HO2);
253   theReactionTable->SetReaction(reactionData);
254   //------------------------------------------------------------------
255   // HO2 + O(3p) -> O2
256   reactionData = new G4DNAMolecularReactionData(2.02e10 * (1e-3 * m3 / (mole * s)), HO2, O);
257   reactionData->AddProduct(O2);
258   reactionData->AddProduct(OH);
259   theReactionTable->SetReaction(reactionData);
260   //------------------------------------------------------------------
261   // O(3p) + O(3p) -> O2
262   reactionData = new G4DNAMolecularReactionData(2.20e10 * (1e-3 * m3 / (mole * s)), O, O);
263   reactionData->AddProduct(O2);
264   theReactionTable->SetReaction(reactionData);
265 
266   // Type III //
267   //------------------------------------------------------------------
268   // e_aq + e_aq + 2H2O -> H2 + 2OH-
269   reactionData = new G4DNAMolecularReactionData(0.636e10 * (1e-3 * m3 / (mole * s)), e_aq, e_aq);
270   reactionData->AddProduct(OHm);
271   reactionData->AddProduct(OHm);
272   reactionData->AddProduct(H2);
273   theReactionTable->SetReaction(reactionData);
274   //------------------------------------------------------------------
275   // H3O+ + OH- -> 2H2O
276   reactionData = new G4DNAMolecularReactionData(1.13e11 * (1e-3 * m3 / (mole * s)), H3Op, OHm);
277   theReactionTable->SetReaction(reactionData);
278   //------------------------------------------------------------------
279   // H3O+ + O3- -> OH + O2
280   reactionData = new G4DNAMolecularReactionData(9.0e10 * (1e-3 * m3 / (mole * s)), H3Op, O3m);
281   reactionData->AddProduct(OH);
282   reactionData->AddProduct(O2);
283   theReactionTable->SetReaction(reactionData);
284 
285   // Type II //
286 
287   //------------------------------------------------------------------
288   // *OH + *H -> H2O
289   reactionData = new G4DNAMolecularReactionData(1.55e10 * (1e-3 * m3 / (mole * s)), OH, H);
290   reactionData->SetReactionType(1);
291   theReactionTable->SetReaction(reactionData);
292   //------------------------------------------------------------------
293   // H + H2O2 -> OH
294   reactionData = new G4DNAMolecularReactionData(3.50e7 * (1e-3 * m3 / (mole * s)), H, H2O2);
295   reactionData->AddProduct(OH);
296   reactionData->SetReactionType(1);
297   theReactionTable->SetReaction(reactionData);
298   //------------------------------------------------------------------
299   // H + OH- -> eaq-
300   reactionData = new G4DNAMolecularReactionData(2.51e7 * (1e-3 * m3 / (mole * s)), H, OHm);
301   reactionData->AddProduct(e_aq);
302   reactionData->SetReactionType(1);
303   theReactionTable->SetReaction(reactionData);
304   //------------------------------------------------------------------
305   // H + O2 -> HO2
306   reactionData = new G4DNAMolecularReactionData(2.10e10 * (1e-3 * m3 / (mole * s)), H, O2);
307   reactionData->AddProduct(HO2);
308   reactionData->SetReactionType(1);
309   theReactionTable->SetReaction(reactionData);
310   //------------------------------------------------------------------
311   // H + HO2 -> H2O2
312   reactionData = new G4DNAMolecularReactionData(1.00e10 * (1e-3 * m3 / (mole * s)), H, HO2);
313   reactionData->AddProduct(H2O2);
314   reactionData->SetReactionType(1);
315   theReactionTable->SetReaction(reactionData);
316   //------------------------------------------------------------------
317   // H + O2- -> HO2-
318   reactionData = new G4DNAMolecularReactionData(1.00e10 * (1e-3 * m3 / (mole * s)), H, O2m);
319   reactionData->AddProduct(HO2m);
320   reactionData->SetReactionType(1);
321   theReactionTable->SetReaction(reactionData);
322   //------------------------------------------------------------------
323   // *OH + *OH -> H2O2
324   reactionData = new G4DNAMolecularReactionData(0.55e10 * (1e-3 * m3 / (mole * s)), OH, OH);
325   reactionData->AddProduct(H2O2);
326   reactionData->SetReactionType(1);
327   theReactionTable->SetReaction(reactionData);
328   //------------------------------------------------------------------
329   // OH + H2O2 -> HO2
330   reactionData = new G4DNAMolecularReactionData(2.88e7 * (1e-3 * m3 / (mole * s)), OH, H2O2);
331   reactionData->AddProduct(HO2);
332   reactionData->SetReactionType(1);
333   theReactionTable->SetReaction(reactionData);
334   //------------------------------------------------------------------
335   // OH + H2 -> H
336   reactionData = new G4DNAMolecularReactionData(3.28e7 * (1e-3 * m3 / (mole * s)), OH, H2);
337   reactionData->AddProduct(H);
338   reactionData->SetReactionType(1);
339   theReactionTable->SetReaction(reactionData);
340   //------------------------------------------------------------------
341   // e_aq + *OH -> OH-
342   reactionData = new G4DNAMolecularReactionData(2.95e10 * (1e-3 * m3 / (mole * s)), e_aq, OH);
343   reactionData->AddProduct(OHm);
344   reactionData->SetReactionType(1);
345   theReactionTable->SetReaction(reactionData);
346   //------------------------------------------------------------------
347   // OH + OH- -> O-
348   reactionData = new G4DNAMolecularReactionData(6.30e9 * (1e-3 * m3 / (mole * s)), OH, OHm);
349   reactionData->AddProduct(Om);
350   reactionData->SetReactionType(1);
351   theReactionTable->SetReaction(reactionData);
352   //------------------------------------------------------------------
353   // OH + HO2 -> O2
354   reactionData = new G4DNAMolecularReactionData(7.90e9 * (1e-3 * m3 / (mole * s)), OH, HO2);
355   reactionData->AddProduct(O2);
356   reactionData->SetReactionType(1);
357   theReactionTable->SetReaction(reactionData);
358   //------------------------------------------------------------------
359   // OH + O2- -> O2 + OH-
360   reactionData = new G4DNAMolecularReactionData(1.07e10 * (1e-3 * m3 / (mole * s)), OH, O2m);
361   reactionData->AddProduct(O2);
362   reactionData->AddProduct(OHm);
363   reactionData->SetReactionType(1);
364   theReactionTable->SetReaction(reactionData);
365   //------------------------------------------------------------------
366   // OH + HO2- -> HO2 + OH-
367   reactionData = new G4DNAMolecularReactionData(8.32e9 * (1e-3 * m3 / (mole * s)), OH, HO2m);
368   reactionData->AddProduct(HO2);
369   reactionData->AddProduct(OHm);
370   reactionData->SetReactionType(1);
371   theReactionTable->SetReaction(reactionData);
372   //------------------------------------------------------------------
373   // OH + O- -> HO2-
374   reactionData = new G4DNAMolecularReactionData(1.00e9 * (1e-3 * m3 / (mole * s)), OH, Om);
375   reactionData->AddProduct(HO2m);
376   reactionData->SetReactionType(1);
377   theReactionTable->SetReaction(reactionData);
378   //------------------------------------------------------------------
379   // OH + O3- -> O2- + HO2
380   reactionData = new G4DNAMolecularReactionData(8.50e9 * (1e-3 * m3 / (mole * s)), OH, O3m);
381   reactionData->AddProduct(O2m);
382   reactionData->AddProduct(HO2);
383   reactionData->SetReactionType(1);
384   theReactionTable->SetReaction(reactionData);
385   //------------------------------------------------------------------
386   // e_aq + H2O2 -> OH- + *OH
387   reactionData = new G4DNAMolecularReactionData(1.10e10 * (1e-3 * m3 / (mole * s)), e_aq, H2O2);
388   reactionData->AddProduct(OHm);
389   reactionData->AddProduct(OH);
390   reactionData->SetReactionType(1);
391   theReactionTable->SetReaction(reactionData);
392   //------------------------------------------------------------------
393   // H2O2 + OH- -> HO2-
394   reactionData = new G4DNAMolecularReactionData(4.71e8 * (1e-3 * m3 / (mole * s)), H2O2, OHm);
395   reactionData->AddProduct(HO2m);
396   reactionData->SetReactionType(1);
397   theReactionTable->SetReaction(reactionData);
398   //------------------------------------------------------------------
399   // H2O2 + O(3p) -> HO2 + OH
400   reactionData = new G4DNAMolecularReactionData(1.60e9 * (1e-3 * m3 / (mole * s)), H2O2, O);
401   reactionData->AddProduct(HO2);
402   reactionData->AddProduct(OH);
403   reactionData->SetReactionType(1);
404   theReactionTable->SetReaction(reactionData);
405   //------------------------------------------------------------------
406   // H2O2 + O- -> HO2 + OH-
407   reactionData = new G4DNAMolecularReactionData(5.55e8 * (1e-3 * m3 / (mole * s)), H2O2, Om);
408   reactionData->AddProduct(HO2);
409   reactionData->AddProduct(OHm);
410   reactionData->SetReactionType(1);
411   theReactionTable->SetReaction(reactionData);
412   //------------------------------------------------------------------
413   // H2 + O(3p) -> H + OH
414   reactionData = new G4DNAMolecularReactionData(4.77e3 * (1e-3 * m3 / (mole * s)), H2, O);
415   reactionData->AddProduct(H);
416   reactionData->AddProduct(OH);
417   reactionData->SetReactionType(1);
418   theReactionTable->SetReaction(reactionData);
419   //------------------------------------------------------------------
420   // H2 + O- -> H + OH-
421   reactionData = new G4DNAMolecularReactionData(1.21e8 * (1e-3 * m3 / (mole * s)), H2, Om);
422   reactionData->AddProduct(H);
423   reactionData->AddProduct(OHm);
424   reactionData->SetReactionType(1);
425   theReactionTable->SetReaction(reactionData);
426   //------------------------------------------------------------------
427   // eaq- + O2 -> O2-
428   reactionData = new G4DNAMolecularReactionData(1.74e10 * (1e-3 * m3 / (mole * s)), e_aq, O2);
429   reactionData->AddProduct(O2m);
430   reactionData->SetReactionType(1);
431   theReactionTable->SetReaction(reactionData);
432   //------------------------------------------------------------------
433   // eaq + HO2 -> HO2-
434   reactionData = new G4DNAMolecularReactionData(1.29e10 * (1e-3 * m3 / (mole * s)), e_aq, HO2);
435   reactionData->AddProduct(HO2m);
436   reactionData->SetReactionType(1);
437   theReactionTable->SetReaction(reactionData);
438   //------------------------------------------------------------------
439   // OH- + HO2 -> O2-
440   reactionData = new G4DNAMolecularReactionData(6.30e9 * (1e-3 * m3 / (mole * s)), OHm, HO2);
441   reactionData->AddProduct(O2m);
442   reactionData->SetReactionType(1);
443   theReactionTable->SetReaction(reactionData);
444   //------------------------------------------------------------------
445   // OH- + O(3p) -> HO2-
446   reactionData = new G4DNAMolecularReactionData(4.20e8 * (1e-3 * m3 / (mole * s)), OHm, O);
447   reactionData->AddProduct(HO2m);
448   reactionData->SetReactionType(1);
449   theReactionTable->SetReaction(reactionData);
450   //------------------------------------------------------------------
451   // O2 + O(3p) -> O3
452   reactionData = new G4DNAMolecularReactionData(4.00e9 * (1e-3 * m3 / (mole * s)), O2, O);
453   reactionData->AddProduct(O3);
454   reactionData->SetReactionType(1);
455   theReactionTable->SetReaction(reactionData);
456   //------------------------------------------------------------------
457   // O2 + O- -> O3-
458   reactionData = new G4DNAMolecularReactionData(3.70e9 * (1e-3 * m3 / (mole * s)), O2, Om);
459   reactionData->AddProduct(O3m);
460   reactionData->SetReactionType(1);
461   theReactionTable->SetReaction(reactionData);
462   //------------------------------------------------------------------
463   // HO2 + HO2 -> H2O2 + O2
464   reactionData = new G4DNAMolecularReactionData(9.80e5 * (1e-3 * m3 / (mole * s)), HO2, HO2);
465   reactionData->AddProduct(H2O2);
466   reactionData->AddProduct(O2);
467   reactionData->SetReactionType(1);
468   theReactionTable->SetReaction(reactionData);
469   //------------------------------------------------------------------
470   // HO2 + O2- -> HO2- + O2
471   reactionData = new G4DNAMolecularReactionData(9.70e7 * (1e-3 * m3 / (mole * s)), HO2, O2m);
472   reactionData->AddProduct(HO2m);
473   reactionData->AddProduct(O2);
474   reactionData->SetReactionType(1);
475   theReactionTable->SetReaction(reactionData);
476   //------------------------------------------------------------------
477   // HO2- + O(3p) -> O2- + OH
478   reactionData = new G4DNAMolecularReactionData(5.30e9 * (1e-3 * m3 / (mole * s)), HO2m, O);
479   reactionData->AddProduct(O2m);
480   reactionData->AddProduct(OH);
481   reactionData->SetReactionType(1);
482   theReactionTable->SetReaction(reactionData);
483 
484   // Type IV //
485   //------------------------------------------------------------------
486   // e_aq + H3O+ -> H* + H2O
487   reactionData = new G4DNAMolecularReactionData(2.11e10 * (1e-3 * m3 / (mole * s)), e_aq, H3Op);
488   reactionData->AddProduct(H);
489   reactionData->SetReactionType(1);
490   theReactionTable->SetReaction(reactionData);
491   //------------------------------------------------------------------
492   // e_aq + O2- -> H2O2 + OH- + OH-
493   reactionData = new G4DNAMolecularReactionData(1.29e10 * (1e-3 * m3 / (mole * s)), e_aq, O2m);
494   reactionData->AddProduct(H2O2);
495   reactionData->AddProduct(OHm);
496   reactionData->AddProduct(OHm);
497   reactionData->SetReactionType(1);
498   theReactionTable->SetReaction(reactionData);
499   //------------------------------------------------------------------
500   // e_aq + HO2- -> O- + OH-
501   reactionData = new G4DNAMolecularReactionData(3.51e9 * (1e-3 * m3 / (mole * s)), e_aq, HO2m);
502   reactionData->AddProduct(Om);
503   reactionData->AddProduct(OHm);
504   reactionData->SetReactionType(1);
505   theReactionTable->SetReaction(reactionData);
506   //------------------------------------------------------------------
507   // e_aq + O- -> OH- + OH-
508   reactionData = new G4DNAMolecularReactionData(2.31e10 * (1e-3 * m3 / (mole * s)), e_aq, Om);
509   reactionData->AddProduct(OHm);
510   reactionData->AddProduct(OHm);
511   reactionData->SetReactionType(1);
512   theReactionTable->SetReaction(reactionData);
513   //------------------------------------------------------------------
514   // H3O+ + O2- -> HO2
515   reactionData = new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, O2m);
516   reactionData->AddProduct(HO2);
517   reactionData->SetReactionType(1);
518   theReactionTable->SetReaction(reactionData);
519   //------------------------------------------------------------------
520   // H3O+ + HO2- -> H2O2
521   reactionData = new G4DNAMolecularReactionData(5.00e10 * (1e-3 * m3 / (mole * s)), H3Op, HO2m);
522   reactionData->AddProduct(H2O2);
523   reactionData->SetReactionType(1);
524   theReactionTable->SetReaction(reactionData);
525   //------------------------------------------------------------------
526   // H3O+ + O- -> OH
527   reactionData = new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, Om);
528   reactionData->AddProduct(OH);
529   reactionData->SetReactionType(1);
530   theReactionTable->SetReaction(reactionData);
531   //------------------------------------------------------------------
532   // O2- + O- -> O2 + OH- + OH-
533   reactionData = new G4DNAMolecularReactionData(6.00e8 * (1e-3 * m3 / (mole * s)), O2m, Om);
534   reactionData->AddProduct(O2);
535   reactionData->AddProduct(OHm);
536   reactionData->AddProduct(OHm);
537   reactionData->SetReactionType(1);
538   theReactionTable->SetReaction(reactionData);
539   //------------------------------------------------------------------
540   // HO2- + O- -> O2- + OH-
541   reactionData = new G4DNAMolecularReactionData(3.50e8 * (1e-3 * m3 / (mole * s)), HO2m, Om);
542   reactionData->AddProduct(O2m);
543   reactionData->AddProduct(OHm);
544   reactionData->SetReactionType(1);
545   theReactionTable->SetReaction(reactionData);
546   //------------------------------------------------------------------
547   // O- + O- -> H2O2 + OH- + OH-
548   reactionData = new G4DNAMolecularReactionData(1.00e8 * (1e-3 * m3 / (mole * s)), Om, Om);
549   reactionData->AddProduct(H2O2);
550   reactionData->AddProduct(OHm);
551   reactionData->AddProduct(OHm);
552   reactionData->SetReactionType(1);
553   theReactionTable->SetReaction(reactionData);
554   //------------------------------------------------------------------
555   // O- + O3- -> O2- + O2-
556   reactionData = new G4DNAMolecularReactionData(7.00e8 * (1e-3 * m3 / (mole * s)), Om, O3m);
557   reactionData->AddProduct(O2m);
558   reactionData->AddProduct(O2m);
559   reactionData->SetReactionType(1);
560   theReactionTable->SetReaction(reactionData);
561 
562   //------------------------------------------------------------------
563   // Get the DNA entites
564   G4MolecularConfiguration* A = G4MoleculeTable::Instance()->GetConfiguration("A");
565   G4MolecularConfiguration* T = G4MoleculeTable::Instance()->GetConfiguration("T");
566   G4MolecularConfiguration* G = G4MoleculeTable::Instance()->GetConfiguration("G");
567   G4MolecularConfiguration* C = G4MoleculeTable::Instance()->GetConfiguration("C");
568   G4MolecularConfiguration* Sugar = G4MoleculeTable::Instance()->GetConfiguration("Sugar");
569 
570   // From Buxton et al., J. Phys. Chern. Ref. Data, Vol. 17, No.2, 1988.
571   theReactionTable->SetReaction(0.61e10 * (1e-3 * m3 / (mole * s)), OH, A);
572   theReactionTable->SetReaction(0.64e10 * (1e-3 * m3 / (mole * s)), OH, T);
573   theReactionTable->SetReaction(0.92e10 * (1e-3 * m3 / (mole * s)), OH, G);
574   theReactionTable->SetReaction(0.61e10 * (1e-3 * m3 / (mole * s)), OH, C);
575   theReactionTable->SetReaction(0.18e10 * (1e-3 * m3 / (mole * s)), OH, Sugar);
576 
577   theReactionTable->SetReaction(0.9e10 * (1e-3 * m3 / (mole * s)), e_aq, A);
578   theReactionTable->SetReaction(1.8e10 * (1e-3 * m3 / (mole * s)), e_aq, T);
579   theReactionTable->SetReaction(1.4e10 * (1e-3 * m3 / (mole * s)), e_aq, G);
580   theReactionTable->SetReaction(1.3e10 * (1e-3 * m3 / (mole * s)), e_aq, C);
581   theReactionTable->SetReaction(1.0e7 * (1e-3 * m3 / (mole * s)), e_aq, Sugar);
582 
583   theReactionTable->SetReaction(1.0e8 * (1e-3 * m3 / (mole * s)), H, A);
584   theReactionTable->SetReaction(5.7e8 * (1e-3 * m3 / (mole * s)), H, T);
585   theReactionTable->SetReaction(9.2e7 * (1e-3 * m3 / (mole * s)), H, C);
586   theReactionTable->SetReaction(2.9e7 * (1e-3 * m3 / (mole * s)), H, Sugar);
587 }
588 
589 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
590 
591 void ChemistryList::ConstructProcess()
592 {
593   G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
594 
595   //===============================================================
596   // Extend vibrational to low energy
597   // Anyway, solvation of electrons is taken into account from 7.4 eV
598   // So below this threshold, for now, no accurate modeling is done
599   //
600   G4VProcess* process =
601     G4ProcessTable::GetProcessTable()->FindProcess("e-_G4DNAVibExcitation", "e-");
602 
603   if (process != nullptr) {
604     auto* vibExcitation = (G4DNAVibExcitation*)process;
605     G4VEmModel* model = vibExcitation->EmModel();
606     auto* sancheExcitationMod = dynamic_cast<G4DNASancheExcitationModel*>(model);
607     if (sancheExcitationMod != nullptr) {
608       sancheExcitationMod->ExtendLowEnergyLimit(0.025 * eV);
609     }
610   }
611 
612   //===============================================================
613   // *** Electron Solvatation ***
614   //
615   process = G4ProcessTable::GetProcessTable()->FindProcess("e-_G4DNAElectronSolvation", "e-");
616 
617   if (process == nullptr) {
618     ph->RegisterProcess(new G4DNAElectronSolvation("e-_G4DNAElectronSolvation"),
619                         G4Electron::Definition());
620   }
621 
622   //===============================================================
623   // Define processes for molecules
624   //
625   G4MoleculeTable* theMoleculeTable = G4MoleculeTable::Instance();
626   G4MoleculeDefinitionIterator iterator = theMoleculeTable->GetDefintionIterator();
627   iterator.reset();
628   while (iterator()) {
629     G4MoleculeDefinition* moleculeDef = iterator.value();
630 
631     if (moleculeDef != G4H2O::Definition()) {
632       auto brown = new G4DNABrownianTransportation();
633       ph->RegisterProcess(brown, moleculeDef);
634 
635       if (moleculeDef == G4Electron_aq::Definition() || moleculeDef == G4OH::Definition()
636           || moleculeDef == G4Hydrogen::Definition())
637       {
638         G4VDNAHitModel* pDamageModel = new IRTDamageReactionModel("IRTDamageReactionModel");
639         auto staticMoleculeReactionProcess =
640           new G4DNAPolyNucleotideReactionProcess("PolyNucleotideReactionProcess");
641         staticMoleculeReactionProcess->SetVerbose(1);
642         staticMoleculeReactionProcess->SetDNADamageReactionModel(pDamageModel);
643         ph->RegisterProcess(staticMoleculeReactionProcess, moleculeDef);
644       }
645     }
646     else {
647       moleculeDef->GetProcessManager()->AddRestProcess(new G4DNAElectronHoleRecombination(), 2);
648       auto* dissociationProcess = new G4DNAMolecularDissociation("H2O_DNAMolecularDecay");
649       dissociationProcess->SetDisplacer(moleculeDef, new G4DNAWaterDissociationDisplacer);
650       dissociationProcess->SetVerboseLevel(3);
651 
652       moleculeDef->GetProcessManager()->AddRestProcess(dissociationProcess, 1);
653     }
654   }
655 }
656 
657 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
658 
659 void ChemistryList::ConstructTimeStepModel(G4DNAMolecularReactionTable*
660                                            /*reactionTable*/)
661 {
662   auto model = G4EmParameters::Instance()->GetTimeStepModel();
663   if(model == G4ChemTimeStepModel::IRT_syn)
664   {
665     RegisterTimeStepModel(new G4DNAIndependentReactionTimeModel(), 0);
666   }else
667   {
668     G4ExceptionDescription exceptionDescription;
669     exceptionDescription << "This example uses only IRT_syn";
670     G4Exception(
671         "ChemistryList"
672         "ConstructTimeStepModel",
673         "ConstructTimeStepModel", FatalException, exceptionDescription);
674   }
675 }
676 
677 void ChemistryList::ConstructParticle()
678 {
679   ConstructMolecule();
680 }
681