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