Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // 27 // G4EmDNAChemistryForPlasmids.cc 28 // 29 // Created on: Feb 10, 2021 30 // Authors: J. Naoki D. Kondo 31 // W. G. Shin, J. Ramos-Mendez a 32 // 33 /// \file G4EmDNAChemistryForPlasmids.cc 34 /// \brief Implementation of the Chemistry par 35 36 #include "G4EmDNAChemistryForPlasmids.hh" 37 38 #include "G4DNAChemistryManager.hh" 39 #include "G4DNAGenericIonsManager.hh" 40 #include "G4DNAWaterDissociationDisplacer.hh" 41 #include "G4DNAWaterExcitationStructure.hh" 42 #include "G4PhysicalConstants.hh" 43 #include "G4ProcessManager.hh" 44 #include "G4SystemOfUnits.hh" 45 46 // *** Processes and models for Geant4-DNA 47 48 #include "G4DNABrownianTransportation.hh" 49 #include "G4DNAElectronHoleRecombination.hh" 50 #include "G4DNAElectronSolvation.hh" 51 #include "G4DNAIRT.hh" 52 #include "G4DNAMolecularDissociation.hh" 53 #include "G4DNAMolecularIRTModel.hh" 54 #include "G4DNAMolecularReactionTable.hh" 55 #include "G4DNASancheExcitationModel.hh" 56 #include "G4DNAVibExcitation.hh" 57 #include "G4VDNAReactionModel.hh" 58 59 // particles 60 61 #include "PlasmidMolecules.hh" 62 #include "ScavengerMolecules.hh" 63 64 #include "G4BuilderType.hh" 65 #include "G4Electron.hh" 66 #include "G4Electron_aq.hh" 67 #include "G4FakeMolecule.hh" 68 #include "G4GenericIon.hh" 69 #include "G4H2.hh" 70 #include "G4H2O.hh" 71 #include "G4H2O2.hh" 72 #include "G4H3O.hh" 73 #include "G4HO2.hh" 74 #include "G4Hydrogen.hh" 75 #include "G4MoleculeTable.hh" 76 #include "G4O2.hh" 77 #include "G4O3.hh" 78 #include "G4OH.hh" 79 #include "G4Oxygen.hh" 80 #include "G4PhysicsListHelper.hh" 81 #include "G4Proton.hh" 82 83 /****/ 84 #include "G4DNAMoleculeEncounterStepper.hh" 85 #include "G4MolecularConfiguration.hh" 86 #include "G4ProcessTable.hh" 87 /****/ 88 // factory 89 #include "G4PhysicsConstructorFactory.hh" 90 #include "G4ChemDissociationChannels_option1.h 91 G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry 92 93 //....oooOO0OOooo........oooOO0OOooo........oo 94 95 G4EmDNAChemistryForPlasmids::G4EmDNAChemistryF 96 { 97 G4DNAChemistryManager::Instance()->SetChemis 98 99 fDMSO = 0; 100 fOxygen = 0; 101 } 102 103 //....oooOO0OOooo........oooOO0OOooo........oo 104 105 G4EmDNAChemistryForPlasmids::G4EmDNAChemistryF 106 : G4VUserChemistryList(true) 107 { 108 G4DNAChemistryManager::Instance()->SetChemis 109 110 fDMSO = dmso; 111 fOxygen = oxygen; 112 } 113 114 //....oooOO0OOooo........oooOO0OOooo........oo 115 116 void G4EmDNAChemistryForPlasmids::ConstructMol 117 { 118 G4ChemDissociationChannels_option1::Construc 119 auto molTab = G4MoleculeTable::Instance(); 120 121 molTab->CreateConfiguration("DMSO", G4DMSO:: 122 123 molTab->CreateConfiguration("O2", G4O2::Defi 124 molTab->GetConfiguration("O2")->SetVanDerVaa 125 molTab->CreateConfiguration("Oxygen", G4Oxyg 126 127 molTab->CreateConfiguration("Deoxyribose", G 128 129 molTab->CreateConfiguration( 130 "Damaged_DeoxyriboseOH", G4DNA_DamagedDeox 131 molTab->CreateConfiguration( 132 "Damaged_DeoxyriboseH", G4DNA_DamagedDeoxy 133 molTab->CreateConfiguration( 134 "Damaged_DeoxyriboseEAQ", G4DNA_DamagedDeo 135 } 136 137 //....oooOO0OOooo........oooOO0OOooo........oo 138 139 void G4EmDNAChemistryForPlasmids::ConstructDis 140 { 141 G4ChemDissociationChannels_option1::Construc 142 } 143 144 //....oooOO0OOooo........oooOO0OOooo........oo 145 146 void G4EmDNAChemistryForPlasmids::ConstructRea 147 G4DNAMolecularReactionTable* theReactionTabl 148 { 149 // fReactionTable = theReactionTable; 150 151 //----------------------------------- 152 // Get the molecular configuration 153 auto molTab = G4MoleculeTable::Instance(); 154 155 auto OH = molTab->GetConfiguration("°OH"); 156 auto OHm = molTab->GetConfiguration("OHm"); 157 auto e_aq = molTab->GetConfiguration("e_aq") 158 auto H2 = molTab->GetConfiguration("H2"); 159 auto H3Op = molTab->GetConfiguration("H3Op") 160 auto H = molTab->GetConfiguration("H"); 161 auto H2O2 = molTab->GetConfiguration("H2O2") 162 163 //------------------------------------------ 164 // Type II 165 //------------------------------------------ 166 // e_aq + *OH -> OH- prob: 0.49 167 auto reactionData = 168 new G4DNAMolecularReactionData(2.95e10 * ( 169 reactionData->AddProduct(OHm); 170 reactionData->SetReactionType(1); 171 theReactionTable->SetReaction(reactionData); 172 //------------------------------------------ 173 // e_aq + H2O2 -> OH- + *OH prob: 0.1 174 reactionData = new G4DNAMolecularReactionDat 175 reactionData->AddProduct(OHm); 176 reactionData->AddProduct(OH); 177 reactionData->SetReactionType(1); 178 theReactionTable->SetReaction(reactionData); 179 //------------------------------------------ 180 // *OH + *H -> H2O prob: 0.33 181 reactionData = new G4DNAMolecularReactionDat 182 reactionData->SetReactionType(1); 183 theReactionTable->SetReaction(reactionData); 184 //------------------------------------------ 185 // H + H2O2 -> OH prob: 0.00 186 reactionData = new G4DNAMolecularReactionDat 187 reactionData->AddProduct(OH); 188 reactionData->SetReactionType(1); 189 theReactionTable->SetReaction(reactionData); 190 //------------------------------------------ 191 // *OH + *OH -> H2O2 prob: 0. 192 reactionData = new G4DNAMolecularReactionDat 193 reactionData->AddProduct(H2O2); 194 reactionData->SetReactionType(1); 195 theReactionTable->SetReaction(reactionData); 196 //------------------------------------------ 197 198 //------------------------------------------ 199 // Type III 200 //------------------------------------------ 201 // e_aq + e_aq + 2H2O -> H2 + 2OH- 202 reactionData = new G4DNAMolecularReactionDat 203 reactionData->AddProduct(OHm); 204 reactionData->AddProduct(OHm); 205 reactionData->AddProduct(H2); 206 reactionData->SetReactionType(0); 207 theReactionTable->SetReaction(reactionData); 208 //------------------------------------------ 209 // H3O+ + OH- -> 2H2O 210 reactionData = new G4DNAMolecularReactionDat 211 reactionData->SetReactionType(0); 212 theReactionTable->SetReaction(reactionData); 213 //------------------------------------------ 214 215 //------------------------------------------ 216 // Type IV 217 //------------------------------------------ 218 // e_aq + H3O+ -> H* + H2O prob: 0.04 219 reactionData = new G4DNAMolecularReactionDat 220 reactionData->AddProduct(H); 221 reactionData->SetReactionType(1); 222 theReactionTable->SetReaction(reactionData); 223 //------------------------------------------ 224 225 //------------------------------------------ 226 // Type V 227 // First order reaction 228 //------------------------------------------ 229 // e_aq + *H -> OH- + H2 230 reactionData = new G4DNAMolecularReactionDat 231 reactionData->AddProduct(OHm); 232 reactionData->AddProduct(H2); 233 reactionData->SetReactionType(0); 234 theReactionTable->SetReaction(reactionData); 235 //------------------------------------------ 236 // *H + *H -> H2 237 reactionData = new G4DNAMolecularReactionDat 238 reactionData->AddProduct(H2); 239 reactionData->SetReactionType(0); 240 theReactionTable->SetReaction(reactionData); 241 242 if (fDMSO > 0) DeclareDMSOAndDNAReactions(th 243 244 if (fOxygen > 0) DeclareOxygenReactions(theR 245 } 246 247 //....oooOO0OOooo........oooOO0OOooo........oo 248 249 void G4EmDNAChemistryForPlasmids::ConstructPro 250 { 251 G4PhysicsListHelper* ph = G4PhysicsListHelpe 252 253 //========================================== 254 // Extend vibrational to low energy 255 // Anyway, solvation of electrons is taken i 256 // So below this threshold, for now, no accu 257 // 258 G4VProcess* process = 259 G4ProcessTable::GetProcessTable()->FindPro 260 261 if (process) { 262 G4DNAVibExcitation* vibExcitation = (G4DNA 263 G4VEmModel* model = vibExcitation->EmModel 264 G4DNASancheExcitationModel* sancheExcitati 265 dynamic_cast<G4DNASancheExcitationModel* 266 if (sancheExcitationMod) { 267 sancheExcitationMod->ExtendLowEnergyLimi 268 } 269 } 270 271 //========================================== 272 // *** Electron Solvatation *** 273 // 274 process = G4ProcessTable::GetProcessTable()- 275 276 if (process == 0) { 277 ph->RegisterProcess(new G4DNAElectronSolva 278 G4Electron::Definition 279 } 280 281 //========================================== 282 // Define processes for molecules 283 // 284 G4MoleculeTable* theMoleculeTable = G4Molecu 285 G4MoleculeDefinitionIterator iterator = theM 286 iterator.reset(); 287 while (iterator()) { 288 G4MoleculeDefinition* moleculeDef = iterat 289 290 if (moleculeDef != G4H2O::Definition()) { 291 // G4cout << "Brownian motion added for: 292 // G4DNABrownianTransportation* bro 293 // ph->RegisterProcess(brown, molec 294 } 295 else { 296 moleculeDef->GetProcessManager()->AddRes 297 G4DNAMolecularDissociation* dissociation 298 new G4DNAMolecularDissociation("H2O_DN 299 dissociationProcess->SetDisplacer(molecu 300 dissociationProcess->SetVerboseLevel(3); 301 302 moleculeDef->GetProcessManager()->AddRes 303 } 304 /* 305 * Warning : end of particles and processe 306 * EM Physics builders 307 */ 308 } 309 310 G4DNAChemistryManager::Instance()->Initializ 311 } 312 313 //....oooOO0OOooo........oooOO0OOooo........oo 314 315 void G4EmDNAChemistryForPlasmids::ConstructTim 316 317 { 318 RegisterTimeStepModel(new G4DNAMolecularIRTM 319 } 320 321 //....oooOO0OOooo........oooOO0OOooo........oo 322 323 void G4EmDNAChemistryForPlasmids::DeclareDMSOA 324 G4DNAMolecularReactionTable* theReactionTabl 325 { 326 auto molTab = G4MoleculeTable::Instance(); 327 auto DMSO = molTab->GetConfiguration("DMSO") 328 auto OH = molTab->GetConfiguration("°OH"); 329 auto H = molTab->GetConfiguration("H"); 330 auto e_aq = molTab->GetConfiguration("e_aq") 331 auto deoxyribose = 332 molTab->GetConfiguration("Deoxyribose"); 333 auto damage_deoxyribose_OH = 334 molTab->GetConfiguration("Damaged_Deoxyr 335 auto damage_deoxyribose_H = 336 molTab->GetConfiguration("Damaged_Deoxyr 337 auto damage_deoxyribose_eaq = 338 molTab->GetConfiguration("Damaged_Deoxyr 339 340 G4double DNA_OH_Rate = 1.32E7 * std::pow(fDM 341 342 // DMSO Reactions 343 // OH + DMSO 344 auto reactionData = new G4DNAMolecularReacti 345 theReactionTable->SetReaction(reactionData); 346 //------------------------------------------ 347 // H + DMSO 348 reactionData = new G4DNAMolecularReactionDat 349 theReactionTable->SetReaction(reactionData); 350 //------------------------------------------ 351 // e-_aq + DMSO 352 reactionData = new G4DNAMolecularReactionDat 353 theReactionTable->SetReaction(reactionData); 354 //------------------------------------------ 355 356 //------------------------------------------ 357 // DNA Type 358 //------------------------------------------ 359 // DNA + OH -> Damage 360 reactionData = 361 new G4DNAMolecularReactionData(DNA_OH_Rate 362 reactionData->AddProduct(damage_deoxyribose_ 363 theReactionTable->SetReaction(reactionData); 364 //------------------------------------------ 365 // DNA + H 366 reactionData = new G4DNAMolecularReactionDat 367 reactionData->AddProduct(damage_deoxyribose_ 368 theReactionTable->SetReaction(reactionData); 369 //------------------------------------------ 370 // DNA + e-_aq 371 reactionData = 372 new G4DNAMolecularReactionData(0.01e9 * (1 373 reactionData->AddProduct(damage_deoxyribose_ 374 theReactionTable->SetReaction(reactionData); 375 //------------------------------------------ 376 } 377 378 //....oooOO0OOooo........oooOO0OOooo........oo 379 380 void G4EmDNAChemistryForPlasmids::DeclareOxyge 381 G4DNAMolecularReactionTable* theReactionTabl 382 { 383 auto molTab = G4MoleculeTable::Instance(); 384 auto Oxygen = molTab->GetConfiguration("Oxyg 385 auto H = molTab->GetConfiguration("H"); 386 auto e_aq = molTab->GetConfiguration("e_aq") 387 auto O2m = molTab->GetConfiguration("O2m"); 388 auto HO2 = molTab->GetConfiguration("HO2°") 389 auto O2 = molTab->GetConfiguration("O2"); 390 auto OH = molTab->GetConfiguration("°OH"); 391 392 // Oxygen Reactions 393 // e_aq + O2B 394 auto reactionData = 395 new G4DNAMolecularReactionData((fOxygen * 396 reactionData->AddProduct(O2m); 397 theReactionTable->SetReaction(reactionData); 398 //------------------------------------------ 399 // H + O2B 400 reactionData = new G4DNAMolecularReactionDat 401 reactionData->AddProduct(HO2); 402 theReactionTable->SetReaction(reactionData); 403 //------------------------------------------ 404 // e_aq + O2 405 reactionData = new G4DNAMolecularReactionDat 406 reactionData->AddProduct(O2m); 407 reactionData->SetReactionType(1); 408 theReactionTable->SetReaction(reactionData); 409 //------------------------------------------ 410 // H + O2 411 reactionData = new G4DNAMolecularReactionDat 412 reactionData->AddProduct(HO2); 413 reactionData->SetReactionType(1); 414 theReactionTable->SetReaction(reactionData); 415 //------------------------------------------ 416 // OH + HO2 417 reactionData = new G4DNAMolecularReactionDat 418 reactionData->AddProduct(O2); 419 reactionData->SetReactionType(1); 420 theReactionTable->SetReaction(reactionData); 421 //------------------------------------------ 422 } 423 424 //....oooOO0OOooo........oooOO0OOooo........oo 425