Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/medical/dna/UHDR/src/EmDNAChemistry.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 ]

Diff markup

Differences between /examples/extended/medical/dna/UHDR/src/EmDNAChemistry.cc (Version 11.3.0) and /examples/extended/medical/dna/UHDR/src/EmDNAChemistry.cc (Version 11.2.1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 #include "EmDNAChemistry.hh"                       26 #include "EmDNAChemistry.hh"
 27                                                << 
 28 #include "G4DNAChemistryManager.hh"                27 #include "G4DNAChemistryManager.hh"
 29 #include "G4DNAWaterDissociationDisplacer.hh"      28 #include "G4DNAWaterDissociationDisplacer.hh"
 30 #include "G4ProcessManager.hh"                     29 #include "G4ProcessManager.hh"
 31 #include "G4SystemOfUnits.hh"                      30 #include "G4SystemOfUnits.hh"
 32                                                    31 
 33 // *** Processes and models for Geant4-DNA         32 // *** Processes and models for Geant4-DNA
 34                                                    33 
 35 #include "BoundedBrownianAction.hh"                34 #include "BoundedBrownianAction.hh"
 36                                                << 
 37 #include "G4DNABrownianTransportation.hh"          35 #include "G4DNABrownianTransportation.hh"
 38 #include "G4DNAElectronHoleRecombination.hh"       36 #include "G4DNAElectronHoleRecombination.hh"
 39 #include "G4DNAElectronSolvation.hh"               37 #include "G4DNAElectronSolvation.hh"
 40 #include "G4DNAMolecularDissociation.hh"           38 #include "G4DNAMolecularDissociation.hh"
 41 #include "G4DNAMolecularReactionTable.hh"          39 #include "G4DNAMolecularReactionTable.hh"
 42 #include "G4DNAMolecularStepByStepModel.hh"        40 #include "G4DNAMolecularStepByStepModel.hh"
 43 #include "G4DNASancheExcitationModel.hh"       << 
 44 #include "G4DNASmoluchowskiReactionModel.hh"       41 #include "G4DNASmoluchowskiReactionModel.hh"
                                                   >>  42 #include "G4DNASancheExcitationModel.hh"
 45 #include "G4DNAVibExcitation.hh"                   43 #include "G4DNAVibExcitation.hh"
 46 // particles                                       44 // particles
 47                                                    45 
 48 #include "G4Electron.hh"                           46 #include "G4Electron.hh"
                                                   >>  47 
 49 #include "G4Electron_aq.hh"                        48 #include "G4Electron_aq.hh"
 50 #include "G4H2O.hh"                                49 #include "G4H2O.hh"
 51 #include "G4H2O2.hh"                               50 #include "G4H2O2.hh"
 52 #include "G4H3O.hh"                                51 #include "G4H3O.hh"
 53 #include "G4HO2.hh"                                52 #include "G4HO2.hh"
 54 #include "G4Hydrogen.hh"                           53 #include "G4Hydrogen.hh"
 55 #include "G4MoleculeTable.hh"                      54 #include "G4MoleculeTable.hh"
 56 #include "G4O2.hh"                                 55 #include "G4O2.hh"
 57 #include "G4O3.hh"                                 56 #include "G4O3.hh"
 58 #include "G4OH.hh"                                 57 #include "G4OH.hh"
 59 #include "G4Oxygen.hh"                             58 #include "G4Oxygen.hh"
 60 #include "G4PhysicsListHelper.hh"                  59 #include "G4PhysicsListHelper.hh"
 61 /****/                                             60 /****/
 62 #include "G4DNAMoleculeEncounterStepper.hh"        61 #include "G4DNAMoleculeEncounterStepper.hh"
 63 #include "G4DNAScavengerProcess.hh"                62 #include "G4DNAScavengerProcess.hh"
 64 #include "G4MolecularConfiguration.hh"             63 #include "G4MolecularConfiguration.hh"
 65 #include "G4ProcessTable.hh"                       64 #include "G4ProcessTable.hh"
 66 #include "G4VChemistryWorld.hh"                    65 #include "G4VChemistryWorld.hh"
 67 /****/                                             66 /****/
 68 #include "G4ChemicalMoleculeFinder.hh"             67 #include "G4ChemicalMoleculeFinder.hh"
 69 // factory                                         68 // factory
 70 #include "ChemOxygenWaterBuilder.hh"           <<  69 #include "G4PhysicsConstructorFactory.hh"
                                                   >>  70 
 71 #include "ChemPureWaterBuilder.hh"                 71 #include "ChemPureWaterBuilder.hh"
 72                                                    72 
 73 #include "G4ChemDissociationChannels_option1.h     73 #include "G4ChemDissociationChannels_option1.hh"
 74 #include "G4PhysicsConstructorFactory.hh"      <<  74 #include "ChemOxygenWaterBuilder.hh"
 75                                                    75 
 76 G4_DECLARE_PHYSCONSTR_FACTORY(EmDNAChemistry);     76 G4_DECLARE_PHYSCONSTR_FACTORY(EmDNAChemistry);
 77                                                    77 
 78 EmDNAChemistry::EmDNAChemistry() : G4VUserChem <<  78 EmDNAChemistry::EmDNAChemistry()
 79 {                                              <<  79     : G4VUserChemistryList(true) {
 80   G4DNAChemistryManager::Instance()->SetChemis     80   G4DNAChemistryManager::Instance()->SetChemistryList(this);
 81 }                                                  81 }
 82                                                    82 
 83 //....oooOO0OOooo........oooOO0OOooo........oo     83 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 84                                                    84 
 85 EmDNAChemistry::~EmDNAChemistry() = default;       85 EmDNAChemistry::~EmDNAChemistry() = default;
 86                                                    86 
 87 //....oooOO0OOooo........oooOO0OOooo........oo     87 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 88                                                    88 
 89 void EmDNAChemistry::ConstructMolecule()       <<  89 void EmDNAChemistry::ConstructMolecule() {
 90 {                                              <<  90 
 91   G4ChemDissociationChannels_option1::Construc     91   G4ChemDissociationChannels_option1::ConstructMolecule();
 92   auto table = G4MoleculeTable::Instance();        92   auto table = G4MoleculeTable::Instance();
 93                                                    93 
 94   auto H3OpB = table->GetConfiguration("H3Op(B     94   auto H3OpB = table->GetConfiguration("H3Op(B)");
 95   H3OpB->SetDiffusionCoefficient(9.46e-9 * (m2     95   H3OpB->SetDiffusionCoefficient(9.46e-9 * (m2 / s));
 96                                                    96 
 97   auto OHm = table->GetConfiguration("OHm(B)")     97   auto OHm = table->GetConfiguration("OHm(B)");
 98   OHm->SetDiffusionCoefficient(5.3e-9 * (m2 /      98   OHm->SetDiffusionCoefficient(5.3e-9 * (m2 / s));
 99   table->CreateConfiguration("H2O", G4H2O::Def     99   table->CreateConfiguration("H2O", G4H2O::Definition());
100                                                   100 
101   auto G4NO2 = new G4MoleculeDefinition("NO_2" << 101   auto G4NO2 = new G4MoleculeDefinition("NO_2",/*mass*/ 30,
102                                         /*D*/  << 102       /*D*/ 0 * (m * m / s),
103                                         /*char << 103       /*charge*/0,
104                                         /*elec << 104       /*electronL*/0,
105                                         /*radi << 105       /*radius*/0.17 * nm);//should be corrected
106                                                << 106 
107   auto G4NO3 = new G4MoleculeDefinition("NO_3" << 107   auto G4NO3 = new G4MoleculeDefinition("NO_3",/*mass*/ 38,
108                                         /*D*/  << 108       /*D*/ 0 * (m * m / s),
109                                         /*char << 109       /*charge*/0,
110                                         /*elec << 110       /*electronL*/0,
111                                         /*radi << 111       /*radius*/0.17 * nm);//should be corrected
112                                                   112 
113   table->CreateConfiguration("NO2", G4NO2);       113   table->CreateConfiguration("NO2", G4NO2);
114   table->CreateConfiguration("NO2m", G4NO2,    << 114   table->CreateConfiguration("NO2m",
115                              -1,  // charge    << 115                              G4NO2,
                                                   >> 116                              -1, // charge
116                              0 * (m2 / s));       117                              0 * (m2 / s));
117   table->CreateConfiguration("NO2mm", G4NO2,   << 118   table->CreateConfiguration("NO2mm",
118                              -2,  // charge    << 119                              G4NO2,
                                                   >> 120                              -2, // charge
119                              0 * (m2 / s));       121                              0 * (m2 / s));
120                                                   122 
121   table->CreateConfiguration("NO3m", G4NO3,    << 123   table->CreateConfiguration("NO3m",
122                              -1,  // charge    << 124                              G4NO3,
                                                   >> 125                              -1, // charge
123                              0 * (m2 / s));       126                              0 * (m2 / s));
124                                                   127 
125   table->CreateConfiguration("NO3mm", G4NO3,   << 128   table->CreateConfiguration("NO3mm",
126                              -2,  // charge    << 129                              G4NO3,
                                                   >> 130                              -2, // charge
127                              0 * (m2 / s));       131                              0 * (m2 / s));
128                                                   132 
129   // FrickeDosimeter                           << 133   //FrickeDosimeter
130   auto G4Fe = new G4MoleculeDefinition("Fe",      134   auto G4Fe = new G4MoleculeDefinition("Fe",
131                                        /*mass* << 135       /*mass*/ 55.84 * g / Avogadro * c_squared,
132                                        /*D*/ 0 << 136       /*D*/ 0 * (m * m / s),
133                                        /*charg << 137       /*charge*/ 0,
134                                        /*elect << 138       /*electronL*/ 0,
135                                        /*radiu << 139       /*radius*/ 0.35 * nm); // can be adjusted
136                                                   140 
137   table->CreateConfiguration("Fe0", G4Fe);        141   table->CreateConfiguration("Fe0", G4Fe);
138                                                   142 
139   table->CreateConfiguration("Feppp", G4Fe,    << 143   table->CreateConfiguration("Feppp",
140                              3,  // charge     << 144                              G4Fe,
141                              4.86e-10 * (m2 /  << 145                              3, // charge
142                                                << 146                              4.86e-10 * (m2 / s));//Michael Spiro* and Andrew M. Creeth
143   table->CreateConfiguration("Fepp", G4Fe,     << 147 
144                              2,  // charge     << 148   table->CreateConfiguration("Fepp",
                                                   >> 149                              G4Fe,
                                                   >> 150                              2, // charge
145                              5.78e-10 * (m2 /     151                              5.78e-10 * (m2 / s));
146   // HSO4-                                     << 152   //HSO4-
147   auto G4HSO4 = new G4MoleculeDefinition("HSO4    153   auto G4HSO4 = new G4MoleculeDefinition("HSO4",
148                                          /*mas << 154       /*mass*/ 55.84 * g / Avogadro * c_squared,
149                                          /*D*/ << 155       /*D*/ 0 * (m * m / s),
150                                          /*cha << 156       /*charge*/ 0,
151                                          /*ele << 157       /*electronL*/ 0,
152                                          /*rad << 158       /*radius*/ 0.35 * nm); // can be adjusted
153   table->CreateConfiguration("HSO4m", G4HSO4,  << 159   table->CreateConfiguration("HSO4m",
154                              -1,  // charge    << 160                              G4HSO4,
                                                   >> 161                              -1, // charge
155                              0 * (m2 / s));       162                              0 * (m2 / s));
156                                                   163 
157   // SO4-                                      << 164   //SO4-
158   auto G4SO4 = new G4MoleculeDefinition("SO4",    165   auto G4SO4 = new G4MoleculeDefinition("SO4",
159                                         /*mass << 166       /*mass*/ 55.84 * g / Avogadro * c_squared,
160                                         /*D*/  << 167       /*D*/ 0 * (m * m / s),
161                                         /*char << 168       /*charge*/ 0,
162                                         /*elec << 169       /*electronL*/ 0,
163                                         /*radi << 170       /*radius*/ 0.35 * nm); // can be adjusted
164   table->CreateConfiguration("SO4m", G4SO4,    << 171   table->CreateConfiguration("SO4m",
165                              -1,  // charge    << 172                              G4SO4,
                                                   >> 173                              -1, // charge
166                              0 * (m2 / s));       174                              0 * (m2 / s));
167 }                                                 175 }
168                                                   176 
169 //....oooOO0OOooo........oooOO0OOooo........oo    177 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
170                                                   178 
171 void EmDNAChemistry::ConstructDissociationChan << 179 void EmDNAChemistry::ConstructDissociationChannels() {
172 {                                              << 
173   G4ChemDissociationChannels_option1::Construc    180   G4ChemDissociationChannels_option1::ConstructDissociationChannels();
174 }                                                 181 }
175                                                   182 
176 //....oooOO0OOooo........oooOO0OOooo........oo    183 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
177                                                   184 
178 void EmDNAChemistry::ConstructReactionTable(G4 << 185 void EmDNAChemistry::ConstructReactionTable(
179 {                                              << 186     G4DNAMolecularReactionTable *pReactionTable) {
180   ChemOxygenWaterBuilder::OxygenScavengerReact    187   ChemOxygenWaterBuilder::OxygenScavengerReaction(pReactionTable);
181   ChemOxygenWaterBuilder::SecondOrderReactionE    188   ChemOxygenWaterBuilder::SecondOrderReactionExtended(pReactionTable);
182   ChemPureWaterBuilder::WaterScavengerReaction    189   ChemPureWaterBuilder::WaterScavengerReaction(pReactionTable);
183 }                                                 190 }
184                                                   191 
185 //....oooOO0OOooo........oooOO0OOooo........oo    192 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
186                                                   193 
187 void EmDNAChemistry::ConstructProcess()        << 194 void EmDNAChemistry::ConstructProcess() {
188 {                                              << 
189   auto table = G4MoleculeTable::Instance();       195   auto table = G4MoleculeTable::Instance();
190   auto O2 = table->GetConfiguration("O2");        196   auto O2 = table->GetConfiguration("O2");
191   auto O2m = table->GetConfiguration("O2m");      197   auto O2m = table->GetConfiguration("O2m");
192   auto HO2 = table->GetConfiguration("HO2°"); << 198   auto HO2 = table->GetConfiguration("HO2");
193                                                   199 
194   auto e_aq = table->GetConfiguration("e_aq");    200   auto e_aq = table->GetConfiguration("e_aq");
195   auto OH = table->GetConfiguration("°OH");   << 201   auto OH = table->GetConfiguration("OH");
196   auto OHm = table->GetConfiguration("OHm");      202   auto OHm = table->GetConfiguration("OHm");
197                                                   203 
198   auto NO2 = table->GetConfiguration("NO2");      204   auto NO2 = table->GetConfiguration("NO2");
199   auto NO2m = table->GetConfiguration("NO2m");    205   auto NO2m = table->GetConfiguration("NO2m");
200   auto NO2mm = table->GetConfiguration("NO2mm"    206   auto NO2mm = table->GetConfiguration("NO2mm");
201   auto NO3m = table->GetConfiguration("NO3m");    207   auto NO3m = table->GetConfiguration("NO3m");
202   auto NO3mm = table->GetConfiguration("NO3mm"    208   auto NO3mm = table->GetConfiguration("NO3mm");
203                                                   209 
204   auto H2O2 = table->GetConfiguration("H2O2");    210   auto H2O2 = table->GetConfiguration("H2O2");
205   auto H = table->GetConfiguration("H");          211   auto H = table->GetConfiguration("H");
206                                                   212 
207   auto* H3OpB = table->GetConfiguration("H3Op( << 213   auto *H3OpB = table->GetConfiguration("H3Op(B)");
208   auto* OHmB = table->GetConfiguration("OHm(B) << 214   auto *OHmB = table->GetConfiguration("OHm(B)");
209   auto* HO2m = table->GetConfiguration("HO2m") << 215   auto *HO2m = table->GetConfiguration("HO2m");
210   auto* Om = table->GetConfiguration("Om");    << 216   auto *Om = table->GetConfiguration("Om");
211   auto* O3m = table->GetConfiguration("O3m");  << 217   auto *O3m = table->GetConfiguration("O3m");
212   auto* H3Op = table->GetConfiguration("H3Op") << 218   auto *H3Op = table->GetConfiguration("H3Op");
213                                                   219 
214   fpChemistryWorld->ConstructChemistryComponen    220   fpChemistryWorld->ConstructChemistryComponents();
215   auto confinedBox = fpChemistryWorld->GetChem    221   auto confinedBox = fpChemistryWorld->GetChemistryBoundary();
216                                                   222 
217   auto* ph = G4PhysicsListHelper::GetPhysicsLi << 223   auto *ph = G4PhysicsListHelper::GetPhysicsListHelper();
218                                                   224 
219   //==========================================    225   //===============================================================
220   // Extend vibrational to low energy             226   // Extend vibrational to low energy
221   // Anyway, solvation of electrons is taken i    227   // Anyway, solvation of electrons is taken into account from 7.4 eV
222   // So below this threshold, for now, no accu    228   // So below this threshold, for now, no accurate modeling is done
223   //                                              229   //
224   G4VProcess* process =                        << 230   G4VProcess *process = G4ProcessTable::GetProcessTable()->FindProcess(
225     G4ProcessTable::GetProcessTable()->FindPro << 231       "e-_G4DNAVibExcitation", "e-");
226                                                   232 
227   if (process) {                                  233   if (process) {
228     auto vibExcitation = (G4DNAVibExcitation*) << 234     auto vibExcitation = (G4DNAVibExcitation *) process;
229     G4VEmModel* model = vibExcitation->EmModel << 235     G4VEmModel *model = vibExcitation->EmModel();
230     auto sancheExcitationMod = dynamic_cast<G4 << 236     auto sancheExcitationMod =
                                                   >> 237         dynamic_cast<G4DNASancheExcitationModel *>(model);
231     if (sancheExcitationMod) {                    238     if (sancheExcitationMod) {
232       sancheExcitationMod->ExtendLowEnergyLimi    239       sancheExcitationMod->ExtendLowEnergyLimit(0.025 * eV);
233     }                                             240     }
234   }                                               241   }
235                                                   242 
236   //==========================================    243   //===============================================================
237   // *** Electron Solvatation ***                 244   // *** Electron Solvatation ***
238   //                                              245   //
239   process = G4ProcessTable::GetProcessTable()- << 246   process = G4ProcessTable::GetProcessTable()->FindProcess(
                                                   >> 247       "e-_G4DNAElectronSolvation", "e-");
240                                                   248 
241   if (process == nullptr) {                       249   if (process == nullptr) {
242     ph->RegisterProcess(new G4DNAElectronSolva    250     ph->RegisterProcess(new G4DNAElectronSolvation("e-_G4DNAElectronSolvation"),
243                         G4Electron::Definition    251                         G4Electron::Definition());
244   }                                               252   }
245                                                   253 
246   //==========================================    254   //===============================================================
247   // Define processes for molecules               255   // Define processes for molecules
248   //                                              256   //
249   auto* theMoleculeTable = G4MoleculeTable::In << 257   auto *theMoleculeTable = G4MoleculeTable::Instance();
250   auto iterator = theMoleculeTable->GetDefinti << 258   auto iterator =
                                                   >> 259       theMoleculeTable->GetDefintionIterator();
251   iterator.reset();                               260   iterator.reset();
252                                                   261 
253   while (iterator()) {                            262   while (iterator()) {
254     auto* moleculeDef = iterator.value();      << 263     auto *moleculeDef = iterator.value();
255                                                   264 
256     if (moleculeDef != G4H2O::Definition()) {     265     if (moleculeDef != G4H2O::Definition()) {
257       auto brown = new G4DNABrownianTransporta    266       auto brown = new G4DNABrownianTransportation("BrowianTransportation");
258       // hoang exp                                267       // hoang exp
259       auto brownTransport = new BoundedBrownia    268       auto brownTransport = new BoundedBrownianAction();
260       brownTransport->SetBoundary(*confinedBox    269       brownTransport->SetBoundary(*confinedBox);
261       brown->SetUserBrownianAction(brownTransp    270       brown->SetUserBrownianAction(brownTransport);
262       // hoang exp                                271       // hoang exp
263                                                   272 
264       ph->RegisterProcess(brown, moleculeDef);    273       ph->RegisterProcess(brown, moleculeDef);
265     }                                          << 274     } else {
266     else {                                     << 275       moleculeDef->GetProcessManager()->AddRestProcess(
267       moleculeDef->GetProcessManager()->AddRes << 276           new G4DNAElectronHoleRecombination(), 2);
268       auto brownTransport = new BoundedBrownia    277       auto brownTransport = new BoundedBrownianAction();
269       brownTransport->SetBoundary(*confinedBox    278       brownTransport->SetBoundary(*confinedBox);
270       auto dissociationProcess = new G4DNAMole << 279       auto dissociationProcess =
                                                   >> 280           new G4DNAMolecularDissociation("H2O_DNAMolecularDecay", fDecay);
271       dissociationProcess->SetUserBrownianActi    281       dissociationProcess->SetUserBrownianAction(brownTransport);
272       dissociationProcess->SetDisplacer(molecu << 282       dissociationProcess->SetDisplacer(moleculeDef,
                                                   >> 283                                         new G4DNAWaterDissociationDisplacer);
273       moleculeDef->GetProcessManager()->AddRes    284       moleculeDef->GetProcessManager()->AddRestProcess(dissociationProcess, 1);
274     }                                             285     }
275                                                   286 
276     if (moleculeDef == G4Hydrogen::Definition(    287     if (moleculeDef == G4Hydrogen::Definition()) {
277       // O2                                       288       // O2
278       auto scanvergerProcess = new G4DNAScaven << 289       auto scanvergerProcess =
                                                   >> 290           new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
279       //--------------------------------------    291       //------------------------------------------------------------------
280       // H + O2(B) -> HO2                         292       // H + O2(B) -> HO2
281       auto reactionData = new G4DNAMolecularRe << 293       auto reactionData = new G4DNAMolecularReactionData(
                                                   >> 294           1.3e10 * (1e-3 * m3 / (mole * s)), H, O2);
282       reactionData->AddProduct(HO2);              295       reactionData->AddProduct(HO2);
283       scanvergerProcess->SetReaction(H, reacti    296       scanvergerProcess->SetReaction(H, reactionData);
284       //--------------------------------------    297       //------------------------------------------------------------------
285       // H + OH-(B) -> H2O + eaq- 2.49e3 / s      298       // H + OH-(B) -> H2O + eaq- 2.49e3 / s
286       reactionData = new G4DNAMolecularReactio << 299       reactionData = new G4DNAMolecularReactionData(
287                                                << 300           2.49e7 * (1e-3 * m3 / (mole * s)), H,
                                                   >> 301           OHmB); // 2.51e7 (H + OH-)* 1e-7 (pH) = 2.48e0
288       reactionData->AddProduct(e_aq);             302       reactionData->AddProduct(e_aq);
289       scanvergerProcess->SetReaction(H, reacti    303       scanvergerProcess->SetReaction(H, reactionData);
290                                                   304 
291       // H2O2                                     305       // H2O2
292       //--------------------------------------    306       //------------------------------------------------------------------
293       // H + H202 -> OH + H20                     307       // H + H202 -> OH + H20
294       //            reactionData = new G4DNAMo    308       //            reactionData = new G4DNAMolecularReactionData(
295       //                    9.0e7 * (1e-3 * m3    309       //                    9.0e7 * (1e-3 * m3 / (mole * s)), H,H2O2);
296       //            reactionData->AddProduct(O    310       //            reactionData->AddProduct(OH);
297       //            scanvergerProcess->SetReac    311       //            scanvergerProcess->SetReaction(H,reactionData);
298       ph->RegisterProcess(scanvergerProcess, m    312       ph->RegisterProcess(scanvergerProcess, moleculeDef);
299     }                                             313     }
300     if (moleculeDef == G4Electron_aq::Definiti    314     if (moleculeDef == G4Electron_aq::Definition()) {
301       auto scanvergerProcess = new G4DNAScaven << 315       auto scanvergerProcess =
302       G4DNAMolecularReactionData* reactionData << 316           new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
                                                   >> 317       G4DNAMolecularReactionData *reactionData = nullptr;
303       //--------------------------------------    318       //------------------------------------------------------------------
304       // e_aq + O2(B) -> O2-                      319       // e_aq + O2(B) -> O2-
305       reactionData = new G4DNAMolecularReactio << 320       reactionData = new G4DNAMolecularReactionData(
                                                   >> 321           2.3e10 * (1e-3 * m3 / (mole * s)), e_aq, O2);
306       reactionData->AddProduct(O2m);              322       reactionData->AddProduct(O2m);
307       scanvergerProcess->SetReaction(e_aq, rea    323       scanvergerProcess->SetReaction(e_aq, reactionData);
308       //--------------------------------------    324       //------------------------------------------------------------------
309       // eaq- + H3O+(B) -> H + H2O 2.09e3 / s     325       // eaq- + H3O+(B) -> H + H2O 2.09e3 / s
310       reactionData =                           << 326       reactionData = new G4DNAMolecularReactionData(
311         new G4DNAMolecularReactionData(2.25e10 << 327           2.25e10 * (1e-3 * m3 / (mole * s)), e_aq,
312                                        H3OpB); << 328           H3OpB); // 2.11e10 (e_aq + H3O+) * 1.0e-7 (Ph=7) = 2.09e3
313       reactionData->AddProduct(H);                329       reactionData->AddProduct(H);
314       scanvergerProcess->SetReaction(e_aq, rea    330       scanvergerProcess->SetReaction(e_aq, reactionData);
315       //--------------------------------------    331       //------------------------------------------------------------------
316       // e_aq + NO2- -> NO2--                     332       // e_aq + NO2- -> NO2--
317       reactionData = new G4DNAMolecularReactio << 333       reactionData = new G4DNAMolecularReactionData(
                                                   >> 334           3.5e9 * (1e-3 * m3 / (mole * s)), e_aq, NO2m);
318       reactionData->AddProduct(NO2mm);            335       reactionData->AddProduct(NO2mm);
319       scanvergerProcess->SetReaction(e_aq, rea    336       scanvergerProcess->SetReaction(e_aq, reactionData);
320       //--------------------------------------    337       //------------------------------------------------------------------
321       // e_aq + NO3- -> NO3--                     338       // e_aq + NO3- -> NO3--
322       reactionData = new G4DNAMolecularReactio << 339       reactionData = new G4DNAMolecularReactionData(
                                                   >> 340           9.7e9 * (1e-3 * m3 / (mole * s)), e_aq, NO3m);
323       reactionData->AddProduct(NO3mm);            341       reactionData->AddProduct(NO3mm);
324       scanvergerProcess->SetReaction(e_aq, rea    342       scanvergerProcess->SetReaction(e_aq, reactionData);
325       //--------------------------------------    343       //------------------------------------------------------------------
326                                                   344 
327       // H2O2 + e aq → OHm + OH                 345       // H2O2 + e aq → OHm + OH
328       //            reactionData = new G4DNAMo    346       //            reactionData = new G4DNAMolecularReactionData(
329       //                    1.1e10 * (1e-3 * m    347       //                    1.1e10 * (1e-3 * m3 / (mole * s)), e_aq, H2O2);//or
330       //            reactionData->AddProduct(O    348       //            reactionData->AddProduct(OHm);
331       //            reactionData->AddProduct(O    349       //            reactionData->AddProduct(OH);
332       //            scanvergerProcess->SetReac    350       //            scanvergerProcess->SetReaction(e_aq,reactionData);
333                                                   351 
334       ph->RegisterProcess(scanvergerProcess, m    352       ph->RegisterProcess(scanvergerProcess, moleculeDef);
335     }                                             353     }
336     if (moleculeDef == G4O2::Definition()) {      354     if (moleculeDef == G4O2::Definition()) {
337       auto scanvergerProcess = new G4DNAScaven << 355       auto scanvergerProcess =
338       G4DNAMolecularReactionData* reactionData << 356           new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
                                                   >> 357       G4DNAMolecularReactionData *reactionData = nullptr;
339       //--------------------------------------    358       //------------------------------------------------------------------
340       // O2- + H3O+(B) -> HO2 + H2O 4.73e3 / s    359       // O2- + H3O+(B) -> HO2 + H2O 4.73e3 / s
341       reactionData =                           << 360       reactionData = new G4DNAMolecularReactionData(
342         new G4DNAMolecularReactionData(4.78e10 << 361           4.78e10 * (1e-3 * m3 / (mole * s)), O2m,
343                                        H3OpB); << 362           H3OpB); // 4.78e10(O2- + H3O+) * 1e-7(pH7) = 4.73e3
344       reactionData->AddProduct(HO2);              363       reactionData->AddProduct(HO2);
345       scanvergerProcess->SetReaction(O2m, reac    364       scanvergerProcess->SetReaction(O2m, reactionData);
346       ph->RegisterProcess(scanvergerProcess, m    365       ph->RegisterProcess(scanvergerProcess, moleculeDef);
347     }                                             366     }
348     if (moleculeDef == G4ParticleTable::GetPar << 367     if (moleculeDef ==
349       auto scanvergerProcess = new G4DNAScaven << 368         G4ParticleTable::GetParticleTable()->FindParticle("OHm")) {
350       G4DNAMolecularReactionData* reactionData << 369       auto scanvergerProcess =
                                                   >> 370           new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
                                                   >> 371       G4DNAMolecularReactionData *reactionData = nullptr;
351       //--------------------------------------    372       //------------------------------------------------------------------
352       // OH- + H3O+(B) -> 2H2O 1.11e4 / s         373       // OH- + H3O+(B) -> 2H2O 1.11e4 / s
353       reactionData =                           << 374       reactionData = new G4DNAMolecularReactionData(
354         new G4DNAMolecularReactionData(1.13e11 << 375           1.13e11 * (1e-3 * m3 / (mole * s)), OHm,
355                                        H3OpB); << 376           H3OpB); // 1.13e11 (H3O+ + OH-) * 1e-7 (pH=7) =1.12e4
356       scanvergerProcess->SetReaction(OHm, reac    377       scanvergerProcess->SetReaction(OHm, reactionData);
357       ph->RegisterProcess(scanvergerProcess, m    378       ph->RegisterProcess(scanvergerProcess, moleculeDef);
358     }                                             379     }
359     if (moleculeDef == G4OH::Definition()) {      380     if (moleculeDef == G4OH::Definition()) {
360       auto scanvergerProcess = new G4DNAScaven << 381       auto scanvergerProcess =
361       G4DNAMolecularReactionData* reactionData << 382           new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
                                                   >> 383       G4DNAMolecularReactionData *reactionData = nullptr;
362                                                   384 
363       //--------------------------------------    385       //------------------------------------------------------------------
364       // OH + OH-(B) -> O- + H2O 6.24e2 / s       386       // OH + OH-(B) -> O- + H2O 6.24e2 / s
365       reactionData =                           << 387       reactionData = new G4DNAMolecularReactionData(
366         new G4DNAMolecularReactionData(1.27e10 << 388           1.27e10 * (1e-3 * m3 / (mole * s)), OH,
367                                        OHmB);  << 389           OHmB); // 6.30e9 (OH + OH-) * 1e-7 (pH) = 6.24e2
368       reactionData->AddProduct(Om);               390       reactionData->AddProduct(Om);
369       scanvergerProcess->SetReaction(OH, react    391       scanvergerProcess->SetReaction(OH, reactionData);
370                                                   392 
371       //--------------------------------------    393       //------------------------------------------------------------------
372       // OH + NO2- -> NO2 + OH-                   394       // OH + NO2- -> NO2 + OH-
373       reactionData = new G4DNAMolecularReactio << 395       reactionData = new G4DNAMolecularReactionData(
                                                   >> 396           8e9 * (1e-3 * m3 / (mole * s)), OH, NO2m);
374       reactionData->AddProduct(NO2);              397       reactionData->AddProduct(NO2);
375       reactionData->AddProduct(OHm);              398       reactionData->AddProduct(OHm);
376       scanvergerProcess->SetReaction(OH, react    399       scanvergerProcess->SetReaction(OH, reactionData);
377       ph->RegisterProcess(scanvergerProcess, m    400       ph->RegisterProcess(scanvergerProcess, moleculeDef);
378     }                                             401     }
379     if (moleculeDef == G4ParticleTable::GetPar << 402     if (moleculeDef ==
380       auto scanvergerProcess = new G4DNAScaven << 403         G4ParticleTable::GetParticleTable()->FindParticle("HO_2m")) {
381       G4DNAMolecularReactionData* reactionData << 404       auto scanvergerProcess =
                                                   >> 405           new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
                                                   >> 406       G4DNAMolecularReactionData *reactionData = nullptr;
382       //--------------------------------------    407       //------------------------------------------------------------------
383       // HO2- + H3O+(B) -> H2O2 + H2O 4.98e3 /    408       // HO2- + H3O+(B) -> H2O2 + H2O 4.98e3 / s
384       reactionData =                           << 409       reactionData = new G4DNAMolecularReactionData(
385         new G4DNAMolecularReactionData(4.78e10 << 410           4.78e10 * (1e-3 * m3 / (mole * s)), HO2m,
386                                        H3OpB); << 411           H3OpB); // 5.00e10 (H3O+ + HO2-) * 1e-7(pH) = 4.95e3
387       reactionData->AddProduct(H2O2);             412       reactionData->AddProduct(H2O2);
388       scanvergerProcess->SetReaction(HO2m, rea    413       scanvergerProcess->SetReaction(HO2m, reactionData);
389       ph->RegisterProcess(scanvergerProcess, m    414       ph->RegisterProcess(scanvergerProcess, moleculeDef);
390     }                                             415     }
391                                                   416 
392     if (moleculeDef == G4HO2::Definition()) {     417     if (moleculeDef == G4HO2::Definition()) {
393       auto scanvergerProcess = new G4DNAScaven << 418       auto scanvergerProcess =
394       G4DNAMolecularReactionData* reactionData << 419           new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
                                                   >> 420       G4DNAMolecularReactionData *reactionData = nullptr;
395       //--------------------------------------    421       //------------------------------------------------------------------
396       // HO2 + OH-(B) -> O2- + H2O 6.24e2 / s     422       // HO2 + OH-(B) -> O2- + H2O 6.24e2 / s
397       reactionData = new G4DNAMolecularReactio << 423       reactionData = new G4DNAMolecularReactionData(
398                                                << 424           1.27e10 * (1e-3 * m3 / (mole * s)), HO2,
                                                   >> 425           OHmB); // 6.30e9(HO2 + OH-)*1e-7 (pH) = 6.24e2
399       reactionData->AddProduct(O2m);              426       reactionData->AddProduct(O2m);
400       scanvergerProcess->SetReaction(HO2, reac    427       scanvergerProcess->SetReaction(HO2, reactionData);
401       //--------------------------------------    428       //------------------------------------------------------------------
402       ph->RegisterProcess(scanvergerProcess, m    429       ph->RegisterProcess(scanvergerProcess, moleculeDef);
403     }                                             430     }
404     if (moleculeDef == G4Oxygen::Definition())    431     if (moleculeDef == G4Oxygen::Definition()) {
405       auto scanvergerProcess = new G4DNAScaven << 432       auto scanvergerProcess =
406       G4DNAMolecularReactionData* reactionData << 433           new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
                                                   >> 434       G4DNAMolecularReactionData *reactionData = nullptr;
407       //--------------------------------------    435       //------------------------------------------------------------------
408       // O- + H3O+(B) -> OH + H2O 4.73e3 / s      436       // O- + H3O+(B) -> OH + H2O 4.73e3 / s
409       reactionData =                           << 437       reactionData = new G4DNAMolecularReactionData(
410         new G4DNAMolecularReactionData(4.78e10 << 438           4.78e10 * (1e-3 * m3 / (mole * s)), Om,
411                                        H3OpB); << 439           H3OpB); // 4.78e10 (H3O+ + O2-) * 1e-7(pH) = 4.73e3
412       reactionData->AddProduct(OH);               440       reactionData->AddProduct(OH);
413       scanvergerProcess->SetReaction(Om, react    441       scanvergerProcess->SetReaction(Om, reactionData);
414       ph->RegisterProcess(scanvergerProcess, m    442       ph->RegisterProcess(scanvergerProcess, moleculeDef);
415     }                                             443     }
416     if (moleculeDef == G4O3::Definition()) {      444     if (moleculeDef == G4O3::Definition()) {
417       auto scanvergerProcess = new G4DNAScaven << 445       auto scanvergerProcess =
418       G4DNAMolecularReactionData* reactionData << 446           new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
                                                   >> 447       G4DNAMolecularReactionData *reactionData = nullptr;
419       //--------------------------------------    448       //------------------------------------------------------------------
420       // O3- + H3O+(B) -> OH + O2 + H2O 8.91e3    449       // O3- + H3O+(B) -> OH + O2 + H2O 8.91e3 / s
421       reactionData =                           << 450       reactionData = new G4DNAMolecularReactionData(
422         new G4DNAMolecularReactionData(9.0e10  << 451           9.0e10 * (1e-3 * m3 / (mole * s)), O3m,
423                                        H3OpB); << 452           H3OpB); // 9.0e10 (O3- + H3O+) * 1e-7(pH) = 8.91e3
424       reactionData->AddProduct(OH);               453       reactionData->AddProduct(OH);
425       reactionData->AddProduct(O2);               454       reactionData->AddProduct(O2);
426       //--------------------------------------    455       //------------------------------------------------------------------
427       scanvergerProcess->SetReaction(O3m, reac    456       scanvergerProcess->SetReaction(O3m, reactionData);
428       ph->RegisterProcess(scanvergerProcess, m    457       ph->RegisterProcess(scanvergerProcess, moleculeDef);
429     }                                             458     }
430     if (moleculeDef == G4H3O::Definition()) {     459     if (moleculeDef == G4H3O::Definition()) {
431       auto scanvergerProcess = new G4DNAScaven << 460       auto scanvergerProcess =
432       G4DNAMolecularReactionData* reactionData << 461           new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
                                                   >> 462       G4DNAMolecularReactionData *reactionData = nullptr;
433       //--------------------------------------    463       //------------------------------------------------------------------
434       // H3O+ + OH-(B) -> 2H2O 1.11e4 / s         464       // H3O+ + OH-(B) -> 2H2O 1.11e4 / s
435       reactionData =                           << 465       reactionData = new G4DNAMolecularReactionData(
436         new G4DNAMolecularReactionData(1.13e11 << 466           1.13e11 * (1e-3 * m3 / (mole * s)), H3Op,
437                                        OHmB);  << 467           OHmB); // 1.13e11 (H3O+ + OH-) * 1e-7 (pH=7) = 1.12e4
438       scanvergerProcess->SetReaction(H3Op, rea    468       scanvergerProcess->SetReaction(H3Op, reactionData);
439       ph->RegisterProcess(scanvergerProcess, m    469       ph->RegisterProcess(scanvergerProcess, moleculeDef);
440     }                                             470     }
441     if (moleculeDef == G4H2O2::Definition()) {    471     if (moleculeDef == G4H2O2::Definition()) {
442       auto scanvergerProcess = new G4DNAScaven << 472       auto scanvergerProcess =
443       G4DNAMolecularReactionData* reactionData << 473           new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
                                                   >> 474       G4DNAMolecularReactionData *reactionData = nullptr;
444       //--------------------------------------    475       //------------------------------------------------------------------
445       // H2O2 + OH-(B) -> HO2- + H2O 4.66e2 /     476       // H2O2 + OH-(B) -> HO2- + H2O 4.66e2 / s
446       reactionData =                           << 477       reactionData = new G4DNAMolecularReactionData(
447         new G4DNAMolecularReactionData(1.27e10 << 478           1.27e10 * (1e-3 * m3 / (mole * s)), H2O2,
448                                        OHmB);  << 479           OHmB); // 4.71e8 (H2O2 + OH-) * 1e-7 (pH) = 4.66e1
449       reactionData->AddProduct(HO2m);             480       reactionData->AddProduct(HO2m);
450       scanvergerProcess->SetReaction(H2O2, rea    481       scanvergerProcess->SetReaction(H2O2, reactionData);
451       ph->RegisterProcess(scanvergerProcess, m    482       ph->RegisterProcess(scanvergerProcess, moleculeDef);
452     }                                             483     }
453   }                                               484   }
454   G4DNAChemistryManager::Instance()->Initializ    485   G4DNAChemistryManager::Instance()->Initialize();
455 }                                                 486 }
456                                                   487 
457 //....oooOO0OOooo........oooOO0OOooo........oo    488 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
458                                                   489 
459 void EmDNAChemistry::ConstructTimeStepModel(G4 << 490 void EmDNAChemistry::ConstructTimeStepModel(
460 {                                              << 491     G4DNAMolecularReactionTable *reactionTable) {
461   auto reactionRadiusComputer = new G4DNASmolu    492   auto reactionRadiusComputer = new G4DNASmoluchowskiReactionModel();
462   reactionTable->PrintTable(reactionRadiusComp    493   reactionTable->PrintTable(reactionRadiusComputer);
463   auto stepByStep = new G4DNAMolecularStepBySt    494   auto stepByStep = new G4DNAMolecularStepByStepModel();
464   stepByStep->SetReactionModel(reactionRadiusC    495   stepByStep->SetReactionModel(reactionRadiusComputer);
465   RegisterTimeStepModel(stepByStep, 0);           496   RegisterTimeStepModel(stepByStep, 0);
466 }                                                 497 }
467                                                   498 
468 //....oooOO0OOooo........oooOO0OOooo........oo << 
469                                                   499