Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-23 09:21:53

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 //
0027 // G4EmDNAChemistryForPlasmids.cc
0028 //
0029 //  Created on: Feb 10, 2021
0030 //      Authors: J. Naoki D. Kondo
0031 //               W. G. Shin, J. Ramos-Mendez and B. Faddegon
0032 //
0033 /// \file G4EmDNAChemistryForPlasmids.cc
0034 /// \brief Implementation of the Chemistry parameters with DNA reactions
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 // *** Processes and models for Geant4-DNA
0047 
0048 #include "G4DNAAttachment.hh"
0049 #include "G4DNABrownianTransportation.hh"
0050 #include "G4DNAChampionElasticModel.hh"
0051 #include "G4DNAElastic.hh"
0052 #include "G4DNAElectronHoleRecombination.hh"
0053 #include "G4DNAElectronSolvation.hh"
0054 #include "G4DNAIRT.hh"
0055 #include "G4DNAMolecularDissociation.hh"
0056 #include "G4DNAMolecularIRTModel.hh"
0057 #include "G4DNAMolecularReactionTable.hh"
0058 #include "G4DNAMolecularStepByStepModel.hh"
0059 #include "G4DNASancheExcitationModel.hh"
0060 #include "G4DNAScreenedRutherfordElasticModel.hh"
0061 #include "G4DNASmoluchowskiReactionModel.hh"
0062 #include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
0063 #include "G4DNAVibExcitation.hh"
0064 #include "G4VDNAReactionModel.hh"
0065 
0066 // particles
0067 
0068 #include "PlasmidMolecules.hh"
0069 #include "ScavengerMolecules.hh"
0070 
0071 #include "G4BuilderType.hh"
0072 #include "G4Electron.hh"
0073 #include "G4Electron_aq.hh"
0074 #include "G4FakeMolecule.hh"
0075 #include "G4GenericIon.hh"
0076 #include "G4H2.hh"
0077 #include "G4H2O.hh"
0078 #include "G4H2O2.hh"
0079 #include "G4H3O.hh"
0080 #include "G4HO2.hh"
0081 #include "G4Hydrogen.hh"
0082 #include "G4MoleculeTable.hh"
0083 #include "G4O2.hh"
0084 #include "G4O3.hh"
0085 #include "G4OH.hh"
0086 #include "G4Oxygen.hh"
0087 #include "G4PhysicsListHelper.hh"
0088 #include "G4Proton.hh"
0089 
0090 /****/
0091 #include "G4DNAMoleculeEncounterStepper.hh"
0092 #include "G4DNASecondOrderReaction.hh"
0093 #include "G4MolecularConfiguration.hh"
0094 #include "G4ProcessTable.hh"
0095 #include "G4ProcessVector.hh"
0096 /****/
0097 
0098 #include "G4Scheduler.hh"
0099 
0100 // factory
0101 #include "G4PhysicsConstructorFactory.hh"
0102 
0103 G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistryForPlasmids);
0104 
0105 #include "G4Threading.hh"
0106 
0107 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
0108 
0109 G4EmDNAChemistryForPlasmids::G4EmDNAChemistryForPlasmids() : G4VUserChemistryList(true)
0110 {
0111   G4DNAChemistryManager::Instance()->SetChemistryList(this);
0112 
0113   fDMSO = 0;
0114   fOxygen = 0;
0115 }
0116 
0117 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
0118 
0119 G4EmDNAChemistryForPlasmids::G4EmDNAChemistryForPlasmids(G4double dmso, G4double oxygen)
0120   : G4VUserChemistryList(true)
0121 {
0122   G4DNAChemistryManager::Instance()->SetChemistryList(this);
0123 
0124   fDMSO = dmso;
0125   fOxygen = oxygen;
0126 }
0127 
0128 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0129 
0130 void G4EmDNAChemistryForPlasmids::ConstructMolecule()
0131 {
0132   //-----------------------------------
0133   //  G4Electron::Definition(); // safety
0134 
0135   //-----------------------------------
0136   // Create the definition
0137 
0138   G4H2O::Definition();
0139   G4Hydrogen::Definition();
0140   G4H3O::Definition();
0141   G4OH::Definition();
0142   G4Electron_aq::Definition();
0143   G4H2O2::Definition();
0144   G4H2::Definition();
0145 
0146   G4O2::Definition();
0147   G4HO2::Definition();
0148   G4Oxygen::Definition();
0149   G4O3::Definition();
0150 
0151   //____________________________________________________________________________
0152 
0153   G4MoleculeTable::Instance()->CreateConfiguration("H3Op", G4H3O::Definition());
0154   G4MoleculeTable::Instance()->GetConfiguration("H3Op")->SetDiffusionCoefficient(9.46e-9
0155                                                                                  * (m2 / s));
0156   G4MoleculeTable::Instance()->GetConfiguration("H3Op")->SetVanDerVaalsRadius(0.25 * nm);
0157 
0158   G4MoleculeTable::Instance()->CreateConfiguration("OH", G4OH::Definition());
0159   G4MoleculeTable::Instance()->GetConfiguration("OH")->SetDiffusionCoefficient(2.2e-9 * (m2 / s));
0160   G4MoleculeTable::Instance()->GetConfiguration("OH")->SetVanDerVaalsRadius(0.22 * nm);
0161 
0162   G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()->CreateConfiguration(
0163     "OHm", G4OH::Definition(), -1, 5.3e-9 * (m2 / s));
0164   OHm->SetMass(17.0079 * g / Avogadro * c_squared);
0165   OHm->SetVanDerVaalsRadius(0.33 * nm);
0166 
0167   G4MolecularConfiguration* O2m = G4MoleculeTable::Instance()->CreateConfiguration(
0168     "O2m", G4O2::Definition(), -1, 1.75e-9 * (m2 / s));
0169   O2m->SetMass(31.99602 * g / Avogadro * c_squared);
0170   O2m->SetVanDerVaalsRadius(0.22 * nm);
0171 
0172   G4MoleculeTable::Instance()->CreateConfiguration("e_aq", G4Electron_aq::Definition());
0173   G4MoleculeTable::Instance()->GetConfiguration("e_aq")->SetVanDerVaalsRadius(0.50 * nm);
0174 
0175   G4MoleculeTable::Instance()->CreateConfiguration("H", G4Hydrogen::Definition());
0176   G4MoleculeTable::Instance()->GetConfiguration("H")->SetVanDerVaalsRadius(0.19 * nm);
0177 
0178   G4MolecularConfiguration* H2 =
0179     G4MoleculeTable::Instance()->CreateConfiguration("H2", G4H2::Definition());
0180   H2->SetDiffusionCoefficient(4.8e-9 * (m2 / s));
0181   H2->SetVanDerVaalsRadius(0.14 * nm);
0182   H2->SetMass(2.01588 * g / Avogadro * c_squared);
0183 
0184   G4MoleculeTable::Instance()->CreateConfiguration("H2O2", G4H2O2::Definition());
0185   G4MoleculeTable::Instance()->GetConfiguration("H2O2")->SetDiffusionCoefficient(2.3e-9 * (m2 / s));
0186   G4MoleculeTable::Instance()->GetConfiguration("H2O2")->SetVanDerVaalsRadius(0.21 * nm);
0187 
0188   // molecules extension (RITRACKS)
0189 
0190   G4MoleculeTable::Instance()->CreateConfiguration("HO2", G4HO2::Definition());
0191   G4MoleculeTable::Instance()->GetConfiguration("HO2")->SetVanDerVaalsRadius(0.21 * nm);
0192 
0193   G4MolecularConfiguration* HO2m = G4MoleculeTable::Instance()->CreateConfiguration(
0194     "HO2m", G4HO2::Definition(), -1, 1.4e-9 * (m2 / s));
0195   HO2m->SetMass(33.00396 * g / Avogadro * c_squared);
0196   HO2m->SetVanDerVaalsRadius(0.25 * nm);
0197 
0198   G4MoleculeTable::Instance()->CreateConfiguration("NoneM", G4FakeMolecule::Definition());
0199 
0200   G4MoleculeTable::Instance()->CreateConfiguration("DMSO", G4DMSO::Definition(), 0, 0 * (m2 / s));
0201 
0202   G4MoleculeTable::Instance()->CreateConfiguration("O2", G4O2::Definition());
0203   G4MoleculeTable::Instance()->GetConfiguration("O2")->SetVanDerVaalsRadius(0.17 * nm);
0204 
0205   G4MoleculeTable::Instance()->CreateConfiguration("Oxygen", G4OxygenB::Definition(), 0,
0206                                                    0 * (m2 / s));
0207 
0208   G4MoleculeTable::Instance()->CreateConfiguration("Deoxyribose", G4DNA_Deoxyribose::Definition(),
0209                                                    0, 1E-150 * (m2 / s));
0210 
0211   G4MoleculeTable::Instance()->CreateConfiguration(
0212     "Damaged_DeoxyriboseOH", G4DNA_DamagedDeoxyriboseOH::Definition(), 0, 1E-150 * (m2 / s));
0213 
0214   G4MoleculeTable::Instance()->CreateConfiguration(
0215     "Damaged_DeoxyriboseH", G4DNA_DamagedDeoxyriboseH::Definition(), 0, 1E-150 * (m2 / s));
0216 
0217   G4MoleculeTable::Instance()->CreateConfiguration(
0218     "Damaged_DeoxyriboseEAQ", G4DNA_DamagedDeoxyriboseEAQ::Definition(), 0, 1E-150 * (m2 / s));
0219 }
0220 
0221 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0222 
0223 void G4EmDNAChemistryForPlasmids::ConstructDissociationChannels()
0224 {
0225   //-----------------------------------
0226   // Get the molecular configuration
0227   G4MolecularConfiguration* OH = G4MoleculeTable::Instance()->GetConfiguration("OH");
0228   G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()->GetConfiguration("OHm");
0229   G4MolecularConfiguration* e_aq = G4MoleculeTable::Instance()->GetConfiguration("e_aq");
0230   G4MolecularConfiguration* H2 = G4MoleculeTable::Instance()->GetConfiguration("H2");
0231   G4MolecularConfiguration* H3O = G4MoleculeTable::Instance()->GetConfiguration("H3Op");
0232   G4MolecularConfiguration* H = G4MoleculeTable::Instance()->GetConfiguration("H");
0233 
0234   //-------------------------------------
0235   // Define the decay channels
0236   G4MoleculeDefinition* water = G4H2O::Definition();
0237   G4MolecularDissociationChannel* decCh1;
0238   G4MolecularDissociationChannel* decCh2;
0239   G4MolecularDissociationChannel* decCh3;
0240   G4MolecularDissociationChannel* decCh4;
0241   G4MolecularDissociationChannel* decCh5;
0242 
0243   G4ElectronOccupancy* occ = new G4ElectronOccupancy(*(water->GetGroundStateElectronOccupancy()));
0244 
0245   //////////////////////////////////////////////////////////
0246   //            EXCITATIONS                               //
0247   //////////////////////////////////////////////////////////
0248   G4DNAWaterExcitationStructure waterExcitation;
0249   //--------------------------------------------------------
0250   //---------------Excitation on the fifth layer------------
0251 
0252   decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relaxation");
0253   decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay");
0254   // Decay 1 : OH + H
0255   decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0));
0256   decCh1->SetProbability(0.35);
0257   decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement);
0258 
0259   decCh2->AddProduct(OH);
0260   decCh2->AddProduct(H);
0261   decCh2->SetProbability(0.65);
0262   decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
0263 
0264   occ->RemoveElectron(4, 1);  // this is the transition form ground state to
0265   occ->AddElectron(5, 1);  // the first unoccupied orbital: A^1B_1
0266 
0267   water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ);
0268   water->AddDecayChannel("A^1B_1", decCh1);
0269   water->AddDecayChannel("A^1B_1", decCh2);
0270 
0271   //--------------------------------------------------------
0272   //---------------Excitation on the fourth layer-----------
0273   decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relaxation_Channel");
0274   decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay");
0275   decCh3 = new G4MolecularDissociationChannel("B^1A_1_AutoIonisation_Channel");
0276   decCh4 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay");
0277   decCh5 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay2");
0278 
0279   // Decay 1 : energy
0280   decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1));
0281   decCh1->SetProbability(0.175);
0282 
0283   // Decay 2 : 2OH + H_2
0284   decCh2->AddProduct(H2);
0285   decCh2->AddProduct(OH);
0286   decCh2->AddProduct(OH);
0287   decCh2->SetProbability(0.0325);
0288   decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
0289 
0290   // Decay 3 : OH + H_3Op + e_aq
0291   decCh3->AddProduct(OH);
0292   decCh3->AddProduct(H3O);
0293   decCh3->AddProduct(e_aq);
0294   decCh3->SetProbability(0.50);
0295   decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
0296 
0297   // Decay 4 :  H + OH
0298   decCh4->AddProduct(H);
0299   decCh4->AddProduct(OH);
0300   decCh4->SetProbability(0.2535);
0301   decCh4->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
0302 
0303   // Decay 5 : 2H + O
0304   decCh5->AddProduct(H);
0305   decCh5->AddProduct(H);
0306   decCh5->SetProbability(0.039);
0307   decCh5->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay2);
0308 
0309   *occ = *(water->GetGroundStateElectronOccupancy());
0310   occ->RemoveElectron(3);  // this is the transition form ground state to
0311   occ->AddElectron(5, 1);  // the first unoccupied orbital: B^1A_1
0312 
0313   water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ);
0314   water->AddDecayChannel("B^1A_1", decCh1);
0315   water->AddDecayChannel("B^1A_1", decCh2);
0316   water->AddDecayChannel("B^1A_1", decCh3);
0317   water->AddDecayChannel("B^1A_1", decCh4);
0318   water->AddDecayChannel("B^1A_1", decCh5);
0319 
0320   //-------------------------------------------------------
0321   //-------------------Excitation of 3rd layer-----------------
0322   decCh1 = new G4MolecularDissociationChannel("Excitation3rdLayer_AutoIonisation_Channel");
0323   decCh2 = new G4MolecularDissociationChannel("Excitation3rdLayer_Relaxation_Channel");
0324 
0325   // Decay channel 1 : : OH + H_3Op + e_aq
0326   decCh1->AddProduct(OH);
0327   decCh1->AddProduct(H3O);
0328   decCh1->AddProduct(e_aq);
0329 
0330   decCh1->SetProbability(0.5);
0331   decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
0332 
0333   // Decay channel 2 : energy
0334   decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2));
0335   decCh2->SetProbability(0.5);
0336 
0337   // Electronic configuration of this decay
0338   *occ = *(water->GetGroundStateElectronOccupancy());
0339   occ->RemoveElectron(2, 1);
0340   occ->AddElectron(5, 1);
0341 
0342   // Configure the water molecule
0343   water->NewConfigurationWithElectronOccupancy("Excitation3rdLayer", *occ);
0344   water->AddDecayChannel("Excitation3rdLayer", decCh1);
0345   water->AddDecayChannel("Excitation3rdLayer", decCh2);
0346 
0347   //-------------------------------------------------------
0348   //-------------------Excitation of 2nd layer-----------------
0349   decCh1 = new G4MolecularDissociationChannel("Excitation2ndLayer_AutoIonisation_Channel");
0350   decCh2 = new G4MolecularDissociationChannel("Excitation2ndLayer_Relaxation_Channel");
0351 
0352   // Decay Channel 1 : : OH + H_3Op + e_aq
0353   decCh1->AddProduct(OH);
0354   decCh1->AddProduct(H3O);
0355   decCh1->AddProduct(e_aq);
0356 
0357   decCh1->SetProbability(0.5);
0358   decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
0359 
0360   // Decay channel 2 : energy
0361   decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3));
0362   decCh2->SetProbability(0.5);
0363 
0364   *occ = *(water->GetGroundStateElectronOccupancy());
0365   occ->RemoveElectron(1, 1);
0366   occ->AddElectron(5, 1);
0367 
0368   water->NewConfigurationWithElectronOccupancy("Excitation2ndLayer", *occ);
0369   water->AddDecayChannel("Excitation2ndLayer", decCh1);
0370   water->AddDecayChannel("Excitation2ndLayer", decCh2);
0371 
0372   //-------------------------------------------------------
0373   //-------------------Excitation of 1st layer-----------------
0374   decCh1 = new G4MolecularDissociationChannel("Excitation1stLayer_AutoIonisation_Channel");
0375   decCh2 = new G4MolecularDissociationChannel("Excitation1stLayer_Relaxation_Channel");
0376 
0377   *occ = *(water->GetGroundStateElectronOccupancy());
0378   occ->RemoveElectron(0, 1);
0379   occ->AddElectron(5, 1);
0380 
0381   // Decay Channel 1 : : OH + H_3Op + e_aq
0382   decCh1->AddProduct(OH);
0383   decCh1->AddProduct(H3O);
0384   decCh1->AddProduct(e_aq);
0385   decCh1->SetProbability(0.5);
0386   decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
0387 
0388   // Decay channel 2 : energy
0389   decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4));
0390   decCh2->SetProbability(0.5);
0391 
0392   water->NewConfigurationWithElectronOccupancy("Excitation1stLayer", *occ);
0393   water->AddDecayChannel("Excitation1stLayer", decCh1);
0394   water->AddDecayChannel("Excitation1stLayer", decCh2);
0395 
0396   /////////////////////////////////////////////////////////
0397   //                  IONISATION                         //
0398   /////////////////////////////////////////////////////////
0399   //--------------------------------------------------------
0400   //------------------- Ionisation -------------------------
0401 
0402   decCh1 = new G4MolecularDissociationChannel("Ionisation_Channel");
0403 
0404   // Decay Channel 1 : : OH + H_3Op
0405   decCh1->AddProduct(H3O);
0406   decCh1->AddProduct(OH);
0407   decCh1->SetProbability(1);
0408   decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay);
0409 
0410   *occ = *(water->GetGroundStateElectronOccupancy());
0411   occ->RemoveElectron(4, 1);
0412   // this is a ionized h2O with a hole in its last orbital
0413   water->NewConfigurationWithElectronOccupancy("Ionisation5", *occ);
0414   water->AddDecayChannel("Ionisation5", decCh1);
0415 
0416   *occ = *(water->GetGroundStateElectronOccupancy());
0417   occ->RemoveElectron(3, 1);
0418   water->NewConfigurationWithElectronOccupancy("Ionisation4", *occ);
0419   water->AddDecayChannel("Ionisation4", new G4MolecularDissociationChannel(*decCh1));
0420 
0421   *occ = *(water->GetGroundStateElectronOccupancy());
0422   occ->RemoveElectron(2, 1);
0423   water->NewConfigurationWithElectronOccupancy("Ionisation3", *occ);
0424   water->AddDecayChannel("Ionisation3", new G4MolecularDissociationChannel(*decCh1));
0425 
0426   *occ = *(water->GetGroundStateElectronOccupancy());
0427   occ->RemoveElectron(1, 1);
0428   water->NewConfigurationWithElectronOccupancy("Ionisation2", *occ);
0429   water->AddDecayChannel("Ionisation2", new G4MolecularDissociationChannel(*decCh1));
0430 
0431   *occ = *(water->GetGroundStateElectronOccupancy());
0432   occ->RemoveElectron(0, 1);
0433   water->NewConfigurationWithElectronOccupancy("Ionisation1", *occ);
0434   water->AddDecayChannel("Ionisation1", new G4MolecularDissociationChannel(*decCh1));
0435 
0436   //////////////////////////////////////////////////////////
0437   //            Dissociative Attachment                   //
0438   //////////////////////////////////////////////////////////
0439   decCh1 = new G4MolecularDissociationChannel("DissociativeAttachment_ch1");
0440 
0441   // Decay 1 : OHm + H
0442   decCh1->AddProduct(H2);
0443   decCh1->AddProduct(OHm);
0444   decCh1->AddProduct(OH);
0445   decCh1->SetProbability(1);
0446   decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::DissociativeAttachment);
0447 
0448   *occ = *(water->GetGroundStateElectronOccupancy());
0449   occ->AddElectron(5, 1);  // H_2O^-
0450 
0451   water->NewConfigurationWithElectronOccupancy("DissociativeAttachment_ch1", *occ);
0452   water->AddDecayChannel("DissociativeAttachment_ch1", decCh1);
0453 
0454   //////////////////////////////////////////////////////////
0455   //            Electron-hole recombination               //
0456   //////////////////////////////////////////////////////////
0457   decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay1");
0458   decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay2");
0459   decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay3");
0460   decCh4 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay4");
0461 
0462   // Decay 1 : 2OH + H_2
0463   decCh1->AddProduct(H2);
0464   decCh1->AddProduct(OH);
0465   decCh1->AddProduct(OH);
0466   decCh1->SetProbability(0.1365);
0467   decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
0468 
0469   // Decay 2 : OH + H
0470   decCh2->AddProduct(OH);
0471   decCh2->AddProduct(H);
0472   decCh2->SetProbability(0.3575);
0473   decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
0474 
0475   // Decay 3 : 2H + O(3p)
0476   decCh3->AddProduct(H);
0477   decCh3->AddProduct(H);
0478   decCh3->SetProbability(0.156);
0479   decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay2);
0480 
0481   // Decay 4 : relaxation
0482   decCh4->SetProbability(0.35);
0483 
0484   const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib");
0485   assert(pH2Ovib != nullptr);
0486 
0487   water->AddDecayChannel(pH2Ovib, decCh1);
0488   water->AddDecayChannel(pH2Ovib, decCh2);
0489   water->AddDecayChannel(pH2Ovib, decCh3);
0490   water->AddDecayChannel(pH2Ovib, decCh4);
0491 
0492   delete occ;
0493 }
0494 
0495 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0496 
0497 void G4EmDNAChemistryForPlasmids::ConstructReactionTable(
0498   G4DNAMolecularReactionTable* theReactionTable)
0499 {
0500   // fReactionTable = theReactionTable;
0501 
0502   //-----------------------------------
0503   // Get the molecular configuration
0504   G4MolecularConfiguration* OH = G4MoleculeTable::Instance()->GetConfiguration("OH");
0505   G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()->GetConfiguration("OHm");
0506   G4MolecularConfiguration* e_aq = G4MoleculeTable::Instance()->GetConfiguration("e_aq");
0507   G4MolecularConfiguration* H2 = G4MoleculeTable::Instance()->GetConfiguration("H2");
0508   G4MolecularConfiguration* H3Op = G4MoleculeTable::Instance()->GetConfiguration("H3Op");
0509   G4MolecularConfiguration* H = G4MoleculeTable::Instance()->GetConfiguration("H");
0510   G4MolecularConfiguration* H2O2 = G4MoleculeTable::Instance()->GetConfiguration("H2O2");
0511 
0512   //----------------------------------------------------------------//
0513   // Type II                                                        //
0514   //----------------------------------------------------------------//
0515   // e_aq + *OH -> OH-    prob: 0.49
0516   G4DNAMolecularReactionData* reactionData =
0517     new G4DNAMolecularReactionData(2.95e10 * (1e-3 * m3 / (mole * s)), e_aq, OH);
0518   reactionData->AddProduct(OHm);
0519   reactionData->SetReactionType(1);
0520   theReactionTable->SetReaction(reactionData);
0521   //----------------------------------------------------------------//
0522   // e_aq + H2O2 -> OH- + *OH        prob: 0.11
0523   reactionData = new G4DNAMolecularReactionData(1.10e10 * (1e-3 * m3 / (mole * s)), e_aq, H2O2);
0524   reactionData->AddProduct(OHm);
0525   reactionData->AddProduct(OH);
0526   reactionData->SetReactionType(1);
0527   theReactionTable->SetReaction(reactionData);
0528   //----------------------------------------------------------------//
0529   // *OH + *H -> H2O        prob: 0.33
0530   reactionData = new G4DNAMolecularReactionData(1.55e10 * (1e-3 * m3 / (mole * s)), OH, H);
0531   reactionData->SetReactionType(1);
0532   theReactionTable->SetReaction(reactionData);
0533   //----------------------------------------------------------------//
0534   // H + H2O2 -> OH                prob: 0.00
0535   reactionData = new G4DNAMolecularReactionData(0.009e10 * (1e-3 * m3 / (mole * s)), H, H2O2);
0536   reactionData->AddProduct(OH);
0537   reactionData->SetReactionType(1);
0538   theReactionTable->SetReaction(reactionData);
0539   //----------------------------------------------------------------//
0540   // *OH + *OH -> H2O2                prob: 0.55
0541   reactionData = new G4DNAMolecularReactionData(0.55e10 * (1e-3 * m3 / (mole * s)), OH, OH);
0542   reactionData->AddProduct(H2O2);
0543   reactionData->SetReactionType(1);
0544   theReactionTable->SetReaction(reactionData);
0545   //----------------------------------------------------------------//
0546 
0547   //----------------------------------------------------------------//
0548   // Type III                                                       //
0549   //----------------------------------------------------------------//
0550   // e_aq + e_aq + 2H2O -> H2 + 2OH-
0551   reactionData = new G4DNAMolecularReactionData(0.636e10 * (1e-3 * m3 / (mole * s)), e_aq, e_aq);
0552   reactionData->AddProduct(OHm);
0553   reactionData->AddProduct(OHm);
0554   reactionData->AddProduct(H2);
0555   reactionData->SetReactionType(0);
0556   theReactionTable->SetReaction(reactionData);
0557   //------------------------------------------------------------------
0558   // H3O+ + OH- -> 2H2O
0559   reactionData = new G4DNAMolecularReactionData(11.3e10 * (1e-3 * m3 / (mole * s)), H3Op, OHm);
0560   reactionData->SetReactionType(0);
0561   theReactionTable->SetReaction(reactionData);
0562   //------------------------------------------------------------------
0563 
0564   //----------------------------------------------------------------//
0565   // Type IV                                                        //
0566   //----------------------------------------------------------------//
0567   // e_aq + H3O+ -> H* + H2O        prob: 0.04
0568   reactionData = new G4DNAMolecularReactionData(2.11e10 * (1e-3 * m3 / (mole * s)), e_aq, H3Op);
0569   reactionData->AddProduct(H);
0570   reactionData->SetReactionType(1);
0571   theReactionTable->SetReaction(reactionData);
0572   //----------------------------------------------------------------//
0573 
0574   //----------------------------------------------------------------//
0575   // Type V                                                         //
0576   // First order reaction                                           //
0577   //----------------------------------------------------------------//
0578   // e_aq + *H -> OH- + H2
0579   reactionData = new G4DNAMolecularReactionData(2.5e10 * (1e-3 * m3 / (mole * s)), e_aq, H3Op);
0580   reactionData->AddProduct(OHm);
0581   reactionData->AddProduct(H2);
0582   reactionData->SetReactionType(0);
0583   theReactionTable->SetReaction(reactionData);
0584   //----------------------------------------------------------------//
0585   // *H + *H -> H2
0586   reactionData = new G4DNAMolecularReactionData(0.503e10 * (1e-3 * m3 / (mole * s)), H, H);
0587   reactionData->AddProduct(H2);
0588   reactionData->SetReactionType(0);
0589   theReactionTable->SetReaction(reactionData);
0590 
0591   if (fDMSO > 0) DeclareDMSOAndDNAReactions(theReactionTable);
0592 
0593   if (fOxygen > 0) DeclareOxygenReactions(theReactionTable);
0594 }
0595 
0596 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0597 
0598 void G4EmDNAChemistryForPlasmids::ConstructProcess()
0599 {
0600   G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
0601 
0602   //===============================================================
0603   // Extend vibrational to low energy
0604   // Anyway, solvation of electrons is taken into account from 7.4 eV
0605   // So below this threshold, for now, no accurate modeling is done
0606   //
0607   G4VProcess* process =
0608     G4ProcessTable::GetProcessTable()->FindProcess("e-_G4DNAVibExcitation", "e-");
0609 
0610   if (process) {
0611     G4DNAVibExcitation* vibExcitation = (G4DNAVibExcitation*)process;
0612     G4VEmModel* model = vibExcitation->EmModel();
0613     G4DNASancheExcitationModel* sancheExcitationMod =
0614       dynamic_cast<G4DNASancheExcitationModel*>(model);
0615     if (sancheExcitationMod) {
0616       sancheExcitationMod->ExtendLowEnergyLimit(0.025 * eV);
0617     }
0618   }
0619 
0620   //===============================================================
0621   // *** Electron Solvatation ***
0622   //
0623   process = G4ProcessTable::GetProcessTable()->FindProcess("e-_G4DNAElectronSolvation", "e-");
0624 
0625   if (process == 0) {
0626     ph->RegisterProcess(new G4DNAElectronSolvation("e-_G4DNAElectronSolvation"),
0627                         G4Electron::Definition());
0628   }
0629 
0630   //===============================================================
0631   // Define processes for molecules
0632   //
0633   G4MoleculeTable* theMoleculeTable = G4MoleculeTable::Instance();
0634   G4MoleculeDefinitionIterator iterator = theMoleculeTable->GetDefintionIterator();
0635   iterator.reset();
0636   while (iterator()) {
0637     G4MoleculeDefinition* moleculeDef = iterator.value();
0638 
0639     if (moleculeDef != G4H2O::Definition()) {
0640       // G4cout << "Brownian motion added for: "<< moleculeDef->GetName() << G4endl;
0641       //      G4DNABrownianTransportation* brown = new G4DNABrownianTransportation();
0642       //      ph->RegisterProcess(brown, moleculeDef);
0643     }
0644     else {
0645       moleculeDef->GetProcessManager()->AddRestProcess(new G4DNAElectronHoleRecombination(), 2);
0646       G4DNAMolecularDissociation* dissociationProcess =
0647         new G4DNAMolecularDissociation("H2O_DNAMolecularDecay");
0648       dissociationProcess->SetDisplacer(moleculeDef, new G4DNAWaterDissociationDisplacer);
0649       dissociationProcess->SetVerboseLevel(3);
0650 
0651       moleculeDef->GetProcessManager()->AddRestProcess(dissociationProcess, 1);
0652     }
0653     /*
0654      * Warning : end of particles and processes are needed by
0655      * EM Physics builders
0656      */
0657   }
0658 
0659   G4DNAChemistryManager::Instance()->Initialize();
0660 }
0661 
0662 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0663 
0664 void G4EmDNAChemistryForPlasmids::ConstructTimeStepModel(G4DNAMolecularReactionTable*
0665                                                          /*reactionTable*/)
0666 {
0667   RegisterTimeStepModel(new G4DNAMolecularIRTModel(), 0);
0668 }
0669 
0670 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0671 
0672 void G4EmDNAChemistryForPlasmids::DeclareDMSOAndDNAReactions(
0673   G4DNAMolecularReactionTable* theReactionTable)
0674 {
0675   G4MolecularConfiguration* DMSO = G4MoleculeTable::Instance()->GetConfiguration("DMSO");
0676 
0677   G4MolecularConfiguration* OH = G4MoleculeTable::Instance()->GetConfiguration("OH");
0678 
0679   G4MolecularConfiguration* H = G4MoleculeTable::Instance()->GetConfiguration("H");
0680 
0681   G4MolecularConfiguration* e_aq = G4MoleculeTable::Instance()->GetConfiguration("e_aq");
0682 
0683   G4MolecularConfiguration* deoxyribose =
0684     G4MoleculeTable::Instance()->GetConfiguration("Deoxyribose");
0685 
0686   G4MolecularConfiguration* damage_deoxyribose_OH =
0687     G4MoleculeTable::Instance()->GetConfiguration("Damaged_DeoxyriboseOH");
0688 
0689   G4MolecularConfiguration* damage_deoxyribose_H =
0690     G4MoleculeTable::Instance()->GetConfiguration("Damaged_DeoxyriboseH");
0691 
0692   G4MolecularConfiguration* damage_deoxyribose_eaq =
0693     G4MoleculeTable::Instance()->GetConfiguration("Damaged_DeoxyriboseEAQ");
0694 
0695   G4double DNA_OH_Rate = 1.32E7 * std::pow(fDMSO * 7.1E9, 0.29);
0696 
0697   // DMSO Reactions
0698   // OH + DMSO
0699   G4DNAMolecularReactionData* reactionData =
0700     new G4DNAMolecularReactionData(fDMSO * 7.1E9 / s, OH, DMSO);
0701   theReactionTable->SetReaction(reactionData);
0702   //----------------------------------------------------------------//
0703   // H + DMSO
0704   reactionData = new G4DNAMolecularReactionData(fDMSO * 2.7E7 / s, H, DMSO);
0705   theReactionTable->SetReaction(reactionData);
0706   //----------------------------------------------------------------//
0707   // e-_aq + DMSO
0708   reactionData = new G4DNAMolecularReactionData(fDMSO * 3.8E6 / s, e_aq, DMSO);
0709   theReactionTable->SetReaction(reactionData);
0710   //----------------------------------------------------------------//
0711 
0712   //----------------------------------------------------------------//
0713   // DNA Type                                                       //
0714   //----------------------------------------------------------------//
0715   // DNA + OH -> Damage
0716   reactionData =
0717     new G4DNAMolecularReactionData(DNA_OH_Rate * (1e-3 * m3 / (mole * s)), deoxyribose, OH);
0718   reactionData->AddProduct(damage_deoxyribose_OH);
0719   theReactionTable->SetReaction(reactionData);
0720   //----------------------------------------------------------------//
0721   // DNA + H
0722   reactionData = new G4DNAMolecularReactionData(0.03e9 * (1e-3 * m3 / (mole * s)), deoxyribose, H);
0723   reactionData->AddProduct(damage_deoxyribose_H);
0724   theReactionTable->SetReaction(reactionData);
0725   //----------------------------------------------------------------//
0726   // DNA + e-_aq
0727   reactionData =
0728     new G4DNAMolecularReactionData(0.01e9 * (1e-3 * m3 / (mole * s)), deoxyribose, e_aq);
0729   reactionData->AddProduct(damage_deoxyribose_eaq);
0730   theReactionTable->SetReaction(reactionData);
0731   //----------------------------------------------------------------//
0732 }
0733 
0734 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0735 
0736 void G4EmDNAChemistryForPlasmids::DeclareOxygenReactions(
0737   G4DNAMolecularReactionTable* theReactionTable)
0738 {
0739   G4MolecularConfiguration* Oxygen = G4MoleculeTable::Instance()->GetConfiguration("Oxygen");
0740 
0741   G4MolecularConfiguration* H = G4MoleculeTable::Instance()->GetConfiguration("H");
0742 
0743   G4MolecularConfiguration* e_aq = G4MoleculeTable::Instance()->GetConfiguration("e_aq");
0744 
0745   G4MolecularConfiguration* O2m = G4MoleculeTable::Instance()->GetConfiguration("O2m");
0746 
0747   G4MolecularConfiguration* HO2 = G4MoleculeTable::Instance()->GetConfiguration("HO2");
0748 
0749   G4MolecularConfiguration* O2 = G4MoleculeTable::Instance()->GetConfiguration("O2");
0750 
0751   G4MolecularConfiguration* OH = G4MoleculeTable::Instance()->GetConfiguration("OH");
0752 
0753   // Oxygen Reactions
0754   // e_aq + O2B
0755   G4DNAMolecularReactionData* reactionData =
0756     new G4DNAMolecularReactionData((fOxygen * 1.9E10) / s, e_aq, Oxygen);
0757   reactionData->AddProduct(O2m);
0758   theReactionTable->SetReaction(reactionData);
0759   //------------------------------------------------------------------
0760   // H + O2B
0761   reactionData = new G4DNAMolecularReactionData((fOxygen * 2.1E10) / s, H, Oxygen);
0762   reactionData->AddProduct(HO2);
0763   theReactionTable->SetReaction(reactionData);
0764   //------------------------------------------------------------------
0765   // e_aq + O2
0766   reactionData = new G4DNAMolecularReactionData(1.9E10 * (1e-3 * m3 / (mole * s)), e_aq, O2);
0767   reactionData->AddProduct(O2m);
0768   reactionData->SetReactionType(1);
0769   theReactionTable->SetReaction(reactionData);
0770   //------------------------------------------------------------------
0771   // H + O2
0772   reactionData = new G4DNAMolecularReactionData(2.1E10 * (1e-3 * m3 / (mole * s)), H, O2);
0773   reactionData->AddProduct(HO2);
0774   reactionData->SetReactionType(1);
0775   theReactionTable->SetReaction(reactionData);
0776   //------------------------------------------------------------------
0777   // OH + HO2
0778   reactionData = new G4DNAMolecularReactionData(7.9E9 * (1e-3 * m3 / (mole * s)), OH, HO2);
0779   reactionData->AddProduct(O2);
0780   reactionData->SetReactionType(1);
0781   theReactionTable->SetReaction(reactionData);
0782   //------------------------------------------------------------------
0783 }
0784 
0785 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......