Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /geant4/examples/advanced/dna/moleculardna/src/ChemistryList.cc was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 
0027 #include "ChemistryList.hh"
0028 
0029 #include "G4DNAChemistryManager.hh"
0030 #include "G4DNAWaterDissociationDisplacer.hh"
0031 #include "G4DNAWaterExcitationStructure.hh"
0032 #include "G4PhysicalConstants.hh"
0033 #include "G4ProcessManager.hh"
0034 #include "G4SystemOfUnits.hh"
0035 // *** Processes and models for Geant4-DNA
0036 #include "DetectorConstruction.hh"
0037 #include "IRTDamageReactionModel.hh"
0038 
0039 #include "G4ChemicalMoleculeFinder.hh"
0040 #include "G4DNABrownianTransportation.hh"
0041 #include "G4DNAElectronHoleRecombination.hh"
0042 #include "G4DNAElectronSolvation.hh"
0043 #include "G4DNAIndependentReactionTimeModel.hh"
0044 #include "G4DNAMolecularDissociation.hh"
0045 #include "G4DNAMolecularReactionTable.hh"
0046 #include "G4DNAMoleculeEncounterStepper.hh"
0047 #include "G4DNAPolyNucleotideReactionProcess.hh"
0048 #include "G4DNASancheExcitationModel.hh"
0049 #include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
0050 #include "G4DNAVibExcitation.hh"
0051 #include "G4Electron.hh"
0052 #include "G4Electron_aq.hh"
0053 #include "G4H2.hh"
0054 #include "G4H2O.hh"
0055 #include "G4H2O2.hh"
0056 #include "G4H3O.hh"
0057 #include "G4HO2.hh"
0058 #include "G4Hydrogen.hh"
0059 #include "G4MolecularConfiguration.hh"
0060 #include "G4MoleculeTable.hh"
0061 #include "G4O2.hh"
0062 #include "G4O3.hh"
0063 #include "G4OH.hh"
0064 #include "G4Oxygen.hh"
0065 #include "G4PhysicsListHelper.hh"
0066 #include "G4ProcessTable.hh"
0067 #include "G4RunManager.hh"
0068 #include "G4VDNAHitModel.hh"
0069 #include "G4VDNAReactionModel.hh"
0070 #include "G4ChemDissociationChannels_option1.hh"
0071 
0072 ChemistryList::ChemistryList() : G4VUserChemistryList(true)
0073 {
0074   G4DNAChemistryManager::Instance()->SetChemistryList(this);
0075 }
0076 
0077 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0078 
0079 void ChemistryList::ConstructMolecule()
0080 {
0081   //-----------------------------------
0082   // Create the definition
0083 
0084   G4H2O::Definition();
0085   G4Hydrogen::Definition();
0086   G4H3O::Definition();
0087   G4OH::Definition();
0088   G4Electron_aq::Definition();
0089   G4H2O2::Definition();
0090   G4H2::Definition();
0091 
0092   G4O2::Definition();
0093   G4HO2::Definition();
0094   G4Oxygen::Definition();
0095   G4O3::Definition();
0096 
0097   auto G4OHm = new G4MoleculeDefinition("OH",/*mass*/ 17.00734 * g / Avogadro * c_squared,
0098                                         2.8e-9 * (m * m / s), -1,
0099                                         5, 0.958 * angstrom, // radius
0100                                         2 // number of atoms
0101                                         );
0102 
0103   auto G4HO2m = new G4MoleculeDefinition("HO_2", 33.0034 * g / Avogadro * c_squared,
0104                                          2.3e-9 * (m * m / s), -1, 0,
0105                                          2.1 * angstrom, 3);
0106   //____________________________________________________________________________
0107 
0108   G4MoleculeTable::Instance()->CreateConfiguration("H3Op", G4H3O::Definition());
0109   G4MolecularConfiguration* OHm =
0110     G4MoleculeTable::Instance()->CreateConfiguration("OHm",  // just a tag to store and retrieve
0111                                                              // from G4MoleculeTable
0112                                                      G4OHm,
0113                                                      -1,  // charge
0114                                                      5.0e-9 * (m2 / s));
0115   OHm->SetMass(17.0079 * g / Avogadro * c_squared);
0116   G4MoleculeTable::Instance()->CreateConfiguration("°OH", G4OH::Definition());
0117   G4MoleculeTable::Instance()->CreateConfiguration("e_aq", G4Electron_aq::Definition());
0118   G4MoleculeTable::Instance()->CreateConfiguration("H", G4Hydrogen::Definition());
0119   G4MoleculeTable::Instance()->CreateConfiguration("H2", G4H2::Definition());
0120   G4MoleculeTable::Instance()->CreateConfiguration("H2O2", G4H2O2::Definition());
0121 
0122   // molecules extension (RITRACKS)
0123 
0124   G4MoleculeTable::Instance()->CreateConfiguration("HO2°", G4HO2::Definition());
0125   G4MoleculeTable::Instance()->GetConfiguration("HO2°")->SetVanDerVaalsRadius(0.21 * nm);
0126 
0127   G4MolecularConfiguration* HO2m =
0128     G4MoleculeTable::Instance()->CreateConfiguration("HO2m",  // just a tag to store and retrieve
0129                                                               // from G4MoleculeTable
0130                                                      G4HO2m,
0131                                                      -1,  // charge
0132                                                      1.4e-9 * (m2 / s));
0133   HO2m->SetMass(33.00396 * g / Avogadro * c_squared);
0134   HO2m->SetVanDerVaalsRadius(0.25 * nm);
0135 
0136   G4MoleculeTable::Instance()->CreateConfiguration("Oxy", G4Oxygen::Definition());
0137   G4MoleculeTable::Instance()->GetConfiguration("Oxy")->SetVanDerVaalsRadius(0.20 * nm);
0138 
0139   G4MolecularConfiguration* Om =
0140     G4MoleculeTable::Instance()->CreateConfiguration("Om",  // just a tag to store and retrieve from
0141                                                             // G4MoleculeTable
0142                                                      G4Oxygen::Definition(),
0143                                                      -1,  // charge
0144                                                      2.0e-9 * (m2 / s));
0145   Om->SetMass(15.99829 * g / Avogadro * c_squared);
0146   Om->SetVanDerVaalsRadius(0.25 * nm);
0147 
0148   G4MoleculeTable::Instance()->CreateConfiguration("O2", G4O2::Definition());
0149   G4MoleculeTable::Instance()->GetConfiguration("O2")->SetVanDerVaalsRadius(0.17 * nm);
0150 
0151   G4MolecularConfiguration* O2m =
0152     G4MoleculeTable::Instance()->CreateConfiguration("O2m",  // just a tag to store and retrieve
0153                                                              // from G4MoleculeTable
0154                                                      G4O2::Definition(),
0155                                                      -1,  // charge
0156                                                      1.75e-9 * (m2 / s));
0157   O2m->SetMass(31.99602 * g / Avogadro * c_squared);
0158   O2m->SetVanDerVaalsRadius(0.22 * nm);
0159 
0160   G4MoleculeTable::Instance()->CreateConfiguration("O3", G4O3::Definition());
0161   G4MoleculeTable::Instance()->GetConfiguration("O3")->SetVanDerVaalsRadius(0.20 * nm);
0162 
0163   G4MolecularConfiguration* O3m =
0164     G4MoleculeTable::Instance()->CreateConfiguration("O3m",  // just a tag to store and retrieve
0165                                                              // from G4MoleculeTable
0166                                                      G4O3::Definition(),
0167                                                      -1,  // charge
0168                                                      2.0e-9 * (m2 / s));
0169   O3m->SetMass(47.99375 * g / Avogadro * c_squared);
0170   O3m->SetVanDerVaalsRadius(0.20 * nm);
0171 
0172   G4MoleculeDefinition* A = G4MoleculeTable::Instance()->CreateMoleculeDefinition("ADENINE", 0);
0173   G4MoleculeTable::Instance()->CreateConfiguration("A", A);
0174 
0175   G4MoleculeDefinition* T = G4MoleculeTable::Instance()->CreateMoleculeDefinition("THYMINE", 0);
0176   G4MoleculeTable::Instance()->CreateConfiguration("T", T);
0177 
0178   G4MoleculeDefinition* G = G4MoleculeTable::Instance()->CreateMoleculeDefinition("GUANINE", 0);
0179   G4MoleculeTable::Instance()->CreateConfiguration("G", G);
0180 
0181   G4MoleculeDefinition* C = G4MoleculeTable::Instance()->CreateMoleculeDefinition("CYTOSINE", 0);
0182   G4MoleculeTable::Instance()->CreateConfiguration("C", C);
0183 
0184   G4MoleculeDefinition* S = G4MoleculeTable::Instance()->CreateMoleculeDefinition("SUGAR", 0);
0185   G4MoleculeTable::Instance()->CreateConfiguration("Sugar", S);
0186 
0187   G4DNAMolecularMaterial* molMaterialManager = G4DNAMolecularMaterial::Instance();
0188 
0189   molMaterialManager->SetMolecularConfiguration(G4Material::GetMaterial("G4_DNA_DEOXYRIBOSE"),
0190                                                 "Sugar");
0191   molMaterialManager->SetMolecularConfiguration("G4_DNA_PHOSPHATE", "Sugar");
0192   molMaterialManager->SetMolecularConfiguration(G4Material::GetMaterial("G4_DNA_ADENINE"), "A");
0193   molMaterialManager->SetMolecularConfiguration(G4Material::GetMaterial("G4_DNA_THYMINE"), "T");
0194   molMaterialManager->SetMolecularConfiguration(G4Material::GetMaterial("G4_DNA_GUANINE"), "G");
0195   molMaterialManager->SetMolecularConfiguration(G4Material::GetMaterial("G4_DNA_CYTOSINE"), "C");
0196 }
0197 
0198 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0199 
0200 void ChemistryList::ConstructDissociationChannels()
0201 {
0202   G4ChemDissociationChannels_option1::ConstructDissociationChannels();
0203 }
0204 
0205 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0206 
0207 void ChemistryList::ConstructReactionTable(G4DNAMolecularReactionTable* theReactionTable)
0208 {
0209   //-----------------------------------
0210   // Get the molecular configuration
0211   G4MolecularConfiguration* OH = G4MoleculeTable::Instance()->GetConfiguration("°OH");
0212   G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()->GetConfiguration("OHm");
0213   G4MolecularConfiguration* e_aq = G4MoleculeTable::Instance()->GetConfiguration("e_aq");
0214   G4MolecularConfiguration* H2 = G4MoleculeTable::Instance()->GetConfiguration("H2");
0215   G4MolecularConfiguration* H3Op = G4MoleculeTable::Instance()->GetConfiguration("H3Op");
0216   G4MolecularConfiguration* H = G4MoleculeTable::Instance()->GetConfiguration("H");
0217   G4MolecularConfiguration* H2O2 = G4MoleculeTable::Instance()->GetConfiguration("H2O2");
0218   G4MolecularConfiguration* HO2 = G4MoleculeTable::Instance()->GetConfiguration("HO2°");
0219   G4MolecularConfiguration* HO2m = G4MoleculeTable::Instance()->GetConfiguration("HO2m");
0220   G4MolecularConfiguration* O = G4MoleculeTable::Instance()->GetConfiguration("Oxy");
0221   G4MolecularConfiguration* Om = G4MoleculeTable::Instance()->GetConfiguration("Om");
0222   G4MolecularConfiguration* O2 = G4MoleculeTable::Instance()->GetConfiguration("O2");
0223   G4MolecularConfiguration* O2m = G4MoleculeTable::Instance()->GetConfiguration("O2m");
0224   G4MolecularConfiguration* O3 = G4MoleculeTable::Instance()->GetConfiguration("O3");
0225   G4MolecularConfiguration* O3m = G4MoleculeTable::Instance()->GetConfiguration("O3m");
0226 
0227   // Type I //
0228   //------------------------------------------------------------------
0229   // *H + *H -> H2
0230   auto* reactionData = new G4DNAMolecularReactionData(0.503e10 * (1e-3 * m3 / (mole * s)), H, H);
0231   reactionData->AddProduct(H2);
0232   theReactionTable->SetReaction(reactionData);
0233   //------------------------------------------------------------------
0234   // e_aq + H* + H2O -> H2 + OH-
0235   reactionData = new G4DNAMolecularReactionData(2.50e10 * (1e-3 * m3 / (mole * s)), e_aq, H);
0236   reactionData->AddProduct(OHm);
0237   reactionData->AddProduct(H2);
0238   theReactionTable->SetReaction(reactionData);
0239 
0240   // H + O(3p) -> OH
0241   reactionData = new G4DNAMolecularReactionData(2.02e10 * (1e-3 * m3 / (mole * s)), H, O);
0242   reactionData->AddProduct(OH);
0243   theReactionTable->SetReaction(reactionData);
0244   //------------------------------------------------------------------
0245   // H + O- -> OH-
0246   reactionData = new G4DNAMolecularReactionData(2.00e10 * (1e-3 * m3 / (mole * s)), H, Om);
0247   reactionData->AddProduct(OHm);
0248   theReactionTable->SetReaction(reactionData);
0249   //------------------------------------------------------------------
0250   // OH + O(3p) -> HO2
0251   reactionData = new G4DNAMolecularReactionData(2.02e10 * (1e-3 * m3 / (mole * s)), OH, O);
0252   reactionData->AddProduct(HO2);
0253   theReactionTable->SetReaction(reactionData);
0254   //------------------------------------------------------------------
0255   // HO2 + O(3p) -> O2
0256   reactionData = new G4DNAMolecularReactionData(2.02e10 * (1e-3 * m3 / (mole * s)), HO2, O);
0257   reactionData->AddProduct(O2);
0258   reactionData->AddProduct(OH);
0259   theReactionTable->SetReaction(reactionData);
0260   //------------------------------------------------------------------
0261   // O(3p) + O(3p) -> O2
0262   reactionData = new G4DNAMolecularReactionData(2.20e10 * (1e-3 * m3 / (mole * s)), O, O);
0263   reactionData->AddProduct(O2);
0264   theReactionTable->SetReaction(reactionData);
0265 
0266   // Type III //
0267   //------------------------------------------------------------------
0268   // e_aq + e_aq + 2H2O -> H2 + 2OH-
0269   reactionData = new G4DNAMolecularReactionData(0.636e10 * (1e-3 * m3 / (mole * s)), e_aq, e_aq);
0270   reactionData->AddProduct(OHm);
0271   reactionData->AddProduct(OHm);
0272   reactionData->AddProduct(H2);
0273   theReactionTable->SetReaction(reactionData);
0274   //------------------------------------------------------------------
0275   // H3O+ + OH- -> 2H2O
0276   reactionData = new G4DNAMolecularReactionData(1.13e11 * (1e-3 * m3 / (mole * s)), H3Op, OHm);
0277   theReactionTable->SetReaction(reactionData);
0278   //------------------------------------------------------------------
0279   // H3O+ + O3- -> OH + O2
0280   reactionData = new G4DNAMolecularReactionData(9.0e10 * (1e-3 * m3 / (mole * s)), H3Op, O3m);
0281   reactionData->AddProduct(OH);
0282   reactionData->AddProduct(O2);
0283   theReactionTable->SetReaction(reactionData);
0284 
0285   // Type II //
0286 
0287   //------------------------------------------------------------------
0288   // *OH + *H -> H2O
0289   reactionData = new G4DNAMolecularReactionData(1.55e10 * (1e-3 * m3 / (mole * s)), OH, H);
0290   reactionData->SetReactionType(1);
0291   theReactionTable->SetReaction(reactionData);
0292   //------------------------------------------------------------------
0293   // H + H2O2 -> OH
0294   reactionData = new G4DNAMolecularReactionData(3.50e7 * (1e-3 * m3 / (mole * s)), H, H2O2);
0295   reactionData->AddProduct(OH);
0296   reactionData->SetReactionType(1);
0297   theReactionTable->SetReaction(reactionData);
0298   //------------------------------------------------------------------
0299   // H + OH- -> eaq-
0300   reactionData = new G4DNAMolecularReactionData(2.51e7 * (1e-3 * m3 / (mole * s)), H, OHm);
0301   reactionData->AddProduct(e_aq);
0302   reactionData->SetReactionType(1);
0303   theReactionTable->SetReaction(reactionData);
0304   //------------------------------------------------------------------
0305   // H + O2 -> HO2
0306   reactionData = new G4DNAMolecularReactionData(2.10e10 * (1e-3 * m3 / (mole * s)), H, O2);
0307   reactionData->AddProduct(HO2);
0308   reactionData->SetReactionType(1);
0309   theReactionTable->SetReaction(reactionData);
0310   //------------------------------------------------------------------
0311   // H + HO2 -> H2O2
0312   reactionData = new G4DNAMolecularReactionData(1.00e10 * (1e-3 * m3 / (mole * s)), H, HO2);
0313   reactionData->AddProduct(H2O2);
0314   reactionData->SetReactionType(1);
0315   theReactionTable->SetReaction(reactionData);
0316   //------------------------------------------------------------------
0317   // H + O2- -> HO2-
0318   reactionData = new G4DNAMolecularReactionData(1.00e10 * (1e-3 * m3 / (mole * s)), H, O2m);
0319   reactionData->AddProduct(HO2m);
0320   reactionData->SetReactionType(1);
0321   theReactionTable->SetReaction(reactionData);
0322   //------------------------------------------------------------------
0323   // *OH + *OH -> H2O2
0324   reactionData = new G4DNAMolecularReactionData(0.55e10 * (1e-3 * m3 / (mole * s)), OH, OH);
0325   reactionData->AddProduct(H2O2);
0326   reactionData->SetReactionType(1);
0327   theReactionTable->SetReaction(reactionData);
0328   //------------------------------------------------------------------
0329   // OH + H2O2 -> HO2
0330   reactionData = new G4DNAMolecularReactionData(2.88e7 * (1e-3 * m3 / (mole * s)), OH, H2O2);
0331   reactionData->AddProduct(HO2);
0332   reactionData->SetReactionType(1);
0333   theReactionTable->SetReaction(reactionData);
0334   //------------------------------------------------------------------
0335   // OH + H2 -> H
0336   reactionData = new G4DNAMolecularReactionData(3.28e7 * (1e-3 * m3 / (mole * s)), OH, H2);
0337   reactionData->AddProduct(H);
0338   reactionData->SetReactionType(1);
0339   theReactionTable->SetReaction(reactionData);
0340   //------------------------------------------------------------------
0341   // e_aq + *OH -> OH-
0342   reactionData = new G4DNAMolecularReactionData(2.95e10 * (1e-3 * m3 / (mole * s)), e_aq, OH);
0343   reactionData->AddProduct(OHm);
0344   reactionData->SetReactionType(1);
0345   theReactionTable->SetReaction(reactionData);
0346   //------------------------------------------------------------------
0347   // OH + OH- -> O-
0348   reactionData = new G4DNAMolecularReactionData(6.30e9 * (1e-3 * m3 / (mole * s)), OH, OHm);
0349   reactionData->AddProduct(Om);
0350   reactionData->SetReactionType(1);
0351   theReactionTable->SetReaction(reactionData);
0352   //------------------------------------------------------------------
0353   // OH + HO2 -> O2
0354   reactionData = new G4DNAMolecularReactionData(7.90e9 * (1e-3 * m3 / (mole * s)), OH, HO2);
0355   reactionData->AddProduct(O2);
0356   reactionData->SetReactionType(1);
0357   theReactionTable->SetReaction(reactionData);
0358   //------------------------------------------------------------------
0359   // OH + O2- -> O2 + OH-
0360   reactionData = new G4DNAMolecularReactionData(1.07e10 * (1e-3 * m3 / (mole * s)), OH, O2m);
0361   reactionData->AddProduct(O2);
0362   reactionData->AddProduct(OHm);
0363   reactionData->SetReactionType(1);
0364   theReactionTable->SetReaction(reactionData);
0365   //------------------------------------------------------------------
0366   // OH + HO2- -> HO2 + OH-
0367   reactionData = new G4DNAMolecularReactionData(8.32e9 * (1e-3 * m3 / (mole * s)), OH, HO2m);
0368   reactionData->AddProduct(HO2);
0369   reactionData->AddProduct(OHm);
0370   reactionData->SetReactionType(1);
0371   theReactionTable->SetReaction(reactionData);
0372   //------------------------------------------------------------------
0373   // OH + O- -> HO2-
0374   reactionData = new G4DNAMolecularReactionData(1.00e9 * (1e-3 * m3 / (mole * s)), OH, Om);
0375   reactionData->AddProduct(HO2m);
0376   reactionData->SetReactionType(1);
0377   theReactionTable->SetReaction(reactionData);
0378   //------------------------------------------------------------------
0379   // OH + O3- -> O2- + HO2
0380   reactionData = new G4DNAMolecularReactionData(8.50e9 * (1e-3 * m3 / (mole * s)), OH, O3m);
0381   reactionData->AddProduct(O2m);
0382   reactionData->AddProduct(HO2);
0383   reactionData->SetReactionType(1);
0384   theReactionTable->SetReaction(reactionData);
0385   //------------------------------------------------------------------
0386   // e_aq + H2O2 -> OH- + *OH
0387   reactionData = new G4DNAMolecularReactionData(1.10e10 * (1e-3 * m3 / (mole * s)), e_aq, H2O2);
0388   reactionData->AddProduct(OHm);
0389   reactionData->AddProduct(OH);
0390   reactionData->SetReactionType(1);
0391   theReactionTable->SetReaction(reactionData);
0392   //------------------------------------------------------------------
0393   // H2O2 + OH- -> HO2-
0394   reactionData = new G4DNAMolecularReactionData(4.71e8 * (1e-3 * m3 / (mole * s)), H2O2, OHm);
0395   reactionData->AddProduct(HO2m);
0396   reactionData->SetReactionType(1);
0397   theReactionTable->SetReaction(reactionData);
0398   //------------------------------------------------------------------
0399   // H2O2 + O(3p) -> HO2 + OH
0400   reactionData = new G4DNAMolecularReactionData(1.60e9 * (1e-3 * m3 / (mole * s)), H2O2, O);
0401   reactionData->AddProduct(HO2);
0402   reactionData->AddProduct(OH);
0403   reactionData->SetReactionType(1);
0404   theReactionTable->SetReaction(reactionData);
0405   //------------------------------------------------------------------
0406   // H2O2 + O- -> HO2 + OH-
0407   reactionData = new G4DNAMolecularReactionData(5.55e8 * (1e-3 * m3 / (mole * s)), H2O2, Om);
0408   reactionData->AddProduct(HO2);
0409   reactionData->AddProduct(OHm);
0410   reactionData->SetReactionType(1);
0411   theReactionTable->SetReaction(reactionData);
0412   //------------------------------------------------------------------
0413   // H2 + O(3p) -> H + OH
0414   reactionData = new G4DNAMolecularReactionData(4.77e3 * (1e-3 * m3 / (mole * s)), H2, O);
0415   reactionData->AddProduct(H);
0416   reactionData->AddProduct(OH);
0417   reactionData->SetReactionType(1);
0418   theReactionTable->SetReaction(reactionData);
0419   //------------------------------------------------------------------
0420   // H2 + O- -> H + OH-
0421   reactionData = new G4DNAMolecularReactionData(1.21e8 * (1e-3 * m3 / (mole * s)), H2, Om);
0422   reactionData->AddProduct(H);
0423   reactionData->AddProduct(OHm);
0424   reactionData->SetReactionType(1);
0425   theReactionTable->SetReaction(reactionData);
0426   //------------------------------------------------------------------
0427   // eaq- + O2 -> O2-
0428   reactionData = new G4DNAMolecularReactionData(1.74e10 * (1e-3 * m3 / (mole * s)), e_aq, O2);
0429   reactionData->AddProduct(O2m);
0430   reactionData->SetReactionType(1);
0431   theReactionTable->SetReaction(reactionData);
0432   //------------------------------------------------------------------
0433   // eaq + HO2 -> HO2-
0434   reactionData = new G4DNAMolecularReactionData(1.29e10 * (1e-3 * m3 / (mole * s)), e_aq, HO2);
0435   reactionData->AddProduct(HO2m);
0436   reactionData->SetReactionType(1);
0437   theReactionTable->SetReaction(reactionData);
0438   //------------------------------------------------------------------
0439   // OH- + HO2 -> O2-
0440   reactionData = new G4DNAMolecularReactionData(6.30e9 * (1e-3 * m3 / (mole * s)), OHm, HO2);
0441   reactionData->AddProduct(O2m);
0442   reactionData->SetReactionType(1);
0443   theReactionTable->SetReaction(reactionData);
0444   //------------------------------------------------------------------
0445   // OH- + O(3p) -> HO2-
0446   reactionData = new G4DNAMolecularReactionData(4.20e8 * (1e-3 * m3 / (mole * s)), OHm, O);
0447   reactionData->AddProduct(HO2m);
0448   reactionData->SetReactionType(1);
0449   theReactionTable->SetReaction(reactionData);
0450   //------------------------------------------------------------------
0451   // O2 + O(3p) -> O3
0452   reactionData = new G4DNAMolecularReactionData(4.00e9 * (1e-3 * m3 / (mole * s)), O2, O);
0453   reactionData->AddProduct(O3);
0454   reactionData->SetReactionType(1);
0455   theReactionTable->SetReaction(reactionData);
0456   //------------------------------------------------------------------
0457   // O2 + O- -> O3-
0458   reactionData = new G4DNAMolecularReactionData(3.70e9 * (1e-3 * m3 / (mole * s)), O2, Om);
0459   reactionData->AddProduct(O3m);
0460   reactionData->SetReactionType(1);
0461   theReactionTable->SetReaction(reactionData);
0462   //------------------------------------------------------------------
0463   // HO2 + HO2 -> H2O2 + O2
0464   reactionData = new G4DNAMolecularReactionData(9.80e5 * (1e-3 * m3 / (mole * s)), HO2, HO2);
0465   reactionData->AddProduct(H2O2);
0466   reactionData->AddProduct(O2);
0467   reactionData->SetReactionType(1);
0468   theReactionTable->SetReaction(reactionData);
0469   //------------------------------------------------------------------
0470   // HO2 + O2- -> HO2- + O2
0471   reactionData = new G4DNAMolecularReactionData(9.70e7 * (1e-3 * m3 / (mole * s)), HO2, O2m);
0472   reactionData->AddProduct(HO2m);
0473   reactionData->AddProduct(O2);
0474   reactionData->SetReactionType(1);
0475   theReactionTable->SetReaction(reactionData);
0476   //------------------------------------------------------------------
0477   // HO2- + O(3p) -> O2- + OH
0478   reactionData = new G4DNAMolecularReactionData(5.30e9 * (1e-3 * m3 / (mole * s)), HO2m, O);
0479   reactionData->AddProduct(O2m);
0480   reactionData->AddProduct(OH);
0481   reactionData->SetReactionType(1);
0482   theReactionTable->SetReaction(reactionData);
0483 
0484   // Type IV //
0485   //------------------------------------------------------------------
0486   // e_aq + H3O+ -> H* + H2O
0487   reactionData = new G4DNAMolecularReactionData(2.11e10 * (1e-3 * m3 / (mole * s)), e_aq, H3Op);
0488   reactionData->AddProduct(H);
0489   reactionData->SetReactionType(1);
0490   theReactionTable->SetReaction(reactionData);
0491   //------------------------------------------------------------------
0492   // e_aq + O2- -> H2O2 + OH- + OH-
0493   reactionData = new G4DNAMolecularReactionData(1.29e10 * (1e-3 * m3 / (mole * s)), e_aq, O2m);
0494   reactionData->AddProduct(H2O2);
0495   reactionData->AddProduct(OHm);
0496   reactionData->AddProduct(OHm);
0497   reactionData->SetReactionType(1);
0498   theReactionTable->SetReaction(reactionData);
0499   //------------------------------------------------------------------
0500   // e_aq + HO2- -> O- + OH-
0501   reactionData = new G4DNAMolecularReactionData(3.51e9 * (1e-3 * m3 / (mole * s)), e_aq, HO2m);
0502   reactionData->AddProduct(Om);
0503   reactionData->AddProduct(OHm);
0504   reactionData->SetReactionType(1);
0505   theReactionTable->SetReaction(reactionData);
0506   //------------------------------------------------------------------
0507   // e_aq + O- -> OH- + OH-
0508   reactionData = new G4DNAMolecularReactionData(2.31e10 * (1e-3 * m3 / (mole * s)), e_aq, Om);
0509   reactionData->AddProduct(OHm);
0510   reactionData->AddProduct(OHm);
0511   reactionData->SetReactionType(1);
0512   theReactionTable->SetReaction(reactionData);
0513   //------------------------------------------------------------------
0514   // H3O+ + O2- -> HO2
0515   reactionData = new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, O2m);
0516   reactionData->AddProduct(HO2);
0517   reactionData->SetReactionType(1);
0518   theReactionTable->SetReaction(reactionData);
0519   //------------------------------------------------------------------
0520   // H3O+ + HO2- -> H2O2
0521   reactionData = new G4DNAMolecularReactionData(5.00e10 * (1e-3 * m3 / (mole * s)), H3Op, HO2m);
0522   reactionData->AddProduct(H2O2);
0523   reactionData->SetReactionType(1);
0524   theReactionTable->SetReaction(reactionData);
0525   //------------------------------------------------------------------
0526   // H3O+ + O- -> OH
0527   reactionData = new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, Om);
0528   reactionData->AddProduct(OH);
0529   reactionData->SetReactionType(1);
0530   theReactionTable->SetReaction(reactionData);
0531   //------------------------------------------------------------------
0532   // O2- + O- -> O2 + OH- + OH-
0533   reactionData = new G4DNAMolecularReactionData(6.00e8 * (1e-3 * m3 / (mole * s)), O2m, Om);
0534   reactionData->AddProduct(O2);
0535   reactionData->AddProduct(OHm);
0536   reactionData->AddProduct(OHm);
0537   reactionData->SetReactionType(1);
0538   theReactionTable->SetReaction(reactionData);
0539   //------------------------------------------------------------------
0540   // HO2- + O- -> O2- + OH-
0541   reactionData = new G4DNAMolecularReactionData(3.50e8 * (1e-3 * m3 / (mole * s)), HO2m, Om);
0542   reactionData->AddProduct(O2m);
0543   reactionData->AddProduct(OHm);
0544   reactionData->SetReactionType(1);
0545   theReactionTable->SetReaction(reactionData);
0546   //------------------------------------------------------------------
0547   // O- + O- -> H2O2 + OH- + OH-
0548   reactionData = new G4DNAMolecularReactionData(1.00e8 * (1e-3 * m3 / (mole * s)), Om, Om);
0549   reactionData->AddProduct(H2O2);
0550   reactionData->AddProduct(OHm);
0551   reactionData->AddProduct(OHm);
0552   reactionData->SetReactionType(1);
0553   theReactionTable->SetReaction(reactionData);
0554   //------------------------------------------------------------------
0555   // O- + O3- -> O2- + O2-
0556   reactionData = new G4DNAMolecularReactionData(7.00e8 * (1e-3 * m3 / (mole * s)), Om, O3m);
0557   reactionData->AddProduct(O2m);
0558   reactionData->AddProduct(O2m);
0559   reactionData->SetReactionType(1);
0560   theReactionTable->SetReaction(reactionData);
0561 
0562   //------------------------------------------------------------------
0563   // Get the DNA entites
0564   G4MolecularConfiguration* A = G4MoleculeTable::Instance()->GetConfiguration("A");
0565   G4MolecularConfiguration* T = G4MoleculeTable::Instance()->GetConfiguration("T");
0566   G4MolecularConfiguration* G = G4MoleculeTable::Instance()->GetConfiguration("G");
0567   G4MolecularConfiguration* C = G4MoleculeTable::Instance()->GetConfiguration("C");
0568   G4MolecularConfiguration* Sugar = G4MoleculeTable::Instance()->GetConfiguration("Sugar");
0569 
0570   // From Buxton et al., J. Phys. Chern. Ref. Data, Vol. 17, No.2, 1988.
0571   theReactionTable->SetReaction(0.61e10 * (1e-3 * m3 / (mole * s)), OH, A);
0572   theReactionTable->SetReaction(0.64e10 * (1e-3 * m3 / (mole * s)), OH, T);
0573   theReactionTable->SetReaction(0.92e10 * (1e-3 * m3 / (mole * s)), OH, G);
0574   theReactionTable->SetReaction(0.61e10 * (1e-3 * m3 / (mole * s)), OH, C);
0575   theReactionTable->SetReaction(0.18e10 * (1e-3 * m3 / (mole * s)), OH, Sugar);
0576 
0577   theReactionTable->SetReaction(0.9e10 * (1e-3 * m3 / (mole * s)), e_aq, A);
0578   theReactionTable->SetReaction(1.8e10 * (1e-3 * m3 / (mole * s)), e_aq, T);
0579   theReactionTable->SetReaction(1.4e10 * (1e-3 * m3 / (mole * s)), e_aq, G);
0580   theReactionTable->SetReaction(1.3e10 * (1e-3 * m3 / (mole * s)), e_aq, C);
0581   theReactionTable->SetReaction(1.0e7 * (1e-3 * m3 / (mole * s)), e_aq, Sugar);
0582 
0583   theReactionTable->SetReaction(1.0e8 * (1e-3 * m3 / (mole * s)), H, A);
0584   theReactionTable->SetReaction(5.7e8 * (1e-3 * m3 / (mole * s)), H, T);
0585   theReactionTable->SetReaction(9.2e7 * (1e-3 * m3 / (mole * s)), H, C);
0586   theReactionTable->SetReaction(2.9e7 * (1e-3 * m3 / (mole * s)), H, Sugar);
0587 }
0588 
0589 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0590 
0591 void ChemistryList::ConstructProcess()
0592 {
0593   G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
0594 
0595   //===============================================================
0596   // Extend vibrational to low energy
0597   // Anyway, solvation of electrons is taken into account from 7.4 eV
0598   // So below this threshold, for now, no accurate modeling is done
0599   //
0600   G4VProcess* process =
0601     G4ProcessTable::GetProcessTable()->FindProcess("e-_G4DNAVibExcitation", "e-");
0602 
0603   if (process != nullptr) {
0604     auto* vibExcitation = (G4DNAVibExcitation*)process;
0605     G4VEmModel* model = vibExcitation->EmModel();
0606     auto* sancheExcitationMod = dynamic_cast<G4DNASancheExcitationModel*>(model);
0607     if (sancheExcitationMod != nullptr) {
0608       sancheExcitationMod->ExtendLowEnergyLimit(0.025 * eV);
0609     }
0610   }
0611 
0612   //===============================================================
0613   // *** Electron Solvatation ***
0614   //
0615   process = G4ProcessTable::GetProcessTable()->FindProcess("e-_G4DNAElectronSolvation", "e-");
0616 
0617   if (process == nullptr) {
0618     ph->RegisterProcess(new G4DNAElectronSolvation("e-_G4DNAElectronSolvation"),
0619                         G4Electron::Definition());
0620   }
0621 
0622   //===============================================================
0623   // Define processes for molecules
0624   //
0625   G4MoleculeTable* theMoleculeTable = G4MoleculeTable::Instance();
0626   G4MoleculeDefinitionIterator iterator = theMoleculeTable->GetDefintionIterator();
0627   iterator.reset();
0628   while (iterator()) {
0629     G4MoleculeDefinition* moleculeDef = iterator.value();
0630 
0631     if (moleculeDef != G4H2O::Definition()) {
0632       auto brown = new G4DNABrownianTransportation();
0633       ph->RegisterProcess(brown, moleculeDef);
0634 
0635       if (moleculeDef == G4Electron_aq::Definition() || moleculeDef == G4OH::Definition()
0636           || moleculeDef == G4Hydrogen::Definition())
0637       {
0638         G4VDNAHitModel* pDamageModel = new IRTDamageReactionModel("IRTDamageReactionModel");
0639         auto staticMoleculeReactionProcess =
0640           new G4DNAPolyNucleotideReactionProcess("PolyNucleotideReactionProcess");
0641         staticMoleculeReactionProcess->SetVerbose(1);
0642         staticMoleculeReactionProcess->SetDNADamageReactionModel(pDamageModel);
0643         ph->RegisterProcess(staticMoleculeReactionProcess, moleculeDef);
0644       }
0645     }
0646     else {
0647       moleculeDef->GetProcessManager()->AddRestProcess(new G4DNAElectronHoleRecombination(), 2);
0648       auto* dissociationProcess = new G4DNAMolecularDissociation("H2O_DNAMolecularDecay");
0649       dissociationProcess->SetDisplacer(moleculeDef, new G4DNAWaterDissociationDisplacer);
0650       dissociationProcess->SetVerboseLevel(3);
0651 
0652       moleculeDef->GetProcessManager()->AddRestProcess(dissociationProcess, 1);
0653     }
0654   }
0655 }
0656 
0657 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0658 
0659 void ChemistryList::ConstructTimeStepModel(G4DNAMolecularReactionTable*
0660                                            /*reactionTable*/)
0661 {
0662   auto model = G4EmParameters::Instance()->GetTimeStepModel();
0663   if(model == G4ChemTimeStepModel::IRT_syn)
0664   {
0665     RegisterTimeStepModel(new G4DNAIndependentReactionTimeModel(), 0);
0666   }else
0667   {
0668     G4ExceptionDescription exceptionDescription;
0669     exceptionDescription << "This example uses only IRT_syn";
0670     G4Exception(
0671         "ChemistryList"
0672         "ConstructTimeStepModel",
0673         "ConstructTimeStepModel", FatalException, exceptionDescription);
0674   }
0675 }
0676 
0677 void ChemistryList::ConstructParticle()
0678 {
0679   ConstructMolecule();
0680 }