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