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 28 #include "G4EmDNAChemistry_option2.hh" 29 #include "G4DNAMolecule.hh" 30 #include "G4DNAChemistryManager.hh" 31 #include "G4DNASmoluchowskiReactionModel.hh" 32 #include "G4PhysicalConstants.hh" 33 #include "G4SystemOfUnits.hh" 34 #include "G4DNAWaterDissociationDisplacer.hh" 35 #include "G4DNAWaterExcitationStructure.hh" 36 #include "G4ProcessManager.hh" 37 #include "G4DNAElectronSolvation.hh" 38 #include "G4DNAVibExcitation.hh" 39 #include "G4DNASancheExcitationModel.hh" 40 #include "G4DNAMolecularDissociation.hh" 41 #include "G4DNABrownianTransportation.hh" 42 #include "G4DNAMolecularReactionTable.hh" 43 #include "G4DNAMolecularStepByStepModel.hh" 44 #include "G4DNAElectronHoleRecombination.hh" 45 #include "G4Electron.hh" 46 #include "G4MoleculeTable.hh" 47 #include "G4H2O.hh" 48 #include "G4H2.hh" 49 #include "G4Hydrogen.hh" 50 #include "G4OH.hh" 51 #include "G4H3O.hh" 52 #include "G4Electron_aq.hh" 53 #include "G4H2O2.hh" 54 #include "G4PhysicsListHelper.hh" 55 #include "G4ProcessTable.hh" 56 #include "G4MolecularConfiguration.hh" 57 #include "G4PhysicsConstructorFactory.hh" 58 #include "G4VDNAReactionModel.hh" 59 #include "G4ChemDissociationChannels.hh" 60 61 G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry_option2); 62 63 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 64 65 G4EmDNAChemistry_option2::G4EmDNAChemistry_option2() 66 : G4VUserChemistryList(true) 67 { 68 G4DNAChemistryManager::Instance()->SetChemistryList(this); 69 } 70 71 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 72 73 void G4EmDNAChemistry_option2::ConstructMolecule() 74 { 75 G4ChemDissociationChannels::ConstructMolecule(); 76 //____________________________________________________________________________ 77 78 G4Deoxyribose::Definition(); 79 G4Phosphate::Definition(); 80 G4Adenine::Definition(); 81 G4Guanine::Definition(); 82 G4Thymine::Definition(); 83 G4Cytosine::Definition(); 84 G4Histone::Definition(); 85 //damaged molecules 86 G4DamagedDeoxyribose::Definition(); 87 G4DamagedAdenine::Definition(); 88 G4DamagedGuanine::Definition(); 89 G4DamagedThymine::Definition(); 90 G4DamagedCytosine::Definition(); 91 G4ModifiedHistone::Definition(); 92 93 //________________DNA_______________________________________________ 94 95 G4MoleculeTable::Instance()-> 96 CreateConfiguration("Deoxyribose",G4Deoxyribose::Definition()); 97 G4MoleculeTable::Instance()-> 98 CreateConfiguration("Phosphate",G4Phosphate::Definition()); 99 G4MoleculeTable::Instance()-> 100 CreateConfiguration("Adenine",G4Adenine::Definition()); 101 G4MoleculeTable::Instance()-> 102 CreateConfiguration("Thymine",G4Thymine::Definition()); 103 G4MoleculeTable::Instance()-> 104 CreateConfiguration("Guanine",G4Guanine::Definition()); 105 G4MoleculeTable::Instance()-> 106 CreateConfiguration("Cytosine",G4Cytosine::Definition()); 107 G4MoleculeTable::Instance()-> 108 CreateConfiguration("Histone",G4Histone::Definition()); 109 110 //damaged DNAElement Configuration 111 112 G4MoleculeTable::Instance()-> 113 CreateConfiguration("Damaged_Deoxyribose", 114 G4DamagedDeoxyribose::Definition()); 115 G4MoleculeTable::Instance()-> 116 CreateConfiguration("Damaged_Adenine", 117 G4DamagedAdenine::Definition()); 118 G4MoleculeTable::Instance()-> 119 CreateConfiguration("Damaged_Thymine", 120 G4DamagedThymine::Definition()); 121 G4MoleculeTable::Instance()-> 122 CreateConfiguration("Damaged_Guanine", 123 G4DamagedGuanine::Definition()); 124 G4MoleculeTable::Instance()-> 125 CreateConfiguration("Damaged_Cytosine", 126 G4DamagedCytosine::Definition()); 127 } 128 129 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 130 131 void G4EmDNAChemistry_option2::ConstructDissociationChannels() 132 { 133 G4ChemDissociationChannels::ConstructDissociationChannels(); 134 } 135 136 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 137 138 void G4EmDNAChemistry_option2::ConstructReactionTable( 139 G4DNAMolecularReactionTable* theReactionTable) 140 { 141 //----------------------------------- 142 //Get the molecular configuration 143 G4MolecularConfiguration* OH = 144 G4MoleculeTable::Instance()->GetConfiguration("°OH"); 145 G4MolecularConfiguration* OHm = 146 G4MoleculeTable::Instance()->GetConfiguration("OHm"); 147 G4MolecularConfiguration* e_aq = 148 G4MoleculeTable::Instance()->GetConfiguration("e_aq"); 149 G4MolecularConfiguration* H2 = 150 G4MoleculeTable::Instance()->GetConfiguration("H2"); 151 G4MolecularConfiguration* H3Op = 152 G4MoleculeTable::Instance()->GetConfiguration("H3Op"); 153 G4MolecularConfiguration* H = 154 G4MoleculeTable::Instance()->GetConfiguration("H"); 155 G4MolecularConfiguration* H2O2 = 156 G4MoleculeTable::Instance()->GetConfiguration("H2O2"); 157 158 G4MolecularConfiguration* deoxyribose = 159 G4MoleculeTable::Instance()->GetConfiguration("Deoxyribose"); 160 G4MolecularConfiguration* adenine = 161 G4MoleculeTable::Instance()->GetConfiguration("Adenine"); 162 G4MolecularConfiguration* guanine = 163 G4MoleculeTable::Instance()->GetConfiguration("Guanine"); 164 G4MolecularConfiguration* thymine = 165 G4MoleculeTable::Instance()->GetConfiguration("Thymine"); 166 G4MolecularConfiguration* cytosine = 167 G4MoleculeTable::Instance()->GetConfiguration("Cytosine"); 168 G4MolecularConfiguration* histone = 169 G4MoleculeTable::Instance()->GetConfiguration("Histone"); 170 171 G4MolecularConfiguration* damage_deoxyribose = 172 G4MoleculeTable::Instance()->GetConfiguration("Damaged_Deoxyribose"); 173 G4MolecularConfiguration* damage_adenine = 174 G4MoleculeTable::Instance()->GetConfiguration("Damaged_Adenine"); 175 G4MolecularConfiguration* damage_guanine = 176 G4MoleculeTable::Instance()->GetConfiguration("Damaged_Guanine"); 177 G4MolecularConfiguration* damage_thymine = 178 G4MoleculeTable::Instance()->GetConfiguration("Damaged_Thymine"); 179 G4MolecularConfiguration* damage_cytosine = 180 G4MoleculeTable::Instance()->GetConfiguration("Damaged_Cytosine"); 181 182 //------------------------------------------------------------------ 183 // e_aq + e_aq + 2H2O -> H2 + 2OH- 184 G4DNAMolecularReactionData* reactionData = 185 new G4DNAMolecularReactionData( 186 0.5e10 * (1e-3 * m3 / (mole * s)), e_aq, e_aq); 187 reactionData->AddProduct(OHm); 188 reactionData->AddProduct(OHm); 189 reactionData->AddProduct(H2); 190 theReactionTable->SetReaction(reactionData); 191 //------------------------------------------------------------------ 192 // e_aq + *OH -> OH- 193 reactionData = new G4DNAMolecularReactionData( 194 2.95e10 * (1e-3 * m3 / (mole * s)), e_aq, OH); 195 reactionData->AddProduct(OHm); 196 theReactionTable->SetReaction(reactionData); 197 //------------------------------------------------------------------ 198 // e_aq + H* + H2O -> H2 + OH- 199 reactionData = new G4DNAMolecularReactionData( 200 2.65e10 * (1e-3 * m3 / (mole * s)), e_aq, H); 201 reactionData->AddProduct(OHm); 202 reactionData->AddProduct(H2); 203 theReactionTable->SetReaction(reactionData); 204 //------------------------------------------------------------------ 205 // e_aq + H3O+ -> H* + H2O 206 reactionData = new G4DNAMolecularReactionData( 207 2.11e10 * (1e-3 * m3 / (mole * s)), e_aq, H3Op); 208 reactionData->AddProduct(H); 209 theReactionTable->SetReaction(reactionData); 210 211 //------------------------------------------------------------------ 212 // e_aq + H2O2 -> OH- + *OH 213 reactionData = new G4DNAMolecularReactionData( 214 1.41e10 * (1e-3 * m3 / (mole * s)), e_aq, H2O2); 215 reactionData->AddProduct(OHm); 216 reactionData->AddProduct(OH); 217 theReactionTable->SetReaction(reactionData); 218 //------------------------------------------------------------------ 219 // *OH + *OH -> H2O2 220 reactionData = new G4DNAMolecularReactionData( 221 0.44e10 * (1e-3 * m3 / (mole * s)), OH, OH); 222 reactionData->AddProduct(H2O2); 223 theReactionTable->SetReaction(reactionData); 224 //------------------------------------------------------------------ 225 // *OH + *H -> H2O 226 theReactionTable->SetReaction( 227 1.44e10 * (1e-3 * m3 / (mole * s)), OH, H); 228 //------------------------------------------------------------------ 229 // *H + *H -> H2 230 reactionData = new G4DNAMolecularReactionData( 231 1.20e10 * (1e-3 * m3 / (mole * s)), H, H); 232 reactionData->AddProduct(H2); 233 theReactionTable->SetReaction(reactionData); 234 //------------------------------------------------------------------ 235 // H3O+ + OH- -> 2H2O 236 theReactionTable->SetReaction( 237 1.43e11 * (1e-3 * m3 / (mole * s)), H3Op, OHm); 238 //------------------------------------------------------------------ 239 240 // DNA additions 241 242 // OH and DNA 243 244 // 2-Deoxyribose + OH -> damagedDeoxyribose 245 reactionData = new G4DNAMolecularReactionData( 246 1.80e9*(1e-3*m3/(mole*s)), deoxyribose, OH); 247 reactionData->AddProduct(damage_deoxyribose); 248 theReactionTable->SetReaction(reactionData); 249 250 // adenine + OH -> ... 251 reactionData = new G4DNAMolecularReactionData( 252 6.10e9*(1e-3*m3/(mole*s)), adenine, OH); 253 reactionData->AddProduct(damage_adenine); 254 theReactionTable->SetReaction(reactionData); 255 256 // guanine + OH -> ... 257 reactionData = new G4DNAMolecularReactionData( 258 9.20e9*(1e-3*m3/(mole*s)), guanine, OH); 259 reactionData->AddProduct(damage_guanine); 260 theReactionTable->SetReaction(reactionData); 261 262 // thymine + OH -> ... 263 reactionData = new G4DNAMolecularReactionData( 264 6.40e9*(1e-3*m3/(mole*s)), thymine, OH); 265 reactionData->AddProduct(damage_thymine); 266 theReactionTable->SetReaction(reactionData); 267 268 // cytosine + OH -> ... 269 reactionData = new G4DNAMolecularReactionData( 270 6.10e9*(1e-3*m3/(mole*s)), cytosine, OH); 271 reactionData->AddProduct(damage_cytosine); 272 theReactionTable->SetReaction(reactionData); 273 274 // Hydrated e- and DNA 275 276 // Deoxyribose + Hydrated e- -> ... 277 reactionData = new G4DNAMolecularReactionData( 278 0.01e9*(1e-3*m3/(mole*s)), deoxyribose, e_aq); 279 reactionData->AddProduct(damage_deoxyribose); 280 theReactionTable->SetReaction(reactionData); 281 282 // adenine + Hydrated e- -> ... 283 reactionData = new G4DNAMolecularReactionData( 284 9e9*(1e-3*m3/(mole*s)), adenine, e_aq); 285 reactionData->AddProduct(damage_adenine); 286 theReactionTable->SetReaction(reactionData); 287 288 // guanine + Hydrated e- -> ... 289 reactionData = new G4DNAMolecularReactionData( 290 14e9*(1e-3*m3/(mole*s)), guanine, e_aq); 291 reactionData->AddProduct(damage_guanine); 292 theReactionTable->SetReaction(reactionData); 293 294 // thymine + Hydrated e- -> ... 295 reactionData = new G4DNAMolecularReactionData( 296 18e9*(1e-3*m3/(mole*s)), thymine, e_aq); 297 reactionData->AddProduct(damage_thymine); 298 theReactionTable->SetReaction(reactionData); 299 300 // cytosine + Hydrated e- -> ... 301 reactionData = new G4DNAMolecularReactionData( 302 13e9*(1e-3*m3/(mole*s)), cytosine, e_aq); 303 reactionData->AddProduct(damage_cytosine); 304 theReactionTable->SetReaction(reactionData); 305 306 // Radical H and DNA 307 308 // Deoxyribose + Radical H -> ... 309 reactionData = new G4DNAMolecularReactionData( 310 0.029e9*(1e-3*m3/(mole*s)), deoxyribose, H); 311 reactionData->AddProduct(damage_deoxyribose); 312 //eactionData->SetEffectiveReactionRadius(0); 313 314 theReactionTable->SetReaction(reactionData); 315 316 // adenine + Radical H -> ... 317 reactionData = new G4DNAMolecularReactionData( 318 0.10e9*(1e-3*m3/(mole*s)), adenine, H); 319 reactionData->AddProduct(damage_adenine); 320 theReactionTable->SetReaction(reactionData); 321 322 // thymine + Radical H -> ... 323 reactionData = new G4DNAMolecularReactionData( 324 0.57e9*(1e-3*m3/(mole*s)), thymine, H); 325 reactionData->AddProduct(damage_thymine); 326 theReactionTable->SetReaction(reactionData); 327 328 // cytosine + Radical H -> ... 329 reactionData = new G4DNAMolecularReactionData( 330 0.092e9*(1e-3*m3/(mole*s)), cytosine, H); 331 reactionData->AddProduct(damage_cytosine); 332 theReactionTable->SetReaction(reactionData); 333 334 //histone + all molecules -> modification(or "damage") 335 336 reactionData = new G4DNAMolecularReactionData( 337 0.0*(1e-3*m3/(mole*s)), histone, OH); 338 reactionData->AddProduct(histone); 339 reactionData->SetEffectiveReactionRadius( 340 2.4*nm + G4OH::Definition()->GetVanDerVaalsRadius()); 341 theReactionTable->SetReaction(reactionData); 342 343 reactionData = new G4DNAMolecularReactionData( 344 0.0*(1e-3*m3/(mole*s)), histone, OHm); 345 reactionData->AddProduct(histone); 346 reactionData->SetEffectiveReactionRadius( 347 2.4*nm + G4OH::Definition()->GetVanDerVaalsRadius()); 348 theReactionTable->SetReaction(reactionData); 349 350 reactionData = new G4DNAMolecularReactionData( 351 0.0*(1e-3*m3/(mole*s)), histone, e_aq); 352 reactionData->AddProduct(histone); 353 reactionData->SetEffectiveReactionRadius( 354 2.4*nm + G4Electron_aq::Definition()->GetVanDerVaalsRadius()); 355 theReactionTable->SetReaction(reactionData); 356 357 reactionData = new G4DNAMolecularReactionData( 358 0.0*(1e-3*m3/(mole*s)), histone, H2); 359 reactionData->AddProduct(histone); 360 reactionData->SetEffectiveReactionRadius( 361 2.4*nm + G4H2::Definition()->GetVanDerVaalsRadius()); 362 theReactionTable->SetReaction(reactionData); 363 364 reactionData = new G4DNAMolecularReactionData( 365 0.0*(1e-3*m3/(mole*s)), histone, H3Op); 366 reactionData->AddProduct(histone); 367 reactionData->SetEffectiveReactionRadius( 368 2.4*nm + G4H3O::Definition()->GetVanDerVaalsRadius()); 369 theReactionTable->SetReaction(reactionData); 370 371 reactionData = new G4DNAMolecularReactionData( 372 0.0*(1e-3*m3/(mole*s)), histone, H); 373 reactionData->AddProduct(histone); 374 reactionData->SetEffectiveReactionRadius( 375 2.4*nm + G4Hydrogen::Definition()->GetVanDerVaalsRadius()); 376 theReactionTable->SetReaction(reactionData); 377 378 reactionData = new G4DNAMolecularReactionData( 379 0.0*(1e-3*m3/(mole*s)), histone, H2O2); 380 reactionData->AddProduct(histone); 381 reactionData->SetEffectiveReactionRadius( 382 2.4*nm + G4H2O2::Definition()->GetVanDerVaalsRadius()); 383 theReactionTable->SetReaction(reactionData); 384 } 385 386 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 387 388 void G4EmDNAChemistry_option2::ConstructProcess() 389 { 390 auto pPhysicsListHelper = 391 G4PhysicsListHelper::GetPhysicsListHelper(); 392 G4VProcess* pProcess = 393 G4ProcessTable::GetProcessTable()-> 394 FindProcess("e-_G4DNAVibExcitation", "e-"); 395 396 if (pProcess != nullptr) 397 { 398 G4DNAVibExcitation* pVibExcitation = 399 (G4DNAVibExcitation*) pProcess; 400 G4VEmModel* pModel = pVibExcitation->EmModel(); 401 G4DNASancheExcitationModel* pSancheExcitationMod = 402 dynamic_cast<G4DNASancheExcitationModel*>(pModel); 403 if(pSancheExcitationMod != nullptr) 404 { 405 pSancheExcitationMod->ExtendLowEnergyLimit(0.025 * eV); 406 } 407 } 408 409 //=============================================================== 410 // Electron Solvatation 411 // 412 pProcess = G4ProcessTable::GetProcessTable()-> 413 FindProcess("e-_G4DNAElectronSolvation", "e-"); 414 415 if (pProcess == nullptr) 416 { 417 pPhysicsListHelper-> 418 RegisterProcess(new G4DNAElectronSolvation( 419 "e-_G4DNAElectronSolvation"), G4Electron::Definition()); 420 } 421 422 //=============================================================== 423 // Define processes for molecules 424 // 425 G4MoleculeTable* pMoleculeTable = 426 G4MoleculeTable::Instance(); 427 G4MoleculeDefinitionIterator iterator = 428 pMoleculeTable->GetDefintionIterator(); 429 iterator.reset(); 430 while (iterator()) 431 { 432 G4MoleculeDefinition* pMoleculeDef = iterator.value(); 433 434 if(pMoleculeDef != G4H2O::Definition()) 435 { 436 G4DNABrownianTransportation* pBrownianTransport = 437 new G4DNABrownianTransportation(); 438 pPhysicsListHelper-> 439 RegisterProcess(pBrownianTransport, pMoleculeDef); 440 } 441 else 442 { 443 pMoleculeDef->GetProcessManager()-> 444 AddRestProcess(new G4DNAElectronHoleRecombination(), 2); 445 G4DNAMolecularDissociation* pDissociationProcess = 446 new G4DNAMolecularDissociation("H2O_DNAMolecularDecay"); 447 pDissociationProcess->SetDisplacer(pMoleculeDef, 448 new G4DNAWaterDissociationDisplacer); 449 pDissociationProcess->SetVerboseLevel(1); 450 451 pMoleculeDef->GetProcessManager()-> 452 AddRestProcess(pDissociationProcess, 1); 453 } 454 } 455 G4DNAChemistryManager::Instance()->Initialize(); 456 } 457 458 459 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 460 461 void G4EmDNAChemistry_option2::ConstructTimeStepModel( 462 G4DNAMolecularReactionTable* reactionTable) 463 { 464 G4VDNAReactionModel* reactionRadiusComputer = 465 new G4DNASmoluchowskiReactionModel(); 466 reactionTable->PrintTable(reactionRadiusComputer); 467 468 G4DNAMolecularStepByStepModel* stepByStep = 469 new G4DNAMolecularStepByStepModel(); 470 stepByStep->SetReactionModel(reactionRadiusComputer); 471 472 RegisterTimeStepModel(stepByStep, 0); 473 } 474