File indexing completed on 2025-12-03 09:22:40
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 #include "EmDNAChemistry.hh"
0027
0028 #include "DetectorConstruction.hh"
0029
0030 #include "G4DNAChemistryManager.hh"
0031 #include "G4DNAWaterDissociationDisplacer.hh"
0032 #include "G4ProcessManager.hh"
0033 #include "G4RunManager.hh"
0034 #include "G4SystemOfUnits.hh"
0035
0036
0037
0038 #include "BoundedBrownianAction.hh"
0039
0040 #include "G4ChemReboundTransportation.hh"
0041 #include "G4DNAElectronHoleRecombination.hh"
0042 #include "G4DNAElectronSolvation.hh"
0043 #include "G4DNAMolecularDissociation.hh"
0044 #include "G4DNAMolecularReactionTable.hh"
0045 #include "G4DNAMolecularStepByStepModel.hh"
0046 #include "G4DNASancheExcitationModel.hh"
0047 #include "G4DNASmoluchowskiReactionModel.hh"
0048 #include "G4DNAVibExcitation.hh"
0049
0050
0051 #include "G4Electron.hh"
0052 #include "G4Electron_aq.hh"
0053 #include "G4H2O.hh"
0054 #include "G4H2O2.hh"
0055 #include "G4H3O.hh"
0056 #include "G4HO2.hh"
0057 #include "G4Hydrogen.hh"
0058 #include "G4MoleculeTable.hh"
0059 #include "G4O2.hh"
0060 #include "G4O3.hh"
0061 #include "G4OH.hh"
0062 #include "G4Oxygen.hh"
0063 #include "G4PhysicsListHelper.hh"
0064
0065 #include "G4DNAMoleculeEncounterStepper.hh"
0066 #include "G4DNAScavengerProcess.hh"
0067 #include "G4MolecularConfiguration.hh"
0068 #include "G4ProcessTable.hh"
0069 #include "G4VChemistryWorld.hh"
0070
0071 #include "G4ChemicalMoleculeFinder.hh"
0072
0073 #include "ChemNO2_NO3ScavengerBuilder.hh"
0074 #include "ChemOxygenWaterBuilder.hh"
0075 #include "ChemPureWaterBuilder.hh"
0076
0077 #include "G4ChemDissociationChannels_option1.hh"
0078 #include "G4DNAIndependentReactionTimeModel.hh"
0079 #include "G4GenericMessenger.hh"
0080 #include "G4PhysicsConstructorFactory.hh"
0081 G4_DECLARE_PHYSCONSTR_FACTORY(EmDNAChemistry);
0082
0083 EmDNAChemistry::EmDNAChemistry() : G4VUserChemistryList(true)
0084 {
0085 G4DNAChemistryManager::Instance()->SetChemistryList(this);
0086
0087 }
0088
0089
0090
0091 EmDNAChemistry::~EmDNAChemistry() = default;
0092
0093
0094
0095 void EmDNAChemistry::ConstructMolecule()
0096 {
0097 G4ChemDissociationChannels_option1::ConstructMolecule();
0098 auto table = G4MoleculeTable::Instance();
0099
0100 auto H3OpB = table->GetConfiguration("H3Op(B)");
0101 H3OpB->SetDiffusionCoefficient(9.46e-9 * (m2 / s));
0102
0103 auto OHm = table->GetConfiguration("OHm(B)");
0104 OHm->SetDiffusionCoefficient(5.3e-9 * (m2 / s));
0105 table->CreateConfiguration("H2O", G4H2O::Definition());
0106
0107 auto G4NO2 = new G4MoleculeDefinition("NO_2", 30,
0108 5.3e-9 * (m * m / s),
0109 0,
0110 0,
0111 0.17 * nm);
0112
0113 auto G4NO3 = new G4MoleculeDefinition("NO_3", 38,
0114 0 * (m * m / s),
0115 0,
0116 0,
0117 0.17 * nm);
0118
0119 table->CreateConfiguration("NO2", G4NO2);
0120 table->CreateConfiguration("NO2m", G4NO2,
0121 -1,
0122 1.9e-9 * (m2 / s));
0123 table->CreateConfiguration("NO2mm", G4NO2,
0124 -2,
0125 1.9e-9 * (m2 / s));
0126
0127 table->CreateConfiguration("NO3m", G4NO3,
0128 -1,
0129 1.9e-9 * (m2 / s));
0130
0131 table->CreateConfiguration("NO3mm", G4NO3,
0132 -2,
0133 1.9e-9 * (m2 / s));
0134
0135
0136 auto G4Fe = new G4MoleculeDefinition("Fe",
0137 55.84 * g / Avogadro * c_squared,
0138 0 * (m * m / s),
0139 0,
0140 0,
0141 0.35 * nm);
0142
0143 table->CreateConfiguration("Fe0", G4Fe);
0144
0145 table->CreateConfiguration("Feppp", G4Fe,
0146 3,
0147 4.86e-10 * (m2 / s));
0148
0149 table->CreateConfiguration("Fepp", G4Fe,
0150 2,
0151 5.78e-10 * (m2 / s));
0152
0153 auto G4HSO4 = new G4MoleculeDefinition("HSO4",
0154 55.84 * g / Avogadro * c_squared,
0155 0 * (m * m / s),
0156 0,
0157 0,
0158 0.35 * nm);
0159 table->CreateConfiguration("HSO4m", G4HSO4,
0160 -1,
0161 0 * (m2 / s));
0162
0163
0164 auto G4SO4 = new G4MoleculeDefinition("SO4",
0165 55.84 * g / Avogadro * c_squared,
0166 0 * (m * m / s),
0167 0,
0168 0,
0169 0.35 * nm);
0170 table->CreateConfiguration("SO4m", G4SO4,
0171 -1,
0172 0 * (m2 / s));
0173
0174
0175 auto G4CO2 = new G4MoleculeDefinition("CO_2",
0176 44.01 * g / Avogadro * c_squared,
0177 1.88e-9 * (m * m / s),
0178 0,
0179 0,
0180 0.35 * nm);
0181 table->CreateConfiguration("CO2", G4CO2,
0182 0,
0183 1.88e-9 * (m2 / s));
0184
0185 table->CreateConfiguration("CO2m", G4CO2,
0186 -1,
0187 1.88e-9 * (m2 / s));
0188
0189
0190 auto G4HCO3 = new G4MoleculeDefinition("HCO_3",
0191 61.01 * g / Avogadro * c_squared,
0192 1.88e-9 * (m * m / s),
0193 0,
0194 0,
0195 0.35 * nm);
0196
0197 table->CreateConfiguration("HCO3", G4HCO3,
0198 0,
0199 1.88e-9 * (m2 / s));
0200 table->CreateConfiguration("HCO3m", G4HCO3,
0201 -1,
0202 1.88e-9 * (m2 / s));
0203
0204
0205 auto G4CO3 = new G4MoleculeDefinition("CO_3",
0206 61.01 * g / Avogadro * c_squared,
0207 0.8e-9 * (m * m / s),
0208 0,
0209 0,
0210 0.35 * nm);
0211 table->CreateConfiguration("CO3m", G4CO3,
0212 -1,
0213 0.8e-9 * (m2 / s));
0214
0215 table->CreateConfiguration("CO3mm", G4CO3,
0216 -2,
0217 0.8e-9 * (m2 / s));
0218
0219
0220 auto G4N2O = new G4MoleculeDefinition("N_2O",
0221 61.01 * g / Avogadro * c_squared,
0222 0.8e-9 * (m * m / s),
0223 0,
0224 0,
0225 0.35 * nm);
0226 table->CreateConfiguration("N2O", G4N2O,
0227 0,
0228 0.8e-9 * (m2 / s));
0229
0230
0231 auto G4MeOH = new G4MoleculeDefinition("MeOH",
0232 61.01 * g / Avogadro * c_squared,
0233 1e-10 * (m * m / s),
0234 0,
0235 0,
0236 0.35 * nm);
0237 table->CreateConfiguration("CH3OH", G4MeOH,
0238 0,
0239 1e-10 * (m2 / s));
0240 table->CreateConfiguration("CH2OH", G4MeOH,
0241 0,
0242 1e-10 * (m2 / s));
0243
0244 }
0245
0246
0247
0248 void EmDNAChemistry::ConstructDissociationChannels()
0249 {
0250 G4ChemDissociationChannels_option1::ConstructDissociationChannels();
0251 }
0252
0253
0254
0255 void EmDNAChemistry::ConstructReactionTable(G4DNAMolecularReactionTable* pReactionTable)
0256 {
0257 ChemOxygenWaterBuilder::OxygenScavengerReaction(pReactionTable);
0258 ChemOxygenWaterBuilder::CO2ScavengerReaction(pReactionTable);
0259 ChemOxygenWaterBuilder::SecondOrderReactionExtended(pReactionTable);
0260 ChemPureWaterBuilder::WaterScavengerReaction(pReactionTable);
0261 ChemNO2_NO3ScavengerBuilder::NO2_NO3ScavengerReaction(pReactionTable);
0262 }
0263
0264
0265
0266 void EmDNAChemistry::ConstructProcess()
0267 {
0268 auto table = G4MoleculeTable::Instance();
0269 auto O2 = table->GetConfiguration("O2");
0270 auto O2m = table->GetConfiguration("O2m");
0271 auto HO2 = table->GetConfiguration("HO2°");
0272
0273 auto e_aq = table->GetConfiguration("e_aq");
0274 auto OH = table->GetConfiguration("°OH");
0275 auto OHm = table->GetConfiguration("OHm");
0276
0277 auto NO2 = table->GetConfiguration("NO2");
0278 auto NO2m = table->GetConfiguration("NO2m");
0279 auto NO2mm = table->GetConfiguration("NO2mm");
0280 auto NO3m = table->GetConfiguration("NO3m");
0281 auto NO3mm = table->GetConfiguration("NO3mm");
0282
0283 auto HCO3m = table->GetConfiguration("HCO3m");
0284 auto* CO2 = table->GetConfiguration("CO2");
0285 auto* CO2m = table->GetConfiguration("CO2m");
0286 auto H2O2 = table->GetConfiguration("H2O2");
0287 auto H = table->GetConfiguration("H");
0288 auto* HCO3 = table->GetConfiguration("HCO3");
0289 auto* H3OpB = table->GetConfiguration("H3Op(B)");
0290 auto* OHmB = table->GetConfiguration("OHm(B)");
0291 auto* HO2m = table->GetConfiguration("HO2m");
0292 auto* Om = table->GetConfiguration("Om");
0293 auto* O3m = table->GetConfiguration("O3m");
0294 auto* H3Op = table->GetConfiguration("H3Op");
0295 auto H2O = table->GetConfiguration("H2O");
0296 auto* N2O = table->GetConfiguration("N2O");
0297 auto* MeOH = table->GetConfiguration("CH3OH");
0298 auto* CH2OH = table->GetConfiguration("CH2OH");
0299
0300
0301 const auto* fpDetector = dynamic_cast<const DetectorConstruction*>(
0302 G4RunManager::GetRunManager()->GetUserDetectorConstruction());
0303 auto fpChemistryWorld = fpDetector->GetChemistryWorld();
0304 fpChemistryWorld->ConstructChemistryComponents();
0305 auto confinedBox = fpChemistryWorld->GetChemistryBoundary();
0306
0307 auto* ph = G4PhysicsListHelper::GetPhysicsListHelper();
0308
0309
0310
0311
0312
0313
0314 G4VProcess* process =
0315 G4ProcessTable::GetProcessTable()->FindProcess("e-_G4DNAVibExcitation", "e-");
0316
0317 if (process) {
0318 auto vibExcitation = (G4DNAVibExcitation*)process;
0319 G4VEmModel* model = vibExcitation->EmModel();
0320 auto sancheExcitationMod = dynamic_cast<G4DNASancheExcitationModel*>(model);
0321 if (sancheExcitationMod) {
0322 sancheExcitationMod->ExtendLowEnergyLimit(0.025 * eV);
0323 }
0324 }
0325
0326
0327
0328
0329 process = G4ProcessTable::GetProcessTable()->FindProcess("e-_G4DNAElectronSolvation", "e-");
0330
0331 if (process == nullptr) {
0332 ph->RegisterProcess(new G4DNAElectronSolvation("e-_G4DNAElectronSolvation"),
0333 G4Electron::Definition());
0334 }
0335
0336
0337
0338
0339 auto* theMoleculeTable = G4MoleculeTable::Instance();
0340 auto iterator = theMoleculeTable->GetDefintionIterator();
0341 iterator.reset();
0342
0343 while (iterator()) {
0344 auto* moleculeDef = iterator.value();
0345
0346 if (moleculeDef != G4H2O::Definition()) {
0347 auto brown = new G4ChemReboundTransportation("ReboundTransport");
0348 brown->SetBoundary(confinedBox);
0349 ph->RegisterProcess(brown, moleculeDef);
0350 }
0351 else {
0352 moleculeDef->GetProcessManager()->AddRestProcess(new G4DNAElectronHoleRecombination(), 2);
0353 auto brownTransport = new BoundedBrownianAction();
0354 brownTransport->SetBoundary(*confinedBox);
0355 auto dissociationProcess = new G4DNAMolecularDissociation("H2O_DNAMolecularDecay", fDecay);
0356 dissociationProcess->SetUserBrownianAction(brownTransport);
0357 dissociationProcess->SetDisplacer(moleculeDef, new G4DNAWaterDissociationDisplacer);
0358
0359 moleculeDef->GetProcessManager()->AddRestProcess(dissociationProcess, 1);
0360 }
0361
0362 if (moleculeDef == G4Hydrogen::Definition()) {
0363
0364 auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
0365
0366
0367 auto reactionData = new G4DNAMolecularReactionData(2.1e10 * (1e-3 * m3 / (mole * s)), H, O2);
0368 reactionData->AddProduct(HO2);
0369 scanvergerProcess->SetReaction(H, reactionData);
0370
0371
0372 reactionData = new G4DNAMolecularReactionData(2.49e7 * (1e-3 * m3 / (mole * s)), H,
0373 OHmB);
0374 reactionData->AddProduct(e_aq);
0375 scanvergerProcess->SetReaction(H, reactionData);
0376
0377
0378 reactionData = new G4DNAMolecularReactionData(6.32 / s, H, H2O);
0379 reactionData->AddProduct(e_aq);
0380 reactionData->AddProduct(H3OpB);
0381 scanvergerProcess->SetReaction(H, reactionData);
0382
0383
0384
0385 reactionData = new G4DNAMolecularReactionData(9.0e7 * (1e-3 * m3 / (mole * s)), H, H2O2);
0386 reactionData->AddProduct(OH);
0387 scanvergerProcess->SetReaction(H, reactionData);
0388
0389 ph->RegisterProcess(scanvergerProcess, moleculeDef);
0390 }
0391 if (moleculeDef == G4Electron_aq::Definition()) {
0392 auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
0393 G4DNAMolecularReactionData* reactionData = nullptr;
0394
0395
0396 reactionData = new G4DNAMolecularReactionData(1.74e10 * (1e-3 * m3 / (mole * s)), e_aq, O2);
0397 reactionData->AddProduct(O2m);
0398 scanvergerProcess->SetReaction(e_aq, reactionData);
0399
0400
0401 reactionData =
0402 new G4DNAMolecularReactionData(2.11e10 * (1e-3 * m3 / (mole * s)), e_aq,
0403 H3OpB);
0404 reactionData->AddProduct(H);
0405 scanvergerProcess->SetReaction(e_aq, reactionData);
0406
0407
0408 reactionData = new G4DNAMolecularReactionData(3.5e9 * (1e-3 * m3 / (mole * s)), e_aq, NO2m);
0409 reactionData->AddProduct(NO2mm);
0410 scanvergerProcess->SetReaction(e_aq, reactionData);
0411
0412
0413 reactionData = new G4DNAMolecularReactionData(9.7e9 * (1e-3 * m3 / (mole * s)), e_aq, NO3m);
0414 reactionData->AddProduct(NO3mm);
0415 scanvergerProcess->SetReaction(e_aq, reactionData);
0416
0417 reactionData =
0418 new G4DNAMolecularReactionData(1.57e1 * 55.3 / s, e_aq, H2O);
0419 reactionData->AddProduct(H);
0420 reactionData->AddProduct(OHmB);
0421 scanvergerProcess->SetReaction(e_aq, reactionData);
0422
0423
0424
0425
0426 reactionData = new G4DNAMolecularReactionData(0.77e10 * (1e-3 * m3 / (mole * s)), e_aq, CO2);
0427 reactionData->AddProduct(CO2m);
0428 scanvergerProcess->SetReaction(e_aq, reactionData);
0429
0430
0431
0432 reactionData = new G4DNAMolecularReactionData(0.9e10 * (1e-3 * m3 / (mole * s)), e_aq, N2O);
0433 reactionData->AddProduct(Om);
0434 scanvergerProcess->SetReaction(e_aq, reactionData);
0435
0436
0437 ph->RegisterProcess(scanvergerProcess, moleculeDef);
0438 }
0439 if (moleculeDef == G4O2::Definition()) {
0440 auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
0441 G4DNAMolecularReactionData* reactionData = nullptr;
0442
0443
0444 reactionData =
0445 new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), O2m,
0446 H3OpB);
0447 reactionData->AddProduct(HO2);
0448 reactionData->AddProduct(H2O);
0449 reactionData->SetReactionType(6);
0450 scanvergerProcess->SetReaction(O2m, reactionData);
0451
0452
0453 reactionData = new G4DNAMolecularReactionData(0.15 * 55.3 / s, O2m, H2O);
0454 reactionData->AddProduct(HO2);
0455 reactionData->AddProduct(OHmB);
0456 scanvergerProcess->SetReaction(O2m, reactionData);
0457
0458
0459 ph->RegisterProcess(scanvergerProcess, moleculeDef);
0460 }
0461 if (moleculeDef == G4OH::Definition()) {
0462 auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
0463
0464 G4DNAMolecularReactionData* reactionData = nullptr;
0465
0466
0467 reactionData =
0468 new G4DNAMolecularReactionData(1.27e10 * (1e-3 * m3 / (mole * s)), OH,
0469 OHmB);
0470 reactionData->AddProduct(Om);
0471 reactionData->AddProduct(H2O);
0472 reactionData->SetReactionType(8);
0473 scanvergerProcess->SetReaction(OH, reactionData);
0474
0475
0476 reactionData = new G4DNAMolecularReactionData(8e9 * (1e-3 * m3 / (mole * s)), OH, NO2m);
0477 reactionData->AddProduct(NO2);
0478 reactionData->AddProduct(OHm);
0479 scanvergerProcess->SetReaction(OH, reactionData);
0480
0481
0482 reactionData = new G4DNAMolecularReactionData(8.5e6 * (1e-3 * m3 / (mole * s)), OH, HCO3m);
0483 scanvergerProcess->SetReaction(OH, reactionData);
0484
0485
0486
0487 reactionData = new G4DNAMolecularReactionData(0.060176635 / s, OH,
0488 H2O);
0489 reactionData->AddProduct(Om);
0490 reactionData->AddProduct(H3OpB);
0491 scanvergerProcess->SetReaction(OH, reactionData);
0492
0493
0494 reactionData = new G4DNAMolecularReactionData(1.e7 * (1e-3 * m3 / (mole * s)), OH, CO2);
0495 reactionData->AddProduct(HCO3);
0496 scanvergerProcess->SetReaction(OH, reactionData);
0497
0498
0499
0500 reactionData = new G4DNAMolecularReactionData(9.7e8 * (1e-3 * m3 / (mole * s)), OH, MeOH);
0501 reactionData->AddProduct(CH2OH);
0502 scanvergerProcess->SetReaction(OH, reactionData);
0503
0504
0505 ph->RegisterProcess(scanvergerProcess, moleculeDef);
0506 }
0507 if (moleculeDef == G4MoleculeTable::Instance()->GetMoleculeDefinition("OH"))
0508 {
0509 auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
0510 G4DNAMolecularReactionData* reactionData = nullptr;
0511
0512
0513 reactionData =
0514 new G4DNAMolecularReactionData(1.13e11 * (1e-3 * m3 / (mole * s)), OHm,
0515 H3OpB);
0516 scanvergerProcess->SetReaction(OHm, reactionData);
0517
0518 ph->RegisterProcess(scanvergerProcess, moleculeDef);
0519 }
0520 if (moleculeDef == G4HO2::Definition()) {
0521 auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
0522
0523 G4DNAMolecularReactionData* reactionData = nullptr;
0524
0525
0526 reactionData = new G4DNAMolecularReactionData(1.27e10 * (1e-3 * m3 / (mole * s)), HO2,
0527 OHmB);
0528 reactionData->AddProduct(O2m);
0529 scanvergerProcess->SetReaction(HO2, reactionData);
0530
0531
0532 reactionData = new G4DNAMolecularReactionData(7.58e5 / s, HO2, H2O);
0533 reactionData->AddProduct(H3OpB);
0534 reactionData->AddProduct(O2m);
0535 reactionData->SetReactionType(6);
0536 scanvergerProcess->SetReaction(HO2, reactionData);
0537
0538 ph->RegisterProcess(scanvergerProcess, moleculeDef);
0539 }
0540
0541 if (moleculeDef == G4MoleculeTable::Instance()->GetMoleculeDefinition("HO_2")) {
0542 auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
0543
0544 G4DNAMolecularReactionData* reactionData = nullptr;
0545
0546
0547 reactionData =
0548 new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), HO2m,
0549 H3OpB);
0550 reactionData->AddProduct(H2O2);
0551 scanvergerProcess->SetReaction(HO2m, reactionData);
0552
0553
0554 reactionData = new G4DNAMolecularReactionData(1.36e6 * 55.3 / s, HO2m, H2O);
0555 reactionData->AddProduct(H2O2);
0556 reactionData->AddProduct(OHmB);
0557 reactionData->SetReactionType(7);
0558 scanvergerProcess->SetReaction(HO2m, reactionData);
0559
0560 ph->RegisterProcess(scanvergerProcess, moleculeDef);
0561 }
0562
0563 if (moleculeDef == G4Oxygen::Definition()) {
0564 auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
0565 G4DNAMolecularReactionData* reactionData = nullptr;
0566
0567
0568 reactionData =
0569 new G4DNAMolecularReactionData(9.56e10 * (1e-3 * m3 / (mole * s)), Om,
0570 H3OpB);
0571 reactionData->AddProduct(OH);
0572 scanvergerProcess->SetReaction(Om, reactionData);
0573
0574
0575 reactionData = new G4DNAMolecularReactionData(1.8e6 * 55.3 / s, Om, H2O);
0576 reactionData->AddProduct(OH);
0577 reactionData->AddProduct(OHmB);
0578 reactionData->SetReactionType(8);
0579 scanvergerProcess->SetReaction(Om, reactionData);
0580
0581
0582 reactionData = new G4DNAMolecularReactionData(3.7e9 * (1e-3 * m3 / (mole * s)), Om, O2);
0583 reactionData->AddProduct(O3m);
0584 scanvergerProcess->SetReaction(Om, reactionData);
0585
0586 ph->RegisterProcess(scanvergerProcess, moleculeDef);
0587 }
0588 if (moleculeDef == G4O3::Definition()) {
0589 auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
0590 G4DNAMolecularReactionData* reactionData = nullptr;
0591
0592
0593 reactionData =
0594 new G4DNAMolecularReactionData(9.0e10 * (1e-3 * m3 / (mole * s)), O3m,
0595 H3OpB);
0596 reactionData->AddProduct(OH);
0597 reactionData->AddProduct(O2);
0598 scanvergerProcess->SetReaction(O3m, reactionData);
0599
0600
0601 reactionData = new G4DNAMolecularReactionData(2.66e3 / s, O3m, H2O);
0602 reactionData->AddProduct(Om);
0603 reactionData->AddProduct(O2);
0604 scanvergerProcess->SetReaction(O3m, reactionData);
0605
0606 ph->RegisterProcess(scanvergerProcess, moleculeDef);
0607 }
0608 if (moleculeDef == G4H3O::Definition()) {
0609 auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
0610 G4DNAMolecularReactionData* reactionData = nullptr;
0611
0612
0613 reactionData =
0614 new G4DNAMolecularReactionData(1.13e11 * (1e-3 * m3 / (mole * s)), H3Op,
0615 OHmB);
0616 scanvergerProcess->SetReaction(H3Op, reactionData);
0617
0618 ph->RegisterProcess(scanvergerProcess, moleculeDef);
0619 }
0620 if (moleculeDef == G4H2O2::Definition()) {
0621 auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox);
0622
0623 G4DNAMolecularReactionData* reactionData = nullptr;
0624
0625
0626 reactionData =
0627 new G4DNAMolecularReactionData(1.27e10 * (1e-3 * m3 / (mole * s)), H2O2,
0628 OHmB);
0629 reactionData->AddProduct(HO2m);
0630 reactionData->SetReactionType(7);
0631 scanvergerProcess->SetReaction(H2O2, reactionData);
0632
0633
0634 reactionData = new G4DNAMolecularReactionData(7.86e-2 / s, H2O2, H2O);
0635 reactionData->AddProduct(HO2m);
0636 reactionData->AddProduct(H3OpB);
0637 scanvergerProcess->SetReaction(H2O2, reactionData);
0638
0639
0640 ph->RegisterProcess(scanvergerProcess, moleculeDef);
0641 }
0642 }
0643 G4DNAChemistryManager::Instance()->Initialize();
0644 }
0645
0646
0647
0648 void EmDNAChemistry::ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable)
0649 {
0650
0651 G4EmParameters* param = G4EmParameters::Instance();
0652 auto model = param->GetTimeStepModel();
0653 if (model == G4ChemTimeStepModel::SBS) {
0654 auto reactionRadiusComputer = new G4DNASmoluchowskiReactionModel();
0655 reactionTable->PrintTable(reactionRadiusComputer);
0656 auto stepByStep = new G4DNAMolecularStepByStepModel();
0657 stepByStep->SetReactionModel(reactionRadiusComputer);
0658 RegisterTimeStepModel(stepByStep, 0);
0659 }
0660 else if (model == G4ChemTimeStepModel::IRT_syn) {
0661 RegisterTimeStepModel(new G4DNAIndependentReactionTimeModel(), 0);
0662 }
0663 }
0664
0665