Warning, file /geant4/examples/extended/medical/dna/UHDR/src/EmDNAChemistry.cc was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
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