Import Geant4 11.2.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2023-06-30 09:09:57 +02:00
parent aef78ca386
commit dd1f179cda
3780 changed files with 212808 additions and 142780 deletions
@@ -0,0 +1,319 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
// Geant4 class G4ChemDissociationChannels
//
// Author H. Tran 16.12.2022
//
#include "G4ChemDissociationChannels.hh"
#include "G4DNAWaterDissociationDisplacer.hh"
#include "G4DNAWaterExcitationStructure.hh"
#include "G4Electron_aq.hh"
#include "G4H2.hh"
#include "G4H2O.hh"
#include "G4H2O2.hh"
#include "G4H3O.hh"
#include "G4Hydrogen.hh"
#include "G4MolecularConfiguration.hh"
#include "G4MoleculeTable.hh"
#include "G4OH.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4ChemDissociationChannels::ConstructMolecule()
{
// Create the definition
G4H2O::Definition();
G4Hydrogen::Definition();
G4H3O::Definition();
G4OH::Definition();
G4Electron_aq::Definition();
G4H2O2::Definition();
G4H2::Definition();
auto molTable = G4MoleculeTable::Instance();
molTable->CreateConfiguration("H3Op", G4H3O::Definition());
G4MolecularConfiguration* OHm =
molTable->CreateConfiguration("OHm", // just a tag to store and retrieve
// from G4MoleculeTable
G4OH::Definition(),
-1, // charge
5.0e-9 * (m2 / s));
OHm->SetMass(17.0079 * g / Avogadro * c_squared);
molTable->CreateConfiguration("OH", G4OH::Definition());
molTable->CreateConfiguration("e_aq", G4Electron_aq::Definition());
molTable->CreateConfiguration("H", G4Hydrogen::Definition());
molTable->CreateConfiguration("H2", G4H2::Definition());
molTable->CreateConfiguration("H2O2", G4H2O2::Definition());
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4ChemDissociationChannels::ConstructDissociationChannels()
{
//-----------------------------------
// Get the molecular configuration
auto molTable = G4MoleculeTable::Instance();
G4MolecularConfiguration* OH = molTable->GetConfiguration("OH");
G4MolecularConfiguration* OHm = molTable->GetConfiguration("OHm");
G4MolecularConfiguration* e_aq = molTable->GetConfiguration("e_aq");
G4MolecularConfiguration* H2 = molTable->GetConfiguration("H2");
G4MolecularConfiguration* H3O = molTable->GetConfiguration("H3Op");
G4MolecularConfiguration* H = molTable->GetConfiguration("H");
//-------------------------------------
// Define the decay channels
G4MoleculeDefinition* water = G4H2O::Definition();
G4MolecularDissociationChannel* decCh1;
G4MolecularDissociationChannel* decCh2;
auto occ = new G4ElectronOccupancy(*(water->GetGroundStateElectronOccupancy()));
//////////////////////////////////////////////////////////
// EXCITATIONS //
//////////////////////////////////////////////////////////
G4DNAWaterExcitationStructure waterExcitation;
//--------------------------------------------------------
//---------------Excitation on the fifth layer------------
decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relax");
decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociDecay");
// Decay 1 : OH + H
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0));
decCh1->SetProbability(0.35);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement);
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.65);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
// water->AddExcitedState("A^1B_1");
occ->RemoveElectron(4, 1); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1
water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ);
water->AddDecayChannel("A^1B_1", decCh1);
water->AddDecayChannel("A^1B_1", decCh2);
//--------------------------------------------------------
//---------------Excitation on the fourth layer-----------
decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relax_Channel");
decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociDecay");
auto decCh3 = new G4MolecularDissociationChannel("B^1A_1_AutoIoni_Channel");
// Decay 1 : energy
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1));
decCh1->SetProbability(0.3);
// Decay 2 : 2OH + H_2
decCh2->AddProduct(H2);
decCh2->AddProduct(OH);
decCh2->AddProduct(OH);
decCh2->SetProbability(0.15);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
// Decay 3 : OH + H_3Op + e_aq
decCh3->AddProduct(OH);
decCh3->AddProduct(H3O);
decCh3->AddProduct(e_aq);
decCh3->SetProbability(0.55);
decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1
water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ);
water->AddDecayChannel("B^1A_1", decCh1);
water->AddDecayChannel("B^1A_1", decCh2);
water->AddDecayChannel("B^1A_1", decCh3);
//-------------------------------------------------------
//-------------------Excitation of 3rd layer-----------------
decCh1 = new G4MolecularDissociationChannel("Exc3rdLayer_AutoIoni_Channel");
decCh2 = new G4MolecularDissociationChannel("Exc3rdLayer_Relax_Channel");
// Decay channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
// Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2));
decCh2->SetProbability(0.5);
// Electronic configuration of this decay
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
occ->AddElectron(5, 1);
// Configure the water molecule
water->NewConfigurationWithElectronOccupancy("Exci3rdLayer", *occ);
water->AddDecayChannel("Exci3rdLayer", decCh1);
water->AddDecayChannel("Exci3rdLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 2nd layer-----------------
decCh1 = new G4MolecularDissociationChannel("Exc2ndLayer_AutoIoni_Channel");
decCh2 = new G4MolecularDissociationChannel("Exc2ndLayer_Relax_Channel");
// Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
// Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3));
decCh2->SetProbability(0.5);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
occ->AddElectron(5, 1);
water->NewConfigurationWithElectronOccupancy("Exci2ndLayer", *occ);
water->AddDecayChannel("Exci2ndLayer", decCh1);
water->AddDecayChannel("Exci2ndLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 1st layer-----------------
decCh1 = new G4MolecularDissociationChannel("Exci1stLayer_AutoIoni_Channel");
decCh2 = new G4MolecularDissociationChannel("Exci1stLayer_Relax_Channel");
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
occ->AddElectron(5, 1);
// Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
// Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4));
decCh2->SetProbability(0.5);
water->NewConfigurationWithElectronOccupancy("Exci1stLayer", *occ);
water->AddDecayChannel("Exci1stLayer", decCh1);
water->AddDecayChannel("Exci1stLayer", decCh2);
/////////////////////////////////////////////////////////
// IONISATION //
/////////////////////////////////////////////////////////
//--------------------------------------------------------
//------------------- Ionisation -------------------------
decCh1 = new G4MolecularDissociationChannel("Ioni_Channel");
// Decay Channel 1 : : OH + H_3Op
decCh1->AddProduct(H3O);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(4, 1);
// this is a ionized h2O with a hole in its last orbital
water->NewConfigurationWithElectronOccupancy("Ioni5", *occ);
water->AddDecayChannel("Ioni5", decCh1);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3, 1);
water->NewConfigurationWithElectronOccupancy("Ioni4", *occ);
water->AddDecayChannel("Ioni4", new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
water->NewConfigurationWithElectronOccupancy("Ioni3", *occ);
water->AddDecayChannel("Ioni3", new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
water->NewConfigurationWithElectronOccupancy("Ioni2", *occ);
water->AddDecayChannel("Ioni2", new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
water->NewConfigurationWithElectronOccupancy("Ioni1", *occ);
water->AddDecayChannel("Ioni1", new G4MolecularDissociationChannel(*decCh1));
//////////////////////////////////////////////////////////
// Dissociative Attachment //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("DissociAttachment");
// Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OHm);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::DissociativeAttachment);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->AddElectron(5, 1); // H_2O^-
water->NewConfigurationWithElectronOccupancy("DissociAttachment", *occ);
water->AddDecayChannel("DissociAttachment", decCh1);
//////////////////////////////////////////////////////////
// Electron-hole recombination //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay1");
decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay2");
decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay3");
// Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OH);
decCh1->AddProduct(OH);
decCh1->SetProbability(0.15);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
// Decay 2 : OH + H
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.55);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
// Decay 3 : relaxation
decCh3->SetProbability(0.30);
const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib");
water->AddDecayChannel(pH2Ovib, decCh1);
water->AddDecayChannel(pH2Ovib, decCh2);
water->AddDecayChannel(pH2Ovib, decCh3);
delete occ;
}
@@ -0,0 +1,456 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
// Geant4 class G4ChemDissociationChannels_option1
//
// H. Tran 16.12.2022
//
#include "G4ChemDissociationChannels_option1.hh"
#include "G4DNAWaterDissociationDisplacer.hh"
#include "G4DNAWaterExcitationStructure.hh"
#include "G4Electron_aq.hh"
#include "G4FakeMolecule.hh"
#include "G4H2.hh"
#include "G4H2O.hh"
#include "G4H2O2.hh"
#include "G4H3O.hh"
#include "G4HO2.hh"
#include "G4Hydrogen.hh"
#include "G4MolecularConfiguration.hh"
#include "G4MoleculeTable.hh"
#include "G4O2.hh"
#include "G4O3.hh"
#include "G4OH.hh"
#include "G4Oxygen.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4Scheduler.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4ChemDissociationChannels_option1::ConstructMolecule()
{
//-----------------------------------
// G4Electron::Definition(); // safety
//-----------------------------------
// Create the definition
G4H2O::Definition();
G4Hydrogen::Definition();
G4H3O::Definition();
G4OH::Definition();
G4Electron_aq::Definition();
G4H2O2::Definition();
G4H2::Definition();
G4O2::Definition();
G4HO2::Definition();
G4Oxygen::Definition();
G4O3::Definition();
//____________________________________________________________________________
auto molTable = G4MoleculeTable::Instance();
molTable->CreateConfiguration("H3Op", G4H3O::Definition());
molTable->GetConfiguration("H3Op")->SetDiffusionCoefficient(9.46e-9
* (m2 / s));
molTable->GetConfiguration("H3Op")->SetVanDerVaalsRadius(0.25 * nm);
molTable->CreateConfiguration("OH", G4OH::Definition());
molTable->GetConfiguration("OH")->SetDiffusionCoefficient(2.2e-9 * (m2 / s));
molTable->GetConfiguration("OH")->SetVanDerVaalsRadius(0.22 * nm);
G4MolecularConfiguration* OHm =
molTable->CreateConfiguration("OHm", // just a tag to store and retrieve
// from G4MoleculeTable
G4OH::Definition(),
-1, // charge
5.3e-9 * (m2 / s));
OHm->SetMass(17.0079 * g / Avogadro * c_squared);
OHm->SetVanDerVaalsRadius(0.33 * nm);
molTable->CreateConfiguration("e_aq", G4Electron_aq::Definition());
molTable->GetConfiguration("e_aq")->SetVanDerVaalsRadius(0.50 * nm);
molTable->CreateConfiguration("H", G4Hydrogen::Definition());
molTable->GetConfiguration("H")->SetVanDerVaalsRadius(0.19 * nm);
molTable->CreateConfiguration("H2", G4H2::Definition());
molTable->GetConfiguration("H2")->SetDiffusionCoefficient(4.8e-9 * (m2 / s));
molTable->GetConfiguration("H2")->SetVanDerVaalsRadius(0.14 * nm);
molTable->CreateConfiguration("H2O2", G4H2O2::Definition());
molTable->GetConfiguration("H2O2")->SetDiffusionCoefficient(2.3e-9 * (m2 / s));
molTable->GetConfiguration("H2O2")->SetVanDerVaalsRadius(0.21 * nm);
// molecules extension (RITRACKS)
molTable->CreateConfiguration("HO2", G4HO2::Definition());
molTable->GetConfiguration("HO2")->SetVanDerVaalsRadius(0.21 * nm);
G4MolecularConfiguration* HO2m =
molTable->CreateConfiguration("HO2m", // just a tag to store and retrieve
// from G4MoleculeTable
G4HO2::Definition(),
-1, // charge
1.4e-9 * (m2 / s));
HO2m->SetMass(33.00396 * g / Avogadro * c_squared);
HO2m->SetVanDerVaalsRadius(0.25 * nm);
molTable->CreateConfiguration("Oxy", G4Oxygen::Definition());
molTable->GetConfiguration("Oxy")->SetVanDerVaalsRadius(0.20 * nm);
G4MolecularConfiguration* Om =
molTable->CreateConfiguration("Om", // just a tag to store and retrieve from
// G4MoleculeTable
G4Oxygen::Definition(),
-1, // charge
2.0e-9 * (m2 / s));
Om->SetMass(15.99829 * g / Avogadro * c_squared);
Om->SetVanDerVaalsRadius(0.25 * nm);
molTable->CreateConfiguration("O2", G4O2::Definition());
molTable->GetConfiguration("O2")->SetVanDerVaalsRadius(0.17 * nm);
G4MolecularConfiguration* O2m =
molTable->CreateConfiguration("O2m", // just a tag to store and retrieve
// from G4MoleculeTable
G4O2::Definition(),
-1, // charge
1.75e-9 * (m2 / s));
O2m->SetMass(31.99602 * g / Avogadro * c_squared);
O2m->SetVanDerVaalsRadius(0.22 * nm);
molTable->CreateConfiguration("O3", G4O3::Definition());
molTable->GetConfiguration("O3")->SetVanDerVaalsRadius(0.20 * nm);
G4MolecularConfiguration* O3m =
molTable->CreateConfiguration("O3m", // just a tag to store and retrieve
// from G4MoleculeTable
G4O3::Definition(),
-1, // charge
2.0e-9 * (m2 / s));
O3m->SetMass(47.99375 * g / Avogadro * c_squared);
O3m->SetVanDerVaalsRadius(0.20 * nm);
molTable->CreateConfiguration("H2O(B)", // just a tag to store and retrieve
// from G4MoleculeTable
G4H2O::Definition(),
0, // charge
0 * (m2 / s));
molTable->CreateConfiguration("H3Op(B)", // just a tag to store and retrieve
// from G4MoleculeTable
G4H3O::Definition(),
1, // charge
0 * (m2 / s));
molTable->CreateConfiguration("OHm(B)", // just a tag to store and retrieve
// from G4MoleculeTable
G4OH::Definition(),
-1, // charge
0 * (m2 / s));
molTable->CreateConfiguration("NoneM", G4FakeMolecule::Definition());
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4ChemDissociationChannels_option1::ConstructDissociationChannels()
{
//-----------------------------------
// Get the molecular configuration
auto molTable = G4MoleculeTable::Instance();
G4MolecularConfiguration* OH = molTable->GetConfiguration("OH");
G4MolecularConfiguration* OHm = molTable->GetConfiguration("OHm");
G4MolecularConfiguration* e_aq = molTable->GetConfiguration("e_aq");
G4MolecularConfiguration* H2 = molTable->GetConfiguration("H2");
G4MolecularConfiguration* H3O = molTable->GetConfiguration("H3Op");
G4MolecularConfiguration* H = molTable->GetConfiguration("H");
G4MolecularConfiguration* O = molTable->GetConfiguration("Oxy");
//-------------------------------------
// Define the decay channels
G4MoleculeDefinition* water = G4H2O::Definition();
G4MolecularDissociationChannel* decCh1;
G4MolecularDissociationChannel* decCh2;
G4MolecularDissociationChannel* decCh3;
G4MolecularDissociationChannel* decCh4;
G4MolecularDissociationChannel* decCh5;
G4ElectronOccupancy* occ = new G4ElectronOccupancy(*(water->GetGroundStateElectronOccupancy()));
//////////////////////////////////////////////////////////
// EXCITATIONS //
//////////////////////////////////////////////////////////
G4DNAWaterExcitationStructure waterExcitation;
//--------------------------------------------------------
//---------------Excitation on the fifth layer------------
decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relax");
decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociDecay");
// Decay 1 : OH + H
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0));
decCh1->SetProbability(0.35);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement);
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.65);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
occ->RemoveElectron(4, 1); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1
water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ);
water->AddDecayChannel("A^1B_1", decCh1);
water->AddDecayChannel("A^1B_1", decCh2);
//--------------------------------------------------------
//---------------Excitation on the fourth layer-----------
decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relax_Channel");
decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociDecay");
decCh3 = new G4MolecularDissociationChannel("B^1A_1_AutoIoni_Channel");
decCh4 = new G4MolecularDissociationChannel("A^1B_1_DissociDecay");
decCh5 = new G4MolecularDissociationChannel("B^1A_1_DissociDecay2");
// Decay 1 : energy
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1));
decCh1->SetProbability(0.175);
// Decay 2 : 2OH + H_2
decCh2->AddProduct(H2);
decCh2->AddProduct(OH);
decCh2->AddProduct(OH);
decCh2->SetProbability(0.0325);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
// Decay 3 : OH + H_3Op + e_aq
decCh3->AddProduct(OH);
decCh3->AddProduct(H3O);
decCh3->AddProduct(e_aq);
decCh3->SetProbability(0.50);
decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
// Decay 4 : H + OH
decCh4->AddProduct(H);
decCh4->AddProduct(OH);
decCh4->SetProbability(0.2535);
decCh4->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
// Decay 5 : 2H + O
decCh5->AddProduct(O);
decCh5->AddProduct(H);
decCh5->AddProduct(H);
decCh5->SetProbability(0.039);
decCh5->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay2);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1
water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ);
water->AddDecayChannel("B^1A_1", decCh1);
water->AddDecayChannel("B^1A_1", decCh2);
water->AddDecayChannel("B^1A_1", decCh3);
water->AddDecayChannel("B^1A_1", decCh4);
water->AddDecayChannel("B^1A_1", decCh5);
//-------------------------------------------------------
//-------------------Excitation of 3rd layer-----------------
decCh1 = new G4MolecularDissociationChannel("Exci3rdLayer_AutoIoni_Channel");
decCh2 = new G4MolecularDissociationChannel("Exci3rdLayer_Relax_Channel");
// Decay channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
// Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2));
decCh2->SetProbability(0.5);
// Electronic configuration of this decay
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
occ->AddElectron(5, 1);
// Configure the water molecule
water->NewConfigurationWithElectronOccupancy("Exci3rdLayer", *occ);
water->AddDecayChannel("Exci3rdLayer", decCh1);
water->AddDecayChannel("Exci3rdLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 2nd layer-----------------
decCh1 = new G4MolecularDissociationChannel("Exci2ndLayer_AutoIoni_Channel");
decCh2 = new G4MolecularDissociationChannel("Exci2ndLayer_Relax_Channel");
// Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
// Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3));
decCh2->SetProbability(0.5);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
occ->AddElectron(5, 1);
water->NewConfigurationWithElectronOccupancy("Exci2ndLayer", *occ);
water->AddDecayChannel("Exci2ndLayer", decCh1);
water->AddDecayChannel("Exci2ndLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 1st layer-----------------
decCh1 = new G4MolecularDissociationChannel("Exci1stLayer_AutoIoni_Channel");
decCh2 = new G4MolecularDissociationChannel("Exci1stLayer_Relax_Channel");
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
occ->AddElectron(5, 1);
// Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
// Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4));
decCh2->SetProbability(0.5);
water->NewConfigurationWithElectronOccupancy("Exci1stLayer", *occ);
water->AddDecayChannel("Exci1stLayer", decCh1);
water->AddDecayChannel("Exci1stLayer", decCh2);
/////////////////////////////////////////////////////////
// IONISATION //
/////////////////////////////////////////////////////////
//--------------------------------------------------------
//------------------- Ionisation -------------------------
decCh1 = new G4MolecularDissociationChannel("Ioni_Channel");
// Decay Channel 1 : : OH + H_3Op
decCh1->AddProduct(H3O);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(4, 1);
// this is a ionized h2O with a hole in its last orbital
water->NewConfigurationWithElectronOccupancy("Ioni5", *occ);
water->AddDecayChannel("Ioni5", decCh1);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3, 1);
water->NewConfigurationWithElectronOccupancy("Ioni4", *occ);
water->AddDecayChannel("Ioni4", new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
water->NewConfigurationWithElectronOccupancy("Ioni3", *occ);
water->AddDecayChannel("Ioni3", new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
water->NewConfigurationWithElectronOccupancy("Ioni2", *occ);
water->AddDecayChannel("Ioni2", new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
water->NewConfigurationWithElectronOccupancy("Ioni1", *occ);
water->AddDecayChannel("Ioni1", new G4MolecularDissociationChannel(*decCh1));
//////////////////////////////////////////////////////////
// Dissociative Attachment //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("DissociAttachment_ch1");
// Decay 1 : OHm + H
decCh1->AddProduct(H2);
decCh1->AddProduct(OHm);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::DissociativeAttachment);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->AddElectron(5, 1); // H_2O^-
water->NewConfigurationWithElectronOccupancy("DissociAttachment_ch1", *occ);
water->AddDecayChannel("DissociAttachment_ch1", decCh1);
//////////////////////////////////////////////////////////
// Electron-hole recombination //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay1");
decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay2");
decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay3");
decCh4 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay4");
// Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OH);
decCh1->AddProduct(OH);
decCh1->SetProbability(0.1365);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
// Decay 2 : OH + H
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.3575);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
// Decay 3 : 2H + O(3p)
decCh3->AddProduct(O);
decCh3->AddProduct(H);
decCh3->AddProduct(H);
decCh3->SetProbability(0.156);
decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay2);
// Decay 4 : relaxation
decCh4->SetProbability(0.35);
const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib");
assert(pH2Ovib != nullptr);
water->AddDecayChannel(pH2Ovib, decCh1);
water->AddDecayChannel(pH2Ovib, decCh2);
water->AddDecayChannel(pH2Ovib, decCh3);
water->AddDecayChannel(pH2Ovib, decCh4);
delete occ;
}
@@ -64,7 +64,6 @@
#include "G4MuMultipleScattering.hh"
#include "G4hMultipleScattering.hh"
#include "G4CoulombScattering.hh"
#include "G4ParticleTable.hh"
#include "G4Gamma.hh"
@@ -150,19 +149,19 @@ void G4EmBuilder::ConstructIonEmPhysicsSS()
G4ParticleDefinition* part = G4Deuteron::Deuteron();
ph->RegisterProcess(new G4hIonisation(), part);
ph->RegisterProcess(new G4CoulombScattering(), part);
ph->RegisterProcess(new G4CoulombScattering(false), part);
part = G4Triton::Triton();
ph->RegisterProcess(new G4hIonisation(), part);
ph->RegisterProcess(new G4CoulombScattering(), part);
ph->RegisterProcess(new G4CoulombScattering(false), part);
part = G4Alpha::Alpha();
ph->RegisterProcess(new G4ionIonisation(), part);
ph->RegisterProcess(new G4CoulombScattering(), part);
ph->RegisterProcess(new G4CoulombScattering(false), part);
part = G4He3::He3();
ph->RegisterProcess(new G4ionIonisation(), part);
ph->RegisterProcess(new G4CoulombScattering(), part);
ph->RegisterProcess(new G4CoulombScattering(false), part);
}
void G4EmBuilder::ConstructLightHadrons(G4ParticleDefinition* part1,
@@ -219,14 +218,15 @@ void G4EmBuilder::ConstructLightHadronsSS(G4ParticleDefinition* part1,
ph->RegisterProcess(brem, part1);
ph->RegisterProcess(pair, part1);
}
ph->RegisterProcess(new G4CoulombScattering(), part1);
auto ss = new G4CoulombScattering(false);
ph->RegisterProcess(ss, part1);
ph->RegisterProcess(new G4hIonisation(), part2);
if( isHEP ) {
ph->RegisterProcess(brem, part2);
ph->RegisterProcess(pair, part2);
}
ph->RegisterProcess(new G4CoulombScattering(), part2);
ph->RegisterProcess(new G4CoulombScattering(false), part2);
}
void G4EmBuilder::ConstructCharged(G4hMultipleScattering* hmsc,
@@ -306,7 +306,7 @@ void G4EmBuilder::ConstructChargedSS(G4hMultipleScattering* hmsc)
G4bool isHEP = ( param->MaxKinEnergy() > hpar->EnergyThresholdForHeavyHadrons() );
// muon multiple and single scattering
G4CoulombScattering* muss = new G4CoulombScattering();
G4CoulombScattering* muss = new G4CoulombScattering(false);
// Add standard EM Processes
// mu+-
@@ -24,13 +24,12 @@
// ********************************************************************
//
#include "G4EmDNAChemistry.hh"
#include "G4ChemDissociationChannels.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4DNAWaterDissociationDisplacer.hh"
#include "G4DNAChemistryManager.hh"
#include "G4DNAWaterExcitationStructure.hh"
#include "G4ProcessManager.hh"
#include "G4DNAGenericIonsManager.hh"
@@ -39,15 +38,9 @@
#include "G4DNAElectronSolvation.hh"
#include "G4DNAAttachment.hh"
#include "G4DNAVibExcitation.hh"
#include "G4DNASancheExcitationModel.hh"
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAScreenedRutherfordElasticModel.hh"
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
#include "G4DNAMolecularDissociation.hh"
#include "G4DNABrownianTransportation.hh"
#include "G4DNAMolecularReactionTable.hh"
@@ -56,30 +49,16 @@
#include "G4DNASmoluchowskiReactionModel.hh"
#include "G4DNAElectronHoleRecombination.hh"
// particles
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
#include "G4MoleculeTable.hh"
#include "G4H2O.hh"
#include "G4H2.hh"
#include "G4Hydrogen.hh"
#include "G4OH.hh"
#include "G4H3O.hh"
#include "G4Electron_aq.hh"
#include "G4H2O2.hh"
#include "G4PhysicsListHelper.hh"
#include "G4BuilderType.hh"
/****/
#include "G4DNAMoleculeEncounterStepper.hh"
#include "G4ProcessVector.hh"
#include "G4ProcessTable.hh"
#include "G4DNASecondOrderReaction.hh"
#include "G4MolecularConfiguration.hh"
/****/
@@ -98,316 +77,16 @@ G4EmDNAChemistry::G4EmDNAChemistry() :
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAChemistry::~G4EmDNAChemistry()
{
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAChemistry::ConstructMolecule()
{
//-----------------------------------
G4Electron::Definition(); // safety
//-----------------------------------
// Create the definition
G4H2O::Definition();
G4Hydrogen::Definition();
G4H3O::Definition();
G4OH::Definition();
G4Electron_aq::Definition();
G4H2O2::Definition();
G4H2::Definition();
//____________________________________________________________________________
G4MoleculeTable::Instance()->CreateConfiguration("H3Op", G4H3O::Definition());
G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()->
CreateConfiguration("OHm", // just a tag to store and retrieve from
// G4MoleculeTable
G4OH::Definition(),
-1, // charge
5.0e-9 * (m2 / s));
OHm->SetMass(17.0079 * g / Avogadro * c_squared);
G4MoleculeTable::Instance()->CreateConfiguration("OH", G4OH::Definition());
G4MoleculeTable::Instance()->CreateConfiguration("e_aq",
G4Electron_aq::Definition());
G4MoleculeTable::Instance()->CreateConfiguration("H",
G4Hydrogen::Definition());
G4MoleculeTable::Instance()->CreateConfiguration("H2", G4H2::Definition());
G4MoleculeTable::Instance()->CreateConfiguration("H2O2", G4H2O2::Definition());
G4ChemDissociationChannels::ConstructMolecule();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAChemistry::ConstructDissociationChannels()
{
//-----------------------------------
//Get the molecular configuration
G4MolecularConfiguration* OH =
G4MoleculeTable::Instance()->GetConfiguration("OH");
G4MolecularConfiguration* OHm =
G4MoleculeTable::Instance()->GetConfiguration("OHm");
G4MolecularConfiguration* e_aq =
G4MoleculeTable::Instance()->GetConfiguration("e_aq");
G4MolecularConfiguration* H2 =
G4MoleculeTable::Instance()->GetConfiguration("H2");
G4MolecularConfiguration* H3O =
G4MoleculeTable::Instance()->GetConfiguration("H3Op");
G4MolecularConfiguration* H =
G4MoleculeTable::Instance()->GetConfiguration("H");
//-------------------------------------
//Define the decay channels
G4MoleculeDefinition* water = G4H2O::Definition();
G4MolecularDissociationChannel* decCh1;
G4MolecularDissociationChannel* decCh2;
G4ElectronOccupancy* occ = new G4ElectronOccupancy(
*(water->GetGroundStateElectronOccupancy()));
//////////////////////////////////////////////////////////
// EXCITATIONS //
//////////////////////////////////////////////////////////
G4DNAWaterExcitationStructure waterExcitation;
//--------------------------------------------------------
//---------------Excitation on the fifth layer------------
decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relaxation");
decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay");
//Decay 1 : OH + H
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0));
decCh1->SetProbability(0.35);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement);
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.65);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
// water->AddExcitedState("A^1B_1");
occ->RemoveElectron(4, 1); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1
water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ);
water->AddDecayChannel("A^1B_1", decCh1);
water->AddDecayChannel("A^1B_1", decCh2);
//--------------------------------------------------------
//---------------Excitation on the fourth layer-----------
decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relaxation_Channel");
decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay");
G4MolecularDissociationChannel* decCh3 = new G4MolecularDissociationChannel(
"B^1A_1_AutoIonisation_Channel");
//Decay 1 : energy
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1));
decCh1->SetProbability(0.3);
//Decay 2 : 2OH + H_2
decCh2->AddProduct(H2);
decCh2->AddProduct(OH);
decCh2->AddProduct(OH);
decCh2->SetProbability(0.15);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
//Decay 3 : OH + H_3Op + e_aq
decCh3->AddProduct(OH);
decCh3->AddProduct(H3O);
decCh3->AddProduct(e_aq);
decCh3->SetProbability(0.55);
decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1
water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ);
water->AddDecayChannel("B^1A_1", decCh1);
water->AddDecayChannel("B^1A_1", decCh2);
water->AddDecayChannel("B^1A_1", decCh3);
//-------------------------------------------------------
//-------------------Excitation of 3rd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_Relaxation_Channel");
//Decay channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2));
decCh2->SetProbability(0.5);
//Electronic configuration of this decay
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
occ->AddElectron(5, 1);
//Configure the water molecule
water->NewConfigurationWithElectronOccupancy("Excitation3rdLayer", *occ);
water->AddDecayChannel("Excitation3rdLayer", decCh1);
water->AddDecayChannel("Excitation3rdLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 2nd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_Relaxation_Channel");
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3));
decCh2->SetProbability(0.5);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
occ->AddElectron(5, 1);
water->NewConfigurationWithElectronOccupancy("Excitation2ndLayer", *occ);
water->AddDecayChannel("Excitation2ndLayer", decCh1);
water->AddDecayChannel("Excitation2ndLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 1st layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation1stLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation1stLayer_Relaxation_Channel");
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
occ->AddElectron(5, 1);
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4));
decCh2->SetProbability(0.5);
water->NewConfigurationWithElectronOccupancy("Excitation1stLayer", *occ);
water->AddDecayChannel("Excitation1stLayer", decCh1);
water->AddDecayChannel("Excitation1stLayer", decCh2);
/////////////////////////////////////////////////////////
// IONISATION //
/////////////////////////////////////////////////////////
//--------------------------------------------------------
//------------------- Ionisation -------------------------
decCh1 = new G4MolecularDissociationChannel("Ionisation_Channel");
//Decay Channel 1 : : OH + H_3Op
decCh1->AddProduct(H3O);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(4, 1);
// this is a ionized h2O with a hole in its last orbital
water->NewConfigurationWithElectronOccupancy("Ionisation5", *occ);
water->AddDecayChannel("Ionisation5",
decCh1);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation4", *occ);
water->AddDecayChannel("Ionisation4",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation3", *occ);
water->AddDecayChannel("Ionisation3",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation2", *occ);
water->AddDecayChannel("Ionisation2",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation1", *occ);
water->AddDecayChannel("Ionisation1",
new G4MolecularDissociationChannel(*decCh1));
//////////////////////////////////////////////////////////
// Dissociative Attachment //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("DissociativeAttachment");
//Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OHm);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::
DissociativeAttachment);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->AddElectron(5, 1); // H_2O^-
water->NewConfigurationWithElectronOccupancy("DissociativeAttachment", *occ);
water->AddDecayChannel("DissociativeAttachment", decCh1);
//////////////////////////////////////////////////////////
// Electron-hole recombination //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay1");
decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay2");
decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay3");
//Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OH);
decCh1->AddProduct(OH);
decCh1->SetProbability(0.15);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::
B1A1_DissociationDecay);
//Decay 2 : OH + H
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.55);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::
A1B1_DissociationDecay);
//Decay 3 : relaxation
decCh3->SetProbability(0.30);
const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib");
assert(pH2Ovib != nullptr);
water->AddDecayChannel(pH2Ovib, decCh1);
water->AddDecayChannel(pH2Ovib, decCh2);
water->AddDecayChannel(pH2Ovib, decCh3);
delete occ;
G4ChemDissociationChannels::ConstructDissociationChannels();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -24,13 +24,9 @@
// ********************************************************************
//
#include "G4EmDNAChemistry_option1.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4DNAWaterDissociationDisplacer.hh"
#include "G4DNAChemistryManager.hh"
#include "G4DNAWaterExcitationStructure.hh"
#include "G4ProcessManager.hh"
#include "G4DNAGenericIonsManager.hh"
@@ -39,47 +35,25 @@
#include "G4DNAElectronSolvation.hh"
#include "G4DNAAttachment.hh"
#include "G4DNAVibExcitation.hh"
#include "G4DNASancheExcitationModel.hh"
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAScreenedRutherfordElasticModel.hh"
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
#include "G4DNAMolecularDissociation.hh"
#include "G4DNABrownianTransportation.hh"
#include "G4DNAMolecularReactionTable.hh"
#include "G4DNAMolecularStepByStepModel.hh"
#include "G4VDNAReactionModel.hh"
#include "G4DNASmoluchowskiReactionModel.hh"
#include "G4DNAElectronHoleRecombination.hh"
#include "G4ChemDissociationChannels.hh"
// particles
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
#include "G4MoleculeTable.hh"
#include "G4H2O.hh"
#include "G4H2.hh"
#include "G4Hydrogen.hh"
#include "G4OH.hh"
#include "G4H3O.hh"
#include "G4Electron_aq.hh"
#include "G4H2O2.hh"
#include "G4PhysicsListHelper.hh"
#include "G4BuilderType.hh"
/****/
#include "G4DNAMoleculeEncounterStepper.hh"
#include "G4ProcessVector.hh"
#include "G4ProcessTable.hh"
#include "G4DNASecondOrderReaction.hh"
#include "G4MolecularConfiguration.hh"
/****/
@@ -88,8 +62,6 @@
G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry_option1);
#include "G4Threading.hh"
G4EmDNAChemistry_option1::G4EmDNAChemistry_option1() :
G4VUserChemistryList(true)
{
@@ -98,324 +70,29 @@ G4EmDNAChemistry_option1::G4EmDNAChemistry_option1() :
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAChemistry_option1::~G4EmDNAChemistry_option1()
{
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAChemistry_option1::ConstructMolecule()
{
//-----------------------------------
G4Electron::Definition(); // safety
//-----------------------------------
// Create the definition
G4H2O::Definition();
G4Hydrogen::Definition();
G4H3O::Definition();
G4OH::Definition();
G4Electron_aq::Definition();
G4H2O2::Definition();
G4H2::Definition();
G4ChemDissociationChannels::ConstructMolecule();
//____________________________________________________________________________
G4MoleculeTable::Instance()->CreateConfiguration("H3Op", G4H3O::Definition());
G4MoleculeTable::Instance()->GetConfiguration("H3Op")->SetDiffusionCoefficient(
9.46e-9 * (m2/s));
G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()->
CreateConfiguration("OHm", // just a tag to store and retrieve from
// G4MoleculeTable
G4OH::Definition(),
-1, // charge
5.3e-9 * (m2 / s));
OHm->SetMass(17.0079 * g / Avogadro * c_squared);
G4MoleculeTable::Instance()->CreateConfiguration("OH", G4OH::Definition());
G4MoleculeTable::Instance()->GetConfiguration("OHm")->SetDiffusionCoefficient(
5.3e-9 * (m2 / s));
G4MoleculeTable::Instance()->GetConfiguration("OH")->SetDiffusionCoefficient(
2.2e-9 * (m2/s));
G4MoleculeTable::Instance()->CreateConfiguration("e_aq",
G4Electron_aq::Definition());
G4MoleculeTable::Instance()->CreateConfiguration("H",
G4Hydrogen::Definition());
G4MoleculeTable::Instance()->CreateConfiguration("H2", G4H2::Definition());
2.2e-9 * (m2/s));
G4MoleculeTable::Instance()->GetConfiguration("H2")->SetDiffusionCoefficient(
4.8e-9 * (m2/s));
G4MoleculeTable::Instance()->CreateConfiguration("H2O2", G4H2O2::Definition());
4.8e-9 * (m2/s));
G4MoleculeTable::Instance()->GetConfiguration("H2O2")->SetDiffusionCoefficient(
2.3e-9 * (m2/s));
2.3e-9 * (m2/s));
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAChemistry_option1::ConstructDissociationChannels()
{
//-----------------------------------
//Get the molecular configuration
G4MolecularConfiguration* OH =
G4MoleculeTable::Instance()->GetConfiguration("OH");
G4MolecularConfiguration* OHm =
G4MoleculeTable::Instance()->GetConfiguration("OHm");
G4MolecularConfiguration* e_aq =
G4MoleculeTable::Instance()->GetConfiguration("e_aq");
G4MolecularConfiguration* H2 =
G4MoleculeTable::Instance()->GetConfiguration("H2");
G4MolecularConfiguration* H3O =
G4MoleculeTable::Instance()->GetConfiguration("H3Op");
G4MolecularConfiguration* H =
G4MoleculeTable::Instance()->GetConfiguration("H");
//-------------------------------------
//Define the decay channels
G4MoleculeDefinition* water = G4H2O::Definition();
G4MolecularDissociationChannel* decCh1;
G4MolecularDissociationChannel* decCh2;
G4ElectronOccupancy* occ = new G4ElectronOccupancy(
*(water->GetGroundStateElectronOccupancy()));
//////////////////////////////////////////////////////////
// EXCITATIONS //
//////////////////////////////////////////////////////////
G4DNAWaterExcitationStructure waterExcitation;
//--------------------------------------------------------
//---------------Excitation on the fifth layer------------
decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relaxation");
decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay");
//Decay 1 : OH + H
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0));
decCh1->SetProbability(0.35);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement);
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.65);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
// water->AddExcitedState("A^1B_1");
occ->RemoveElectron(4, 1); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1
water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ);
water->AddDecayChannel("A^1B_1", decCh1);
water->AddDecayChannel("A^1B_1", decCh2);
//--------------------------------------------------------
//---------------Excitation on the fourth layer-----------
decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relaxation_Channel");
decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay");
G4MolecularDissociationChannel* decCh3 = new G4MolecularDissociationChannel(
"B^1A_1_AutoIonisation_Channel");
//Decay 1 : energy
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1));
decCh1->SetProbability(0.3);
//Decay 2 : 2OH + H_2
decCh2->AddProduct(H2);
decCh2->AddProduct(OH);
decCh2->AddProduct(OH);
decCh2->SetProbability(0.15);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
//Decay 3 : OH + H_3Op + e_aq
decCh3->AddProduct(OH);
decCh3->AddProduct(H3O);
decCh3->AddProduct(e_aq);
decCh3->SetProbability(0.55);
decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1
water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ);
water->AddDecayChannel("B^1A_1", decCh1);
water->AddDecayChannel("B^1A_1", decCh2);
water->AddDecayChannel("B^1A_1", decCh3);
//-------------------------------------------------------
//-------------------Excitation of 3rd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_Relaxation_Channel");
//Decay channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2));
decCh2->SetProbability(0.5);
//Electronic configuration of this decay
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
occ->AddElectron(5, 1);
//Configure the water molecule
water->NewConfigurationWithElectronOccupancy("Excitation3rdLayer", *occ);
water->AddDecayChannel("Excitation3rdLayer", decCh1);
water->AddDecayChannel("Excitation3rdLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 2nd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_Relaxation_Channel");
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3));
decCh2->SetProbability(0.5);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
occ->AddElectron(5, 1);
water->NewConfigurationWithElectronOccupancy("Excitation2ndLayer", *occ);
water->AddDecayChannel("Excitation2ndLayer", decCh1);
water->AddDecayChannel("Excitation2ndLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 1st layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation1stLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation1stLayer_Relaxation_Channel");
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
occ->AddElectron(5, 1);
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4));
decCh2->SetProbability(0.5);
water->NewConfigurationWithElectronOccupancy("Excitation1stLayer", *occ);
water->AddDecayChannel("Excitation1stLayer", decCh1);
water->AddDecayChannel("Excitation1stLayer", decCh2);
/////////////////////////////////////////////////////////
// IONISATION //
/////////////////////////////////////////////////////////
//--------------------------------------------------------
//------------------- Ionisation -------------------------
decCh1 = new G4MolecularDissociationChannel("Ionisation_Channel");
//Decay Channel 1 : : OH + H_3Op
decCh1->AddProduct(H3O);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(4, 1);
// this is a ionized h2O with a hole in its last orbital
water->NewConfigurationWithElectronOccupancy("Ionisation5", *occ);
water->AddDecayChannel("Ionisation5",
decCh1);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation4", *occ);
water->AddDecayChannel("Ionisation4",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation3", *occ);
water->AddDecayChannel("Ionisation3",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation2", *occ);
water->AddDecayChannel("Ionisation2",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation1", *occ);
water->AddDecayChannel("Ionisation1",
new G4MolecularDissociationChannel(*decCh1));
//////////////////////////////////////////////////////////
// Dissociative Attachment //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("DissociativeAttachment");
//Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OHm);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::
DissociativeAttachment);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->AddElectron(5, 1); // H_2O^-
water->NewConfigurationWithElectronOccupancy("DissociativeAttachment", *occ);
water->AddDecayChannel("DissociativeAttachment", decCh1);
//////////////////////////////////////////////////////////
// Electron-hole recombination //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay1");
decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay2");
decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay3");
//Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OH);
decCh1->AddProduct(OH);
decCh1->SetProbability(0.15);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::
B1A1_DissociationDecay);
//Decay 2 : OH + H
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.55);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::
A1B1_DissociationDecay);
//Decay 3 : relaxation
decCh3->SetProbability(0.30);
const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib");
assert(pH2Ovib != nullptr);
water->AddDecayChannel(pH2Ovib, decCh1);
water->AddDecayChannel(pH2Ovib, decCh2);
water->AddDecayChannel(pH2Ovib, decCh3);
delete occ;
G4ChemDissociationChannels::ConstructDissociationChannels();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -56,6 +56,7 @@
#include "G4MolecularConfiguration.hh"
#include "G4PhysicsConstructorFactory.hh"
#include "G4VDNAReactionModel.hh"
#include "G4ChemDissociationChannels.hh"
G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry_option2);
@@ -69,23 +70,11 @@ G4EmDNAChemistry_option2::G4EmDNAChemistry_option2()
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAChemistry_option2::~G4EmDNAChemistry_option2()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAChemistry_option2::ConstructMolecule()
{
//-----------------------------------
G4Electron::Definition(); // safety
//-----------------------------------
G4H2O::Definition();
G4Hydrogen::Definition();
G4H3O::Definition();
G4OH::Definition();
G4Electron_aq::Definition();
G4H2O2::Definition();
G4H2::Definition();
G4ChemDissociationChannels::ConstructMolecule();
//____________________________________________________________________________
G4Deoxyribose::Definition();
G4Phosphate::Definition();
G4Adenine::Definition();
@@ -101,27 +90,6 @@ void G4EmDNAChemistry_option2::ConstructMolecule()
G4DamagedCytosine::Definition();
G4ModifiedHistone::Definition();
//_________________species___________________________________________________________
G4MoleculeTable::Instance()->
CreateConfiguration("H3Op", G4H3O::Definition());
G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()->
CreateConfiguration("OHm",
G4OH::Definition(),
-1, // charge
5.0e-9 * (m2 / s));
OHm->SetMass(17.0079 * g / Avogadro * c_squared);
G4MoleculeTable::Instance()->
CreateConfiguration("OH", G4OH::Definition());
G4MoleculeTable::Instance()->
CreateConfiguration("e_aq",G4Electron_aq::Definition());
G4MoleculeTable::Instance()->
CreateConfiguration("H",G4Hydrogen::Definition());
G4MoleculeTable::Instance()->
CreateConfiguration("H2", G4H2::Definition());
G4MoleculeTable::Instance()->
CreateConfiguration("H2O2", G4H2O2::Definition());
//________________DNA_______________________________________________
G4MoleculeTable::Instance()->
@@ -162,289 +130,7 @@ void G4EmDNAChemistry_option2::ConstructMolecule()
void G4EmDNAChemistry_option2::ConstructDissociationChannels()
{
//-----------------------------------
//Get the molecular configuration
G4MolecularConfiguration* OH =
G4MoleculeTable::Instance()->GetConfiguration("OH");
G4MolecularConfiguration* OHm =
G4MoleculeTable::Instance()->GetConfiguration("OHm");
G4MolecularConfiguration* e_aq =
G4MoleculeTable::Instance()->GetConfiguration("e_aq");
G4MolecularConfiguration* H2 =
G4MoleculeTable::Instance()->GetConfiguration("H2");
G4MolecularConfiguration* H3O =
G4MoleculeTable::Instance()->GetConfiguration("H3Op");
G4MolecularConfiguration* H =
G4MoleculeTable::Instance()->GetConfiguration("H");
//-------------------------------------
//Define the decay channels
G4MoleculeDefinition* water = G4H2O::Definition();
G4MolecularDissociationChannel* decCh1;
G4MolecularDissociationChannel* decCh2;
G4ElectronOccupancy* occ = new G4ElectronOccupancy(
*(water->GetGroundStateElectronOccupancy()));
//////////////////////////////////////////////////////////
// EXCITATIONS //
//////////////////////////////////////////////////////////
G4DNAWaterExcitationStructure waterExcitation;
//--------------------------------------------------------
//---------------Excitation on the fifth layer------------
decCh1 = new G4MolecularDissociationChannel(
"A^1B_1_Relaxation");
decCh2 = new G4MolecularDissociationChannel(
"A^1B_1_DissociativeDecay");
//Decay 1 : OH + H
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0));
decCh1->SetProbability(0.35);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::NoDisplacement);
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.65);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
// water->AddExcitedState("A^1B_1");
// this is the transition form ground state to
occ->RemoveElectron(4, 1);
// the first unoccupied orbital: A^1B_1
occ->AddElectron(5, 1);
water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ);
water->AddDecayChannel("A^1B_1", decCh1);
water->AddDecayChannel("A^1B_1", decCh2);
//--------------------------------------------------------
//---------------Excitation on the fourth layer-----------
decCh1 = new G4MolecularDissociationChannel(
"B^1A_1_Relaxation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"B^1A_1_DissociativeDecay");
G4MolecularDissociationChannel* decCh3 =
new G4MolecularDissociationChannel("B^1A_1_AutoIonisation_Channel");
//Decay 1 : energy
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1));
decCh1->SetProbability(0.3);
//Decay 2 : 2OH + H_2
decCh2->AddProduct(H2);
decCh2->AddProduct(OH);
decCh2->AddProduct(OH);
decCh2->SetProbability(0.15);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
//Decay 3 : OH + H_3Op + e_aq
decCh3->AddProduct(OH);
decCh3->AddProduct(H3O);
decCh3->AddProduct(e_aq);
decCh3->SetProbability(0.55);
decCh3->SetDisplacementType(
G4DNAWaterDissociationDisplacer::AutoIonisation);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1
water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ);
water->AddDecayChannel("B^1A_1", decCh1);
water->AddDecayChannel("B^1A_1", decCh2);
water->AddDecayChannel("B^1A_1", decCh3);
//-------------------------------------------------------
//-------------------Excitation of 3rd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_Relaxation_Channel");
//Decay channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2));
decCh2->SetProbability(0.5);
//Electronic configuration of this decay
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
occ->AddElectron(5, 1);
//Configure the water molecule
water->NewConfigurationWithElectronOccupancy(
"Excitation3rdLayer", *occ);
water->AddDecayChannel("Excitation3rdLayer", decCh1);
water->AddDecayChannel("Excitation3rdLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 2nd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_Relaxation_Channel");
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3));
decCh2->SetProbability(0.5);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
occ->AddElectron(5, 1);
water->NewConfigurationWithElectronOccupancy(
"Excitation2ndLayer", *occ);
water->AddDecayChannel("Excitation2ndLayer", decCh1);
water->AddDecayChannel("Excitation2ndLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 1st layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation1stLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation1stLayer_Relaxation_Channel");
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
occ->AddElectron(5, 1);
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4));
decCh2->SetProbability(0.5);
water->NewConfigurationWithElectronOccupancy(
"Excitation1stLayer", *occ);
water->AddDecayChannel("Excitation1stLayer", decCh1);
water->AddDecayChannel("Excitation1stLayer", decCh2);
/////////////////////////////////////////////////////////
// IONISATION //
/////////////////////////////////////////////////////////
//--------------------------------------------------------
//------------------- Ionisation -------------------------
decCh1 = new G4MolecularDissociationChannel("Ionisation_Channel");
//Decay Channel 1 : : OH + H_3Op
decCh1->AddProduct(H3O);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(4, 1);
// this is a ionized h2O with a hole in its last orbital
water->NewConfigurationWithElectronOccupancy("Ionisation5", *occ);
water->AddDecayChannel("Ionisation5", decCh1);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation4", *occ);
water->AddDecayChannel("Ionisation4",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation3", *occ);
water->AddDecayChannel("Ionisation3",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation2", *occ);
water->AddDecayChannel("Ionisation2",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation1", *occ);
water->AddDecayChannel("Ionisation1",
new G4MolecularDissociationChannel(*decCh1));
//////////////////////////////////////////////////////////
// Dissociative Attachment //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel(
"DissociativeAttachment");
//Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OHm);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::DissociativeAttachment);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->AddElectron(5, 1); // H_2O^-
water->NewConfigurationWithElectronOccupancy(
"DissociativeAttachment", *occ);
water->AddDecayChannel(
"DissociativeAttachment", decCh1);
//////////////////////////////////////////////////////////
// Electron-hole recombination //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay1");
decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay2");
decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay3");
//Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OH);
decCh1->AddProduct(OH);
decCh1->SetProbability(0.15);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::
B1A1_DissociationDecay);
//Decay 2 : OH + H
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.55);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::
A1B1_DissociationDecay);
//Decay 3 : relaxation
decCh3->SetProbability(0.30);
const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib");
assert(pH2Ovib != nullptr);
water->AddDecayChannel(pH2Ovib, decCh1);
water->AddDecayChannel(pH2Ovib, decCh2);
water->AddDecayChannel(pH2Ovib, decCh3);
delete occ;
G4ChemDissociationChannels::ConstructDissociationChannels();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -33,81 +33,42 @@
*/
#include "G4EmDNAChemistry_option3.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4DNAWaterDissociationDisplacer.hh"
#include "G4DNAChemistryManager.hh"
#include "G4DNAWaterExcitationStructure.hh"
#include "G4ProcessManager.hh"
#include "G4DNAGenericIonsManager.hh"
// *** Processes and models for Geant4-DNA
#include "G4DNAElectronSolvation.hh"
#include "G4DNAAttachment.hh"
#include "G4DNAVibExcitation.hh"
#include "G4DNASancheExcitationModel.hh"
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAScreenedRutherfordElasticModel.hh"
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
#include "G4DNAMolecularDissociation.hh"
#include "G4DNABrownianTransportation.hh"
#include "G4DNAMolecularReactionTable.hh"
#include "G4DNAMolecularStepByStepModel.hh"
#include "G4DNAMolecularIRTModel.hh"
#include "G4DNAIndependentReactionTimeModel.hh"
#include "G4VDNAReactionModel.hh"
#include "G4DNASmoluchowskiReactionModel.hh"
#include "G4DNAIRT.hh"
#include "G4DNAElectronHoleRecombination.hh"
// particles
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
#include "G4MoleculeTable.hh"
#include "G4H2O.hh"
#include "G4H2.hh"
#include "G4Hydrogen.hh"
#include "G4OH.hh"
#include "G4H3O.hh"
#include "G4Electron_aq.hh"
#include "G4Oxygen.hh"
#include "G4H2O2.hh"
#include "G4O2.hh"
#include "G4HO2.hh"
#include "G4O3.hh"
#include "G4FakeMolecule.hh"
#include "G4PhysicsListHelper.hh"
#include "G4BuilderType.hh"
/****/
#include "G4DNAMoleculeEncounterStepper.hh"
#include "G4ProcessVector.hh"
#include "G4ProcessTable.hh"
#include "G4DNASecondOrderReaction.hh"
#include "G4MolecularConfiguration.hh"
/****/
#include "G4Scheduler.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
#include "G4ChemDissociationChannels_option1.hh"
G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry_option3);
@@ -121,453 +82,16 @@ G4EmDNAChemistry_option3::G4EmDNAChemistry_option3() :
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAChemistry_option3::~G4EmDNAChemistry_option3()
{
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAChemistry_option3::ConstructMolecule()
{
//-----------------------------------
// G4Electron::Definition(); // safety
//-----------------------------------
// Create the definition
G4H2O::Definition();
G4Hydrogen::Definition();
G4H3O::Definition();
G4OH::Definition();
G4Electron_aq::Definition();
G4H2O2::Definition();
G4H2::Definition();
G4O2::Definition();
G4HO2::Definition();
G4Oxygen::Definition();
G4O3::Definition();
//____________________________________________________________________________
G4MoleculeTable::Instance()->CreateConfiguration("H3Op", G4H3O::Definition());
G4MoleculeTable::Instance()->GetConfiguration("H3Op")->SetDiffusionCoefficient(
9.46e-9 * (m2/s));
G4MoleculeTable::Instance()->GetConfiguration("H3Op")->SetVanDerVaalsRadius(0.25*nm);
G4MoleculeTable::Instance()->CreateConfiguration("OH", G4OH::Definition());
G4MoleculeTable::Instance()->GetConfiguration("OH")->SetDiffusionCoefficient(
2.2e-9 * (m2/s));
G4MoleculeTable::Instance()->GetConfiguration("OH")->SetVanDerVaalsRadius(0.22*nm);
G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()->
CreateConfiguration("OHm", // just a tag to store and retrieve from
// G4MoleculeTable
G4OH::Definition(),
-1, // charge
5.3e-9 * (m2 / s));
OHm->SetMass(17.0079 * g / Avogadro * c_squared);
OHm->SetVanDerVaalsRadius(0.33*nm);
G4MoleculeTable::Instance()->CreateConfiguration("e_aq",
G4Electron_aq::Definition());
G4MoleculeTable::Instance()->GetConfiguration("e_aq")->SetVanDerVaalsRadius(0.50*nm);
G4MoleculeTable::Instance()->CreateConfiguration("H",
G4Hydrogen::Definition());
G4MoleculeTable::Instance()->GetConfiguration("H")->SetVanDerVaalsRadius(0.19*nm);
G4MoleculeTable::Instance()->CreateConfiguration("H2", G4H2::Definition());
G4MoleculeTable::Instance()->GetConfiguration("H2")->SetDiffusionCoefficient(
4.8e-9 * (m2/s));
G4MoleculeTable::Instance()->GetConfiguration("H2")->SetVanDerVaalsRadius(0.14*nm);
G4MoleculeTable::Instance()->CreateConfiguration("H2O2", G4H2O2::Definition());
G4MoleculeTable::Instance()->GetConfiguration("H2O2")->SetDiffusionCoefficient(
2.3e-9 * (m2/s));
G4MoleculeTable::Instance()->GetConfiguration("H2O2")->SetVanDerVaalsRadius(0.21*nm);
// molecules extension (RITRACKS)
G4MoleculeTable::Instance()->CreateConfiguration("HO2",G4HO2::Definition());
G4MoleculeTable::Instance()->GetConfiguration("HO2")->SetVanDerVaalsRadius(0.21*nm);
G4MolecularConfiguration* HO2m = G4MoleculeTable::Instance()->
CreateConfiguration("HO2m", // just a tag to store and retrieve from
// G4MoleculeTable
G4HO2::Definition(),
-1, // charge
1.4e-9 * (m2 / s));
HO2m->SetMass(33.00396 * g / Avogadro * c_squared);
HO2m->SetVanDerVaalsRadius(0.25*nm);
G4MoleculeTable::Instance()->CreateConfiguration("Oxy",G4Oxygen::Definition());
G4MoleculeTable::Instance()->GetConfiguration("Oxy")->SetVanDerVaalsRadius(0.20*nm);
G4MolecularConfiguration* Om = G4MoleculeTable::Instance()->
CreateConfiguration("Om", // just a tag to store and retrieve from
// G4MoleculeTable
G4Oxygen::Definition(),
-1, // charge
2.0e-9 * (m2 / s));
Om->SetMass(15.99829 * g / Avogadro * c_squared);
Om->SetVanDerVaalsRadius(0.25*nm);
G4MoleculeTable::Instance()->CreateConfiguration("O2",G4O2::Definition());
G4MoleculeTable::Instance()->GetConfiguration("O2")->SetVanDerVaalsRadius(0.17*nm);
G4MolecularConfiguration* O2m = G4MoleculeTable::Instance()->
CreateConfiguration("O2m", // just a tag to store and retrieve from
// G4MoleculeTable
G4O2::Definition(),
-1, // charge
1.75e-9 * (m2 / s));
O2m->SetMass(31.99602 * g / Avogadro * c_squared);
O2m->SetVanDerVaalsRadius(0.22*nm);
G4MoleculeTable::Instance()->CreateConfiguration("O3",G4O3::Definition());
G4MoleculeTable::Instance()->GetConfiguration("O3")->SetVanDerVaalsRadius(0.20*nm);
G4MolecularConfiguration* O3m = G4MoleculeTable::Instance()->
CreateConfiguration("O3m", // just a tag to store and retrieve from
// G4MoleculeTable
G4O3::Definition(),
-1, // charge
2.0e-9 * (m2 / s));
O3m->SetMass(47.99375 * g / Avogadro * c_squared);
O3m->SetVanDerVaalsRadius(0.20*nm);
G4MoleculeTable::Instance()->
CreateConfiguration("H2O(B)", // just a tag to store and retrieve from
// G4MoleculeTable
G4H2O::Definition(),
0, // charge
0 * (m2 / s));
G4MoleculeTable::Instance()->
CreateConfiguration("H3Op(B)", // just a tag to store and retrieve from
// G4MoleculeTable
G4H3O::Definition(),
1, // charge
0 * (m2 / s));
G4MoleculeTable::Instance()->
CreateConfiguration("OHm(B)", // just a tag to store and retrieve from
// G4MoleculeTable
G4OH::Definition(),
-1, // charge
0 * (m2 / s));
G4MoleculeTable::Instance()->CreateConfiguration("NoneM",G4FakeMolecule::Definition());
G4ChemDissociationChannels_option1::ConstructMolecule();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAChemistry_option3::ConstructDissociationChannels()
{
//-----------------------------------
//Get the molecular configuration
G4MolecularConfiguration* OH =
G4MoleculeTable::Instance()->GetConfiguration("OH");
G4MolecularConfiguration* OHm =
G4MoleculeTable::Instance()->GetConfiguration("OHm");
G4MolecularConfiguration* e_aq =
G4MoleculeTable::Instance()->GetConfiguration("e_aq");
G4MolecularConfiguration* H2 =
G4MoleculeTable::Instance()->GetConfiguration("H2");
G4MolecularConfiguration* H3O =
G4MoleculeTable::Instance()->GetConfiguration("H3Op");
G4MolecularConfiguration* H =
G4MoleculeTable::Instance()->GetConfiguration("H");
G4MolecularConfiguration* O =
G4MoleculeTable::Instance()->GetConfiguration("Oxy");
//-------------------------------------
//Define the decay channels
G4MoleculeDefinition* water = G4H2O::Definition();
G4MolecularDissociationChannel* decCh1;
G4MolecularDissociationChannel* decCh2;
G4MolecularDissociationChannel* decCh3;
G4MolecularDissociationChannel* decCh4;
G4MolecularDissociationChannel* decCh5;
G4ElectronOccupancy* occ = new G4ElectronOccupancy(
*(water->GetGroundStateElectronOccupancy()));
//////////////////////////////////////////////////////////
// EXCITATIONS //
//////////////////////////////////////////////////////////
G4DNAWaterExcitationStructure waterExcitation;
//--------------------------------------------------------
//---------------Excitation on the fifth layer------------
decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relaxation");
decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay");
//Decay 1 : OH + H
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0));
decCh1->SetProbability(0.35);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement);
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.65);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
occ->RemoveElectron(4, 1); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1
water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ);
water->AddDecayChannel("A^1B_1", decCh1);
water->AddDecayChannel("A^1B_1", decCh2);
//--------------------------------------------------------
//---------------Excitation on the fourth layer-----------
decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relaxation_Channel");
decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay");
decCh3 = new G4MolecularDissociationChannel("B^1A_1_AutoIonisation_Channel");
decCh4 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay");
decCh5 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay2");
//Decay 1 : energy
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1));
decCh1->SetProbability(0.175);
//Decay 2 : 2OH + H_2
decCh2->AddProduct(H2);
decCh2->AddProduct(OH);
decCh2->AddProduct(OH);
decCh2->SetProbability(0.0325);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
//Decay 3 : OH + H_3Op + e_aq
decCh3->AddProduct(OH);
decCh3->AddProduct(H3O);
decCh3->AddProduct(e_aq);
decCh3->SetProbability(0.50);
decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay 4 : H + OH
decCh4->AddProduct(H);
decCh4->AddProduct(OH);
decCh4->SetProbability(0.2535);
decCh4->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
//Decay 5 : 2H + O
decCh5->AddProduct(O);
decCh5->AddProduct(H);
decCh5->AddProduct(H);
decCh5->SetProbability(0.039);
decCh5->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay2);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1
water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ);
water->AddDecayChannel("B^1A_1", decCh1);
water->AddDecayChannel("B^1A_1", decCh2);
water->AddDecayChannel("B^1A_1", decCh3);
water->AddDecayChannel("B^1A_1", decCh4);
water->AddDecayChannel("B^1A_1", decCh5);
//-------------------------------------------------------
//-------------------Excitation of 3rd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_Relaxation_Channel");
//Decay channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2));
decCh2->SetProbability(0.5);
//Electronic configuration of this decay
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
occ->AddElectron(5, 1);
//Configure the water molecule
water->NewConfigurationWithElectronOccupancy("Excitation3rdLayer", *occ);
water->AddDecayChannel("Excitation3rdLayer", decCh1);
water->AddDecayChannel("Excitation3rdLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 2nd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_Relaxation_Channel");
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3));
decCh2->SetProbability(0.5);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
occ->AddElectron(5, 1);
water->NewConfigurationWithElectronOccupancy("Excitation2ndLayer", *occ);
water->AddDecayChannel("Excitation2ndLayer", decCh1);
water->AddDecayChannel("Excitation2ndLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 1st layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation1stLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation1stLayer_Relaxation_Channel");
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
occ->AddElectron(5, 1);
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4));
decCh2->SetProbability(0.5);
water->NewConfigurationWithElectronOccupancy("Excitation1stLayer", *occ);
water->AddDecayChannel("Excitation1stLayer", decCh1);
water->AddDecayChannel("Excitation1stLayer", decCh2);
/////////////////////////////////////////////////////////
// IONISATION //
/////////////////////////////////////////////////////////
//--------------------------------------------------------
//------------------- Ionisation -------------------------
decCh1 = new G4MolecularDissociationChannel("Ionisation_Channel");
//Decay Channel 1 : : OH + H_3Op
decCh1->AddProduct(H3O);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(4, 1);
// this is a ionized h2O with a hole in its last orbital
water->NewConfigurationWithElectronOccupancy("Ionisation5", *occ);
water->AddDecayChannel("Ionisation5",
decCh1);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation4", *occ);
water->AddDecayChannel("Ionisation4",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation3", *occ);
water->AddDecayChannel("Ionisation3",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation2", *occ);
water->AddDecayChannel("Ionisation2",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation1", *occ);
water->AddDecayChannel("Ionisation1",
new G4MolecularDissociationChannel(*decCh1));
//////////////////////////////////////////////////////////
// Dissociative Attachment //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("DissociativeAttachment_ch1");
//Decay 1 : OHm + H
decCh1->AddProduct(H2);
decCh1->AddProduct(OHm);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::
DissociativeAttachment);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->AddElectron(5,1); // H_2O^-
water->NewConfigurationWithElectronOccupancy("DissociativeAttachment_ch1", *occ);
water->AddDecayChannel("DissociativeAttachment_ch1", decCh1);
//////////////////////////////////////////////////////////
// Electron-hole recombination //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay1");
decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay2");
decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay3");
decCh4 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay4");
//Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OH);
decCh1->AddProduct(OH);
decCh1->SetProbability(0.1365);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::
B1A1_DissociationDecay);
//Decay 2 : OH + H
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.3575);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::
A1B1_DissociationDecay);
//Decay 3 : 2H + O(3p)
decCh3->AddProduct(O);
decCh3->AddProduct(H);
decCh3->AddProduct(H);
decCh3->SetProbability(0.156);
decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::
B1A1_DissociationDecay2);
//Decay 4 : relaxation
decCh4->SetProbability(0.35);
const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib");
assert(pH2Ovib != nullptr);
water->AddDecayChannel(pH2Ovib, decCh1);
water->AddDecayChannel(pH2Ovib, decCh2);
water->AddDecayChannel(pH2Ovib, decCh3);
water->AddDecayChannel(pH2Ovib, decCh4);
delete occ;
G4ChemDissociationChannels_option1::ConstructDissociationChannels();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -67,6 +67,7 @@
#include "G4EmProcessSubType.hh"
#include "G4PhysicsListHelper.hh"
#include "G4EmParticleList.hh"
#include "G4EmUtility.hh"
#include "G4MicroElecElastic.hh"
#include "G4MicroElecElasticModel.hh"
@@ -88,6 +89,7 @@
#include "G4ionIonisation.hh"
#include "G4KleinNishinaModel.hh"
#include "G4GammaGeneralProcess.hh"
#include "G4CoulombScattering.hh"
#include "G4eCoulombScatteringModel.hh"
#include "G4WentzelVIModel.hh"
@@ -149,7 +151,7 @@ void G4EmModelActivator::ActivateEmOptions()
const std::vector<G4String>& regnamesPhys = theParameters->RegionsPhysics();
std::size_t nreg = regnamesPhys.size();
if(0 == nreg) { return; }
G4int verbose = theParameters->Verbose() - 1;
G4int verbose = theParameters->Verbose() - 1;
if(verbose > 0) {
G4cout << "### G4EmModelActivator::ActivateEmOptions for " << nreg << " regions"
<< G4endl;
@@ -165,7 +167,8 @@ void G4EmModelActivator::ActivateEmOptions()
G4EmConfigurator* em_config = man->EmConfigurator();
G4VAtomDeexcitation* adeexc = man->AtomDeexcitation();
G4ParticleTable* table = G4ParticleTable::GetParticleTable();
G4VEmModel* mod;
G4VEmModel* mod = nullptr;
G4VEmProcess* proc = nullptr;
// high energy limit for low-energy e+- model of msc
G4double mscEnergyLimit = theParameters->MscEnergyLimit();
@@ -177,12 +180,13 @@ void G4EmModelActivator::ActivateEmOptions()
G4double highEnergy = theParameters->MaxKinEnergy();
for(std::size_t i=0; i<nreg; ++i) {
G4String reg = regnamesPhys[i];
const G4String reg = regnamesPhys[i];
auto region = G4EmUtility::FindRegion(reg);
if(verbose > 0) {
G4cout << i << ". region <" << reg << ">; type <" << typesPhys[i] << "> "
<< G4endl;
G4cout << i << ". region <" << reg << ">; physics type <"
<< typesPhys[i] << "> region ptr: " << region << G4endl;
}
if(baseName == typesPhys[i]) { continue; }
if("G4EmStandard" == typesPhys[i]) {
@@ -205,35 +209,30 @@ void G4EmModelActivator::ActivateEmOptions()
G4UrbanMscModel* msc = new G4UrbanMscModel();
SetMscParameters(elec, msc, typesPhys[i]);
em_config->SetExtraEmModel("e-", "msc", msc, reg);
FindOrAddProcess(elec, "CoulombScat");
em_config->SetExtraEmModel("e-", "CoulombScat", dummy, reg);
proc = FindOrAddProcess(elec, "CoulombScat");
proc->AddEmModel(-1, dummy, region);
msc = new G4UrbanMscModel();
SetMscParameters(posi, msc, typesPhys[i]);
em_config->SetExtraEmModel("e+", "msc", msc, reg);
FindOrAddProcess(posi, "CoulombScat");
em_config->SetExtraEmModel("e+", "CoulombScat", dummy, reg);
proc = FindOrAddProcess(posi, "CoulombScat");
proc->AddEmModel(-1, dummy, region);
msc = new G4UrbanMscModel();
SetMscParameters(prot, msc, typesPhys[i]);
em_config->SetExtraEmModel("proton", "msc", msc, reg);
FindOrAddProcess(prot, "CoulombScat");
em_config->SetExtraEmModel("proton", "CoulombScat", dummy, reg);
proc = FindOrAddProcess(prot, "CoulombScat");
proc->AddEmModel(-1, dummy, region);
theParameters->SetNumberOfBinsPerDecade(20);
if(G4Threading::IsMasterThread()) {
theParameters->SetDeexActiveRegion(reg, true, false, false);
}
theParameters->DefineRegParamForDeex(adeexc);
FindOrAddProcess(phot, "Rayl");
mod = new G4LivermoreRayleighModel();
em_config->SetExtraEmModel("gamma", "Rayl", mod, reg);
FindOrAddProcess(phot, "phot");
mod = new G4LivermorePhotoElectricModel();
em_config->SetExtraEmModel("gamma", "phot", mod, reg);
FindOrAddProcess(phot, "compt");
mod = new G4KleinNishinaModel();
em_config->SetExtraEmModel("gamma", "compt", mod, reg);
proc = FindOrAddProcess(phot, "Rayl");
proc->AddEmModel(-1, new G4LivermoreRayleighModel(), region);
proc = FindOrAddProcess(phot, "compt");
proc->AddEmModel(-1, new G4KleinNishinaModel(), region);
} else if("G4EmStandard_opt4" == typesPhys[i]) {
G4VMscModel* msc = new G4GoudsmitSaundersonMscModel();
@@ -249,20 +248,15 @@ void G4EmModelActivator::ActivateEmOptions()
}
theParameters->DefineRegParamForDeex(adeexc);
FindOrAddProcess(phot, "Rayl");
mod = new G4LivermoreRayleighModel();
em_config->SetExtraEmModel("gamma", "Rayl", mod, reg);
FindOrAddProcess(phot, "phot");
mod = new G4LivermorePhotoElectricModel();
FindOrAddProcess(phot, "compt");
mod = new G4KleinNishinaModel();
em_config->SetExtraEmModel("gamma", "compt", mod, reg);
proc = FindOrAddProcess(phot, "Rayl");
proc->AddEmModel(-1, new G4LivermoreRayleighModel(), region);
proc = FindOrAddProcess(phot, "compt");
proc->AddEmModel(-1, new G4KleinNishinaModel(), region);
mod = new G4LowEPComptonModel();
mod->SetHighEnergyLimit(20*MeV);
em_config->SetExtraEmModel("gamma", "compt", mod, reg);
FindOrAddProcess(phot, "conv");
mod = new G4BetheHeitler5DModel();
em_config->SetExtraEmModel("gamma", "conv", mod, reg);
proc->AddEmModel(-2, mod, region);
proc = FindOrAddProcess(phot, "conv");
proc->AddEmModel(-1, new G4BetheHeitler5DModel(), region);
} else if("G4EmStandardGS" == typesPhys[i]) {
G4GoudsmitSaundersonMscModel* msc = new G4GoudsmitSaundersonMscModel();
@@ -285,17 +279,31 @@ void G4EmModelActivator::ActivateEmOptions()
}
theParameters->DefineRegParamForDeex(adeexc);
} else if("G4EmStandardSS" == typesPhys[i] &&
baseName != "G4EmStandard_opt3") {
} else if("G4EmStandardSS" == typesPhys[i]) {
G4EmParticleList emList;
for(const auto& particleName : emList.PartNames()) {
for(const auto& particleName : emList.EmChargedPartNames()) {
G4ParticleDefinition* particle = table->FindParticle(particleName);
if(particle && 0.0 != particle->GetPDGCharge()) {
FindOrAddProcess(particle, "CoulombScat");
G4eCoulombScatteringModel* sc = new G4eCoulombScatteringModel();
sc->SetPolarAngleLimit(0.0);
sc->SetLocked(true);
em_config->SetExtraEmModel(particleName, "CoulombScat", sc, reg);
if(nullptr != particle && 0.0 != particle->GetPDGCharge()) {
proc = FindOrAddProcess(particle, "CoulombScat");
if(nullptr != proc) {
proc->AddEmModel(-1, new G4DummyModel(), region);
}
auto pm = particle->GetProcessManager();
proc = new G4CoulombScattering("SingleCoulombScat", false);
pm->AddDiscreteProcess(proc);
proc->SetEmModel(new G4DummyModel());
G4VEmModel* scmod = nullptr;
if(particle->GetPDGMass() > CLHEP::GeV ||
particle->GetParticleType() == "nucleus") {
scmod = new G4IonCoulombScatteringModel();
} else {
scmod = new G4eCoulombScatteringModel(false);
}
scmod->SetPolarAngleLimit(0.0);
scmod->SetLocked(true);
proc->AddEmModel(-1, scmod, region);
// multiple scattering should be disabled
if(particleName == "mu+" || particleName == "mu-") {
em_config->SetExtraEmModel(particleName, "muMsc",
new G4DummyModel(), reg);
@@ -753,24 +761,31 @@ void G4EmModelActivator::SetMscParameters(const G4ParticleDefinition* part,
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmModelActivator::FindOrAddProcess(const G4ParticleDefinition* part,
const G4String& name)
G4VEmProcess*
G4EmModelActivator::FindOrAddProcess(const G4ParticleDefinition* part,
const G4String& name)
{
G4ProcessManager* pm = part->GetProcessManager();
G4ProcessVector* pv = pm->GetProcessList();
G4int nproc = pm->GetProcessListLength();
for(G4int i = 0; i<nproc; ++i) {
if(((*pv)[i])->GetProcessName() == name) { return; }
G4VEmProcess* proc = nullptr;
auto pm = part->GetProcessManager();
auto emproc = pm->GetProcessList();
G4int n = (G4int)emproc->size();
for(auto i=0; i<n; ++i) {
auto ptr = (*emproc)[i];
if(part->GetPDGEncoding() == 22 &&
ptr->GetProcessSubType() == fGammaGeneralProcess) {
proc = (static_cast<G4GammaGeneralProcess*>(ptr))->GetEmProcess(name);
} else if(ptr->GetProcessName() == name) {
proc = dynamic_cast<G4VEmProcess*>(ptr);
}
if(nullptr != proc) { return proc; }
}
if(name == "CoulombScat") {
G4CoulombScattering* cs = new G4CoulombScattering();
cs->SetEmModel(new G4DummyModel());
pm->AddDiscreteProcess(cs);
} else if(name == "Rayl") {
if(name == "Rayl") {
G4RayleighScattering* rs = new G4RayleighScattering();
rs->SetEmModel(new G4DummyModel());
pm->AddDiscreteProcess(rs);
return rs;
}
return proc;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -53,13 +53,22 @@ G4EmParticleList::G4EmParticleList()
"Bc-", "omega_b-","anti_omega_b-", "sigma_b+", "sigma_b-",
"anti_sigma_b+", "anti_sigma_b-", "xi_b-", "anti_xi_b-"
};
}
G4EmParticleList::~G4EmParticleList()
{}
cNames =
{
"e-", "e+", "mu+", "mu-", "pi+",
"pi-", "kaon+", "kaon-", "proton", "anti_proton",
"alpha", "He3", "GenericIon", "deuteron", "triton"
};
}
const std::vector<G4String>& G4EmParticleList::PartNames() const
{
return pNames;
}
const std::vector<G4String>& G4EmParticleList::EmChargedPartNames() const
{
return cNames;
}
@@ -182,11 +182,11 @@ void G4EmStandardPhysicsSS::ConstructProcess()
// e-
particle = G4Electron::Electron();
G4CoulombScattering* ss = new G4CoulombScattering();
G4CoulombScattering* ss = new G4CoulombScattering(false);
if(param->UseMottCorrection()) {
ss->SetEmModel(new G4eDPWACoulombScatteringModel());
} else {
ss->SetEmModel(new G4eCoulombScatteringModel());
ss->SetEmModel(new G4eCoulombScatteringModel(false));
}
ph->RegisterProcess(new G4eIonisation(), particle);
ph->RegisterProcess(new G4eBremsstrahlung(), particle);
@@ -198,11 +198,11 @@ void G4EmStandardPhysicsSS::ConstructProcess()
// e+
particle = G4Positron::Positron();
ss = new G4CoulombScattering();
ss = new G4CoulombScattering(false);
if(param->UseMottCorrection()) {
ss->SetEmModel(new G4eDPWACoulombScatteringModel());
} else {
ss->SetEmModel(new G4eCoulombScatteringModel());
ss->SetEmModel(new G4eCoulombScatteringModel(false));
}
ph->RegisterProcess(new G4eIonisation(), particle);
ph->RegisterProcess(new G4eBremsstrahlung(), particle);
@@ -217,7 +217,8 @@ void G4EmStandardPhysicsSS::ConstructProcess()
ionIoni->SetFluctModel(fluc);
ionIoni->SetEmModel(new G4LindhardSorensenIonModel());
ph->RegisterProcess(ionIoni, particle);
ph->RegisterProcess(new G4CoulombScattering(), particle);
ss = new G4CoulombScattering(false);
ph->RegisterProcess(ss, particle);
// muons, hadrons, ions
G4EmBuilder::ConstructChargedSS(hmsc);