Geant4 Cross Reference |
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