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