File indexing completed on 2026-05-25 07:40:30
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038 #include "G4EmDNAChemistryForPlasmids.hh"
0039
0040 #include "G4DNAChemistryManager.hh"
0041 #include "G4DNAGenericIonsManager.hh"
0042 #include "G4DNAWaterDissociationDisplacer.hh"
0043 #include "G4DNAWaterExcitationStructure.hh"
0044 #include "G4PhysicalConstants.hh"
0045 #include "G4ProcessManager.hh"
0046 #include "G4SystemOfUnits.hh"
0047
0048
0049
0050 #include "G4DNABrownianTransportation.hh"
0051 #include "G4DNAElectronHoleRecombination.hh"
0052 #include "G4DNAElectronSolvation.hh"
0053 #include "G4DNAIRT.hh"
0054 #include "G4DNAMolecularDissociation.hh"
0055 #include "G4DNAMolecularIRTModel.hh"
0056 #include "G4DNAMolecularReactionTable.hh"
0057 #include "G4DNASancheExcitationModel.hh"
0058 #include "G4DNAVibExcitation.hh"
0059 #include "G4VDNAReactionModel.hh"
0060
0061
0062
0063 #include "PlasmidMolecules.hh"
0064 #include "ScavengerMolecules.hh"
0065
0066 #include "G4BuilderType.hh"
0067 #include "G4Electron.hh"
0068 #include "G4Electron_aq.hh"
0069 #include "G4FakeMolecule.hh"
0070 #include "G4GenericIon.hh"
0071 #include "G4H2.hh"
0072 #include "G4H2O.hh"
0073 #include "G4H2O2.hh"
0074 #include "G4H3O.hh"
0075 #include "G4HO2.hh"
0076 #include "G4Hydrogen.hh"
0077 #include "G4MoleculeTable.hh"
0078 #include "G4O2.hh"
0079 #include "G4O3.hh"
0080 #include "G4OH.hh"
0081 #include "G4Oxygen.hh"
0082 #include "G4PhysicsListHelper.hh"
0083 #include "G4Proton.hh"
0084
0085
0086 #include "G4DNAMoleculeEncounterStepper.hh"
0087 #include "G4MolecularConfiguration.hh"
0088 #include "G4ProcessTable.hh"
0089
0090
0091 #include "G4PhysicsConstructorFactory.hh"
0092 #include "G4ChemDissociationChannels_option1.hh"
0093 G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistryForPlasmids);
0094
0095
0096
0097 G4EmDNAChemistryForPlasmids::G4EmDNAChemistryForPlasmids() : G4VUserChemistryList(true)
0098 {
0099 G4DNAChemistryManager::Instance()->SetChemistryList(this);
0100
0101 fDMSO = 0;
0102 fOxygen = 0;
0103 }
0104
0105
0106
0107 G4EmDNAChemistryForPlasmids::G4EmDNAChemistryForPlasmids(G4double dmso, G4double oxygen)
0108 : G4VUserChemistryList(true)
0109 {
0110 G4DNAChemistryManager::Instance()->SetChemistryList(this);
0111
0112 fDMSO = dmso;
0113 fOxygen = oxygen;
0114 }
0115
0116
0117
0118 void G4EmDNAChemistryForPlasmids::ConstructMolecule()
0119 {
0120 G4ChemDissociationChannels_option1::ConstructMolecule();
0121 auto molTab = G4MoleculeTable::Instance();
0122
0123 molTab->CreateConfiguration("DMSO", G4DMSO::Definition(), 0, 0 * (m2 / s));
0124
0125 molTab->CreateConfiguration("O2", G4O2::Definition());
0126 molTab->GetConfiguration("O2")->SetVanDerVaalsRadius(0.17 * nm);
0127 molTab->CreateConfiguration("Oxygen", G4OxygenB::Definition(), 0,
0128 0 * (m2 / s));
0129 molTab->CreateConfiguration("Deoxyribose", G4DNA_Deoxyribose::Definition(),
0130 0, 1E-150 * (m2 / s));
0131 molTab->CreateConfiguration(
0132 "Damaged_DeoxyriboseOH", G4DNA_DamagedDeoxyriboseOH::Definition(), 0, 1E-150 * (m2 / s));
0133 molTab->CreateConfiguration(
0134 "Damaged_DeoxyriboseH", G4DNA_DamagedDeoxyriboseH::Definition(), 0, 1E-150 * (m2 / s));
0135 molTab->CreateConfiguration(
0136 "Damaged_DeoxyriboseEAQ", G4DNA_DamagedDeoxyriboseEAQ::Definition(), 0, 1E-150 * (m2 / s));
0137 }
0138
0139
0140
0141 void G4EmDNAChemistryForPlasmids::ConstructDissociationChannels()
0142 {
0143 G4ChemDissociationChannels_option1::ConstructDissociationChannels();
0144 }
0145
0146
0147
0148 void G4EmDNAChemistryForPlasmids::ConstructReactionTable(
0149 G4DNAMolecularReactionTable* theReactionTable)
0150 {
0151
0152
0153
0154
0155 auto molTab = G4MoleculeTable::Instance();
0156
0157 auto OH = molTab->GetConfiguration("°OH");
0158 auto OHm = molTab->GetConfiguration("OHm");
0159 auto e_aq = molTab->GetConfiguration("e_aq");
0160 auto H2 = molTab->GetConfiguration("H2");
0161 auto H3Op = molTab->GetConfiguration("H3Op");
0162 auto H = molTab->GetConfiguration("H");
0163 auto H2O2 = molTab->GetConfiguration("H2O2");
0164
0165
0166
0167
0168
0169 auto reactionData =
0170 new G4DNAMolecularReactionData(2.95e10 * (1e-3 * m3 / (mole * s)), e_aq, OH);
0171 reactionData->AddProduct(OHm);
0172 reactionData->SetReactionType(1);
0173 theReactionTable->SetReaction(reactionData);
0174
0175
0176 reactionData = new G4DNAMolecularReactionData(1.10e10 * (1e-3 * m3 / (mole * s)), e_aq, H2O2);
0177 reactionData->AddProduct(OHm);
0178 reactionData->AddProduct(OH);
0179 reactionData->SetReactionType(1);
0180 theReactionTable->SetReaction(reactionData);
0181
0182
0183 reactionData = new G4DNAMolecularReactionData(1.55e10 * (1e-3 * m3 / (mole * s)), OH, H);
0184 reactionData->SetReactionType(1);
0185 theReactionTable->SetReaction(reactionData);
0186
0187
0188 reactionData = new G4DNAMolecularReactionData(0.009e10 * (1e-3 * m3 / (mole * s)), H, H2O2);
0189 reactionData->AddProduct(OH);
0190 reactionData->SetReactionType(1);
0191 theReactionTable->SetReaction(reactionData);
0192
0193
0194 reactionData = new G4DNAMolecularReactionData(0.55e10 * (1e-3 * m3 / (mole * s)), OH, OH);
0195 reactionData->AddProduct(H2O2);
0196 reactionData->SetReactionType(1);
0197 theReactionTable->SetReaction(reactionData);
0198
0199
0200
0201
0202
0203
0204 reactionData = new G4DNAMolecularReactionData(0.636e10 * (1e-3 * m3 / (mole * s)), e_aq, e_aq);
0205 reactionData->AddProduct(OHm);
0206 reactionData->AddProduct(OHm);
0207 reactionData->AddProduct(H2);
0208 reactionData->SetReactionType(0);
0209 theReactionTable->SetReaction(reactionData);
0210
0211
0212 reactionData = new G4DNAMolecularReactionData(11.3e10 * (1e-3 * m3 / (mole * s)), H3Op, OHm);
0213 reactionData->SetReactionType(0);
0214 theReactionTable->SetReaction(reactionData);
0215
0216
0217
0218
0219
0220
0221 reactionData = new G4DNAMolecularReactionData(2.11e10 * (1e-3 * m3 / (mole * s)), e_aq, H3Op);
0222 reactionData->AddProduct(H);
0223 reactionData->SetReactionType(1);
0224 theReactionTable->SetReaction(reactionData);
0225
0226
0227
0228
0229
0230
0231
0232 reactionData = new G4DNAMolecularReactionData(2.5e10 * (1e-3 * m3 / (mole * s)), e_aq, H3Op);
0233 reactionData->AddProduct(OHm);
0234 reactionData->AddProduct(H2);
0235 reactionData->SetReactionType(0);
0236 theReactionTable->SetReaction(reactionData);
0237
0238
0239 reactionData = new G4DNAMolecularReactionData(0.503e10 * (1e-3 * m3 / (mole * s)), H, H);
0240 reactionData->AddProduct(H2);
0241 reactionData->SetReactionType(0);
0242 theReactionTable->SetReaction(reactionData);
0243
0244 if (fDMSO > 0) DeclareDMSOAndDNAReactions(theReactionTable);
0245
0246 if (fOxygen > 0) DeclareOxygenReactions(theReactionTable);
0247 }
0248
0249
0250
0251 void G4EmDNAChemistryForPlasmids::ConstructProcess()
0252 {
0253 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
0254
0255
0256
0257
0258
0259
0260 G4VProcess* process =
0261 G4ProcessTable::GetProcessTable()->FindProcess("e-_G4DNAVibExcitation", "e-");
0262
0263 if (process) {
0264 G4DNAVibExcitation* vibExcitation = (G4DNAVibExcitation*)process;
0265 G4VEmModel* model = vibExcitation->EmModel();
0266 G4DNASancheExcitationModel* sancheExcitationMod =
0267 dynamic_cast<G4DNASancheExcitationModel*>(model);
0268 if (sancheExcitationMod) {
0269 sancheExcitationMod->ExtendLowEnergyLimit(0.025 * eV);
0270 }
0271 }
0272
0273
0274
0275
0276 process = G4ProcessTable::GetProcessTable()->FindProcess("e-_G4DNAElectronSolvation", "e-");
0277
0278 if (process == 0) {
0279 ph->RegisterProcess(new G4DNAElectronSolvation("e-_G4DNAElectronSolvation"),
0280 G4Electron::Definition());
0281 }
0282
0283
0284
0285
0286 G4MoleculeTable* theMoleculeTable = G4MoleculeTable::Instance();
0287 G4MoleculeDefinitionIterator iterator = theMoleculeTable->GetDefintionIterator();
0288 iterator.reset();
0289 while (iterator()) {
0290 G4MoleculeDefinition* moleculeDef = iterator.value();
0291
0292 if (moleculeDef != G4H2O::Definition()) {
0293
0294
0295
0296 }
0297 else {
0298 moleculeDef->GetProcessManager()->AddRestProcess(new G4DNAElectronHoleRecombination(), 2);
0299 G4DNAMolecularDissociation* dissociationProcess =
0300 new G4DNAMolecularDissociation("H2O_DNAMolecularDecay");
0301 dissociationProcess->SetDisplacer(moleculeDef, new G4DNAWaterDissociationDisplacer);
0302 dissociationProcess->SetVerboseLevel(3);
0303
0304 moleculeDef->GetProcessManager()->AddRestProcess(dissociationProcess, 1);
0305 }
0306
0307
0308
0309
0310 }
0311
0312 G4DNAChemistryManager::Instance()->Initialize();
0313 }
0314
0315
0316
0317 void G4EmDNAChemistryForPlasmids::ConstructTimeStepModel(G4DNAMolecularReactionTable*
0318 )
0319 {
0320 RegisterTimeStepModel(new G4DNAMolecularIRTModel(), 0);
0321 }
0322
0323
0324
0325 void G4EmDNAChemistryForPlasmids::DeclareDMSOAndDNAReactions(
0326 G4DNAMolecularReactionTable* theReactionTable)
0327 {
0328 auto molTab = G4MoleculeTable::Instance();
0329 auto DMSO = molTab->GetConfiguration("DMSO");
0330 auto OH = molTab->GetConfiguration("°OH");
0331 auto H = molTab->GetConfiguration("H");
0332 auto e_aq = molTab->GetConfiguration("e_aq");
0333 auto deoxyribose =
0334 molTab->GetConfiguration("Deoxyribose");
0335 auto damage_deoxyribose_OH =
0336 molTab->GetConfiguration("Damaged_DeoxyriboseOH");
0337 auto damage_deoxyribose_H =
0338 molTab->GetConfiguration("Damaged_DeoxyriboseH");
0339 auto damage_deoxyribose_eaq =
0340 molTab->GetConfiguration("Damaged_DeoxyriboseEAQ");
0341
0342 G4double DNA_OH_Rate = 1.32E7 * std::pow(fDMSO * 7.1E9, 0.29);
0343
0344
0345
0346 auto reactionData = new G4DNAMolecularReactionData(fDMSO * 7.1E9 / s, OH, DMSO);
0347 theReactionTable->SetReaction(reactionData);
0348
0349
0350 reactionData = new G4DNAMolecularReactionData(fDMSO * 2.7E7 / s, H, DMSO);
0351 theReactionTable->SetReaction(reactionData);
0352
0353
0354 reactionData = new G4DNAMolecularReactionData(fDMSO * 3.8E6 / s, e_aq, DMSO);
0355 theReactionTable->SetReaction(reactionData);
0356
0357
0358
0359
0360
0361
0362 reactionData =
0363 new G4DNAMolecularReactionData(DNA_OH_Rate * (1e-3 * m3 / (mole * s)), deoxyribose, OH);
0364 reactionData->AddProduct(damage_deoxyribose_OH);
0365 theReactionTable->SetReaction(reactionData);
0366
0367
0368 reactionData = new G4DNAMolecularReactionData(0.03e9 * (1e-3 * m3 / (mole * s)), deoxyribose, H);
0369 reactionData->AddProduct(damage_deoxyribose_H);
0370 theReactionTable->SetReaction(reactionData);
0371
0372
0373 reactionData =
0374 new G4DNAMolecularReactionData(0.01e9 * (1e-3 * m3 / (mole * s)), deoxyribose, e_aq);
0375 reactionData->AddProduct(damage_deoxyribose_eaq);
0376 theReactionTable->SetReaction(reactionData);
0377
0378 }
0379
0380
0381
0382 void G4EmDNAChemistryForPlasmids::DeclareOxygenReactions(
0383 G4DNAMolecularReactionTable* theReactionTable)
0384 {
0385 auto molTab = G4MoleculeTable::Instance();
0386 auto Oxygen = molTab->GetConfiguration("Oxygen");
0387 auto H = molTab->GetConfiguration("H");
0388 auto e_aq = molTab->GetConfiguration("e_aq");
0389 auto O2m = molTab->GetConfiguration("O2m");
0390 auto HO2 = molTab->GetConfiguration("HO2°");
0391 auto O2 = molTab->GetConfiguration("O2");
0392 auto OH = molTab->GetConfiguration("°OH");
0393
0394
0395
0396 auto reactionData =
0397 new G4DNAMolecularReactionData((fOxygen * 1.9E10) / s, e_aq, Oxygen);
0398 reactionData->AddProduct(O2m);
0399 theReactionTable->SetReaction(reactionData);
0400
0401
0402 reactionData = new G4DNAMolecularReactionData((fOxygen * 2.1E10) / s, H, Oxygen);
0403 reactionData->AddProduct(HO2);
0404 theReactionTable->SetReaction(reactionData);
0405
0406
0407 reactionData = new G4DNAMolecularReactionData(1.9E10 * (1e-3 * m3 / (mole * s)), e_aq, O2);
0408 reactionData->AddProduct(O2m);
0409 reactionData->SetReactionType(1);
0410 theReactionTable->SetReaction(reactionData);
0411
0412
0413 reactionData = new G4DNAMolecularReactionData(2.1E10 * (1e-3 * m3 / (mole * s)), H, O2);
0414 reactionData->AddProduct(HO2);
0415 reactionData->SetReactionType(1);
0416 theReactionTable->SetReaction(reactionData);
0417
0418
0419 reactionData = new G4DNAMolecularReactionData(7.9E9 * (1e-3 * m3 / (mole * s)), OH, HO2);
0420 reactionData->AddProduct(O2);
0421 reactionData->SetReactionType(1);
0422 theReactionTable->SetReaction(reactionData);
0423
0424 }
0425
0426