Import Geant4 10.3.0.beta source tree
This commit is contained in:
@@ -37,7 +37,7 @@
|
||||
|
||||
// *** Processes and models for Geant4-DNA
|
||||
|
||||
#include "G4DNAElectronSolvatation.hh"
|
||||
#include "G4DNAElectronSolvation.hh"
|
||||
|
||||
#include "G4DNAAttachment.hh"
|
||||
#include "G4DNAVibExcitation.hh"
|
||||
@@ -90,7 +90,7 @@ G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry);
|
||||
#include "G4Threading.hh"
|
||||
|
||||
G4EmDNAChemistry::G4EmDNAChemistry() :
|
||||
G4VUserChemistryList()
|
||||
G4VUserChemistryList(true)
|
||||
{
|
||||
G4DNAChemistryManager::Instance()->SetChemistryList(this);
|
||||
}
|
||||
@@ -118,20 +118,6 @@ void G4EmDNAChemistry::ConstructMolecule()
|
||||
G4H2O2::Definition();
|
||||
G4H2::Definition();
|
||||
|
||||
// G4MoleculeTable::Instance()->CreateMoleculeModel("H3Op", G4H3O::Definition());
|
||||
// G4Molecule* OHm = G4MoleculeTable::Instance()->
|
||||
// CreateMoleculeModel("OHm", // just a tag to store and retrieve from
|
||||
// // G4MoleculeTable
|
||||
// G4OH::Definition(), -1, 5.0e-9 * (m2 / s));
|
||||
// OHm->SetMass(17.0079 * g / Avogadro * c_squared);
|
||||
// G4MoleculeTable::Instance()->CreateMoleculeModel("OH", G4OH::Definition());
|
||||
// G4MoleculeTable::Instance()->CreateMoleculeModel("e_aq",
|
||||
// G4Electron_aq::Definition());
|
||||
// G4MoleculeTable::Instance()->CreateMoleculeModel("H",
|
||||
// G4Hydrogen::Definition());
|
||||
// G4MoleculeTable::Instance()->CreateMoleculeModel("H2", G4H2::Definition());
|
||||
// G4MoleculeTable::Instance()->CreateMoleculeModel("H2O2", G4H2O2::Definition());
|
||||
|
||||
//____________________________________________________________________________
|
||||
|
||||
G4MoleculeTable::Instance()->CreateConfiguration("H3Op", G4H3O::Definition());
|
||||
@@ -155,14 +141,6 @@ void G4EmDNAChemistry::ConstructMolecule()
|
||||
|
||||
void G4EmDNAChemistry::ConstructDissociationChannels()
|
||||
{
|
||||
// //-----------------------------------
|
||||
// //Create the dynamic objects
|
||||
// G4Molecule* OH = G4MoleculeTable::Instance()->GetMoleculeModel("OH");
|
||||
// G4Molecule* OHm = G4MoleculeTable::Instance()->GetMoleculeModel("OHm");
|
||||
// G4Molecule* e_aq = G4MoleculeTable::Instance()->GetMoleculeModel("e_aq");
|
||||
// G4Molecule* H2 = G4MoleculeTable::Instance()->GetMoleculeModel("H2");
|
||||
// G4Molecule* H3O = G4MoleculeTable::Instance()->GetMoleculeModel("H3Op");
|
||||
// G4Molecule* H = G4MoleculeTable::Instance()->GetMoleculeModel("H");
|
||||
//-----------------------------------
|
||||
//Get the molecular configuration
|
||||
G4MolecularConfiguration* OH =
|
||||
@@ -404,35 +382,27 @@ void G4EmDNAChemistry::ConstructDissociationChannels()
|
||||
void G4EmDNAChemistry::ConstructReactionTable(G4DNAMolecularReactionTable*
|
||||
theReactionTable)
|
||||
{
|
||||
// //-----------------------------------
|
||||
// G4Molecule* OH = G4MoleculeTable::Instance()->GetMoleculeModel("OH");
|
||||
// G4Molecule* e_aq = G4MoleculeTable::Instance()->GetMoleculeModel("e_aq");
|
||||
// G4Molecule* H2 = G4MoleculeTable::Instance()->GetMoleculeModel("H2");
|
||||
// G4Molecule* H3Op = G4MoleculeTable::Instance()->GetMoleculeModel("H3Op");
|
||||
// G4Molecule* OHm = G4MoleculeTable::Instance()->GetMoleculeModel("OHm");
|
||||
// G4Molecule* H2O2 = G4MoleculeTable::Instance()->GetMoleculeModel("H2O2");
|
||||
// G4Molecule* H = G4MoleculeTable::Instance()->GetMoleculeModel("H");
|
||||
//-----------------------------------
|
||||
//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* H3Op =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("H3Op");
|
||||
G4MolecularConfiguration* H =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("H");
|
||||
G4MolecularConfiguration* H2O2 =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("H2O2");
|
||||
//-----------------------------------
|
||||
//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* H3Op =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("H3Op");
|
||||
G4MolecularConfiguration* H =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("H");
|
||||
G4MolecularConfiguration* H2O2 =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("H2O2");
|
||||
|
||||
//------------------------------------------------------------------
|
||||
// e_aq + e_aq + 2H2O -> H2 + 2OH-
|
||||
G4DNAMolecularReactionData* reactionData = new G4DNAMolecularReactionData(
|
||||
0.5e10 * (1e-3 * m3 / (mole * s)), e_aq, e_aq);
|
||||
G4DNAMolecularReactionData* reactionData =
|
||||
new G4DNAMolecularReactionData(0.5e10 * (1e-3 * m3 / (mole * s)), e_aq, e_aq);
|
||||
reactionData->AddProduct(OHm);
|
||||
reactionData->AddProduct(OHm);
|
||||
reactionData->AddProduct(H2);
|
||||
@@ -511,42 +481,19 @@ void G4EmDNAChemistry::ConstructProcess()
|
||||
}
|
||||
}
|
||||
|
||||
//===============================================================
|
||||
// Modify elastic scattering models to avoid killing electrons
|
||||
// at low energy
|
||||
//
|
||||
process =
|
||||
G4ProcessTable::GetProcessTable()->
|
||||
FindProcess("e-_G4DNAElastic", "e-");
|
||||
|
||||
if (process)
|
||||
{
|
||||
G4DNAElastic* vibExcitation = (G4DNAElastic*) process;
|
||||
G4VEmModel* model = vibExcitation->EmModel();
|
||||
|
||||
if(G4DNAChampionElasticModel* championMod =
|
||||
dynamic_cast<G4DNAChampionElasticModel*>(model))
|
||||
{
|
||||
championMod->SetKillBelowThreshold(-1);
|
||||
}
|
||||
else if(G4DNAScreenedRutherfordElasticModel* screenRutherfordMod =
|
||||
dynamic_cast<G4DNAScreenedRutherfordElasticModel*>(model))
|
||||
{
|
||||
screenRutherfordMod->SetKillBelowThreshold(-1);
|
||||
}
|
||||
else if (G4DNAUeharaScreenedRutherfordElasticModel* ueharaScreenRutherfordMod =
|
||||
dynamic_cast<G4DNAUeharaScreenedRutherfordElasticModel*>(model))
|
||||
{
|
||||
ueharaScreenRutherfordMod->SetKillBelowThreshold(-1);
|
||||
}
|
||||
}
|
||||
|
||||
//===============================================================
|
||||
// *** Electron Solvatation ***
|
||||
//
|
||||
ph->RegisterProcess(
|
||||
new G4DNAElectronSolvatation("e-_G4DNAElectronSolvatation"),
|
||||
G4Electron::Definition());
|
||||
process =
|
||||
G4ProcessTable::GetProcessTable()->
|
||||
FindProcess("e-_G4DNAElectronSolvation", "e-");
|
||||
|
||||
if (process == 0)
|
||||
{
|
||||
ph->RegisterProcess(
|
||||
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation"),
|
||||
G4Electron::Definition());
|
||||
}
|
||||
|
||||
//===============================================================
|
||||
// Define processes for molecules
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4EmDNAPhysics.cc 87702 2014-12-17 09:55:28Z gcosmo $
|
||||
// $Id: G4EmDNAPhysics.cc 97523 2016-06-03 14:25:30Z gcosmo $
|
||||
// add elastic scattering processes of proton, hydrogen, helium, alpha+, alpha++
|
||||
|
||||
#include "G4EmDNAPhysics.hh"
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
// *** Processes and models for Geant4-DNA
|
||||
|
||||
#include "G4DNAElectronSolvation.hh"
|
||||
#include "G4DNAElastic.hh"
|
||||
#include "G4DNAChampionElasticModel.hh"
|
||||
#include "G4DNAScreenedRutherfordElasticModel.hh"
|
||||
@@ -87,6 +88,7 @@ G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAPhysics);
|
||||
G4EmDNAPhysics::G4EmDNAPhysics(G4int ver)
|
||||
: G4VPhysicsConstructor("G4EmDNAPhysics"), verbose(ver)
|
||||
{
|
||||
G4EmParameters::Instance();
|
||||
SetPhysicsType(bElectromagnetic);
|
||||
}
|
||||
|
||||
@@ -95,6 +97,7 @@ G4EmDNAPhysics::G4EmDNAPhysics(G4int ver)
|
||||
G4EmDNAPhysics::G4EmDNAPhysics(G4int ver, const G4String&)
|
||||
: G4VPhysicsConstructor("G4EmDNAPhysics"), verbose(ver)
|
||||
{
|
||||
G4EmParameters::Instance();
|
||||
SetPhysicsType(bElectromagnetic);
|
||||
}
|
||||
|
||||
@@ -149,6 +152,14 @@ void G4EmDNAPhysics::ConstructProcess()
|
||||
|
||||
if (particleName == "e-") {
|
||||
|
||||
G4DNAElectronSolvation* solvation =
|
||||
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
|
||||
G4DNAOneStepThermalizationModel* therm =
|
||||
new G4DNAOneStepThermalizationModel();
|
||||
therm->SetHighEnergyLimit(7.4*eV); // limit of the Champion's model
|
||||
solvation->SetEmModel(therm);
|
||||
ph->RegisterProcess(solvation, particle);
|
||||
|
||||
// *** Elastic scattering (two alternative models available) ***
|
||||
|
||||
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
// *** Processes and models for Geant4-DNA
|
||||
|
||||
#include "G4DNAElectronSolvation.hh"
|
||||
#include "G4DNAElastic.hh"
|
||||
#include "G4DNAChampionElasticModel.hh"
|
||||
#include "G4DNAScreenedRutherfordElasticModel.hh"
|
||||
@@ -153,6 +154,9 @@ void G4EmDNAPhysics_option1::ConstructProcess()
|
||||
G4String particleName = particle->GetParticleName();
|
||||
|
||||
if (particleName == "e-") {
|
||||
|
||||
ph->RegisterProcess(new G4DNAElectronSolvation("e-_G4DNAElectronSolvation"),
|
||||
particle);
|
||||
|
||||
// *** Elastic scattering (two alternative models available) ***
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
// *** Processes and models for Geant4-DNA
|
||||
|
||||
#include "G4DNAElectronSolvation.hh"
|
||||
#include "G4DNAElastic.hh"
|
||||
#include "G4DNAChampionElasticModel.hh"
|
||||
#include "G4DNAScreenedRutherfordElasticModel.hh"
|
||||
@@ -149,6 +150,14 @@ void G4EmDNAPhysics_option2::ConstructProcess()
|
||||
|
||||
if (particleName == "e-") {
|
||||
|
||||
G4DNAElectronSolvation* solvation =
|
||||
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
|
||||
G4DNAOneStepThermalizationModel* therm =
|
||||
new G4DNAOneStepThermalizationModel();
|
||||
therm->SetHighEnergyLimit(7.4*eV); // limit of the Champion's model
|
||||
solvation->SetEmModel(therm);
|
||||
ph->RegisterProcess(solvation, particle);
|
||||
|
||||
// *** Elastic scattering (two alternative models available) ***
|
||||
|
||||
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
// *** Processes and models for Geant4-DNA
|
||||
|
||||
#include "G4DNAElectronSolvation.hh"
|
||||
#include "G4DNAElastic.hh"
|
||||
#include "G4DNAChampionElasticModel.hh"
|
||||
#include "G4DNAScreenedRutherfordElasticModel.hh"
|
||||
@@ -147,7 +148,15 @@ void G4EmDNAPhysics_option3::ConstructProcess()
|
||||
G4String particleName = particle->GetParticleName();
|
||||
|
||||
if (particleName == "e-") {
|
||||
|
||||
|
||||
G4DNAElectronSolvation* solvation =
|
||||
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
|
||||
G4DNAOneStepThermalizationModel* therm =
|
||||
new G4DNAOneStepThermalizationModel();
|
||||
therm->SetHighEnergyLimit(7.4*eV); // limit of the Champion's model
|
||||
solvation->SetEmModel(therm);
|
||||
ph->RegisterProcess(solvation, particle);
|
||||
|
||||
// *** Elastic scattering (two alternative models available) ***
|
||||
|
||||
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
// *** Processes and models for Geant4-DNA
|
||||
|
||||
#include "G4DNAElectronSolvation.hh"
|
||||
#include "G4DNAElastic.hh"
|
||||
#include "G4DNAChampionElasticModel.hh"
|
||||
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
|
||||
@@ -153,7 +154,17 @@ void G4EmDNAPhysics_option4::ConstructProcess()
|
||||
G4String particleName = particle->GetParticleName();
|
||||
|
||||
if (particleName == "e-") {
|
||||
|
||||
|
||||
// *** Solvation ***
|
||||
|
||||
G4DNAElectronSolvation* solvation =
|
||||
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
|
||||
G4DNAOneStepThermalizationModel* therm =
|
||||
new G4DNAOneStepThermalizationModel();
|
||||
therm->SetHighEnergyLimit(10.*eV); // limit of the Uehara's model
|
||||
solvation->SetEmModel(therm);
|
||||
ph->RegisterProcess(solvation, particle);
|
||||
|
||||
// *** Elastic scattering (two alternative models available) ***
|
||||
|
||||
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
// *** Processes and models for Geant4-DNA
|
||||
|
||||
#include "G4DNAElectronSolvation.hh"
|
||||
#include "G4DNAElastic.hh"
|
||||
#include "G4DNAChampionElasticModel.hh"
|
||||
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
|
||||
@@ -155,67 +156,33 @@ void G4EmDNAPhysics_option5::ConstructProcess()
|
||||
|
||||
if (particleName == "e-")
|
||||
{
|
||||
|
||||
// *** Elastic scattering (two alternative models available) ***
|
||||
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
|
||||
|
||||
//theDNAElasticProcess->SetEmModel(new G4DNAChampionElasticModel());
|
||||
theDNAElasticProcess->SetEmModel(new G4DNAUeharaScreenedRutherfordElasticModel());
|
||||
//theDNAElasticProcess->SetEmModel(new G4DNAScreenedRutherfordElasticModel());
|
||||
// *** Solvation ***
|
||||
|
||||
G4DNAElectronSolvation* solvation =
|
||||
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
|
||||
G4DNAOneStepThermalizationModel* therm =
|
||||
new G4DNAOneStepThermalizationModel();
|
||||
therm->SetHighEnergyLimit(10.*eV); // limit of the Uehara's model
|
||||
solvation->SetEmModel(therm);
|
||||
ph->RegisterProcess(solvation, particle);
|
||||
|
||||
// *** Elastic scattering ***
|
||||
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
|
||||
theDNAElasticProcess->SetEmModel(new G4DNAUeharaScreenedRutherfordElasticModel());
|
||||
((G4DNAUeharaScreenedRutherfordElasticModel*)(theDNAElasticProcess->EmModel()))->SelectFasterComputation(true);
|
||||
ph->RegisterProcess(theDNAElasticProcess, particle);
|
||||
|
||||
{
|
||||
// *** Excitation ***
|
||||
G4DNAExcitation* theDNAExcitationProcess =
|
||||
new G4DNAExcitation("e-_G4DNAExcitation");
|
||||
{
|
||||
G4DNABornExcitationModel* bornExc = new G4DNABornExcitationModel();
|
||||
bornExc->SetLowEnergyLimit(10*keV);
|
||||
bornExc->SetHighEnergyLimit(1.*MeV);
|
||||
bornExc->SetActivationLowEnergyLimit(10*keV);
|
||||
bornExc->SetActivationHighEnergyLimit(1.*MeV);
|
||||
theDNAExcitationProcess->SetEmModel(bornExc,1);
|
||||
theDNAExcitationProcess->AddEmModel(1, bornExc);
|
||||
}
|
||||
{
|
||||
G4DNAEmfietzoglouExcitationModel* emExc = new G4DNAEmfietzoglouExcitationModel();
|
||||
emExc->SetActivationLowEnergyLimit(0);
|
||||
emExc->SetActivationHighEnergyLimit(10.*keV);
|
||||
theDNAExcitationProcess->SetEmModel(emExc,2);
|
||||
theDNAExcitationProcess->AddEmModel(2, emExc);
|
||||
}
|
||||
G4DNAExcitation* theDNAExcitationProcess = new G4DNAExcitation("e-_G4DNAExcitation");
|
||||
theDNAExcitationProcess->SetEmModel(new G4DNAEmfietzoglouExcitationModel());
|
||||
ph->RegisterProcess(theDNAExcitationProcess, particle);
|
||||
}
|
||||
{
|
||||
|
||||
// *** Ionisation ***
|
||||
G4DNAIonisation* theDNAIonisationProcess =
|
||||
new G4DNAIonisation("e-_G4DNAIonisation");
|
||||
{
|
||||
G4DNABornIonisationModel* bornIon = new G4DNABornIonisationModel();
|
||||
bornIon->SetLowEnergyLimit(10*keV);
|
||||
bornIon->SetHighEnergyLimit(1.*MeV);
|
||||
bornIon->SetActivationLowEnergyLimit(10*keV);
|
||||
bornIon->SetActivationHighEnergyLimit(1.*MeV);
|
||||
|
||||
theDNAIonisationProcess->SetEmModel(bornIon,1);
|
||||
bornIon->SelectFasterComputation(true);
|
||||
theDNAIonisationProcess->AddEmModel(1,bornIon);
|
||||
}
|
||||
|
||||
{
|
||||
G4DNAEmfietzoglouIonisationModel* emIonModel = new G4DNAEmfietzoglouIonisationModel();
|
||||
emIonModel->SetLowEnergyLimit(10*eV);
|
||||
emIonModel->SetHighEnergyLimit(10.*keV);
|
||||
emIonModel->SetActivationLowEnergyLimit(0);
|
||||
emIonModel->SetActivationHighEnergyLimit(10.*keV);
|
||||
|
||||
theDNAIonisationProcess->SetEmModel(emIonModel,2);
|
||||
emIonModel->SelectFasterComputation(true);
|
||||
theDNAIonisationProcess->AddEmModel(2,emIonModel);
|
||||
}
|
||||
G4DNAIonisation* theDNAIonisationProcess = new G4DNAIonisation("e-_G4DNAIonisation");
|
||||
theDNAIonisationProcess->SetEmModel(new G4DNAEmfietzoglouIonisationModel());
|
||||
((G4DNAEmfietzoglouIonisationModel*)(theDNAIonisationProcess->EmModel()))->SelectFasterComputation(true);
|
||||
ph->RegisterProcess(theDNAIonisationProcess, particle);
|
||||
}
|
||||
|
||||
// *** Vibrational excitation ***
|
||||
//ph->RegisterProcess(new G4DNAVibExcitation("e-_G4DNAVibExcitation"), particle);
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
// *** Processes and models for Geant4-DNA
|
||||
|
||||
#include "G4DNAElectronSolvation.hh"
|
||||
#include "G4DNAElastic.hh"
|
||||
#include "G4DNAChampionElasticModel.hh"
|
||||
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
|
||||
@@ -151,63 +152,81 @@ void G4EmDNAPhysics_option7::ConstructProcess()
|
||||
|
||||
if (particleName == "e-")
|
||||
{
|
||||
|
||||
// *** Elastic scattering (two alternative models available) ***
|
||||
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
|
||||
theDNAElasticProcess->SetEmModel(new G4DNAUeharaScreenedRutherfordElasticModel());
|
||||
// *** Electron solvation ***
|
||||
// Either kills the electron track or transform the electron to
|
||||
// a solvated electron, depending on whether the chemistry is
|
||||
// activated
|
||||
|
||||
G4DNAElectronSolvation* solvation =
|
||||
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
|
||||
G4DNAOneStepThermalizationModel* therm =
|
||||
new G4DNAOneStepThermalizationModel();
|
||||
therm->SetHighEnergyLimit(10.*eV); // limit of the Uehara's model
|
||||
solvation->SetEmModel(therm);
|
||||
ph->RegisterProcess(solvation, particle);
|
||||
|
||||
// *** Elastic scattering ***
|
||||
|
||||
G4DNAElastic* theDNAElasticProcess =
|
||||
new G4DNAElastic("e-_G4DNAElastic");
|
||||
G4DNAUeharaScreenedRutherfordElasticModel* emElast =
|
||||
new G4DNAUeharaScreenedRutherfordElasticModel();
|
||||
emElast->SetHighEnergyLimit(1*MeV);
|
||||
// emElast->SelectHighEnergyLimit(1*MeV);
|
||||
theDNAElasticProcess->SetEmModel(emElast);
|
||||
ph->RegisterProcess(theDNAElasticProcess, particle);
|
||||
|
||||
{
|
||||
// *** Excitation ***
|
||||
G4DNAExcitation* theDNAExcitationProcess =
|
||||
// *** Excitation ***
|
||||
|
||||
G4DNAExcitation* theDNAExcitationProcess =
|
||||
new G4DNAExcitation("e-_G4DNAExcitation");
|
||||
{
|
||||
G4DNABornExcitationModel* bornExc = new G4DNABornExcitationModel();
|
||||
bornExc->SetLowEnergyLimit(10*keV);
|
||||
bornExc->SetHighEnergyLimit(1.*MeV);
|
||||
bornExc->SetActivationLowEnergyLimit(10*keV);
|
||||
bornExc->SetActivationHighEnergyLimit(1.*MeV);
|
||||
theDNAExcitationProcess->SetEmModel(bornExc,1);
|
||||
theDNAExcitationProcess->AddEmModel(1, bornExc);
|
||||
{
|
||||
G4DNAEmfietzoglouExcitationModel* emExc = new G4DNAEmfietzoglouExcitationModel();
|
||||
emExc->SetActivationLowEnergyLimit(8*eV);
|
||||
emExc->SetActivationHighEnergyLimit(10.*keV);
|
||||
theDNAExcitationProcess->SetEmModel(emExc,1);
|
||||
theDNAExcitationProcess->AddEmModel(1, emExc);
|
||||
}
|
||||
|
||||
{
|
||||
G4DNABornExcitationModel* bornExc = new G4DNABornExcitationModel();
|
||||
bornExc->SetActivationLowEnergyLimit(10*keV);
|
||||
bornExc->SetActivationHighEnergyLimit(1.*MeV);
|
||||
theDNAExcitationProcess->SetEmModel(bornExc,2);
|
||||
theDNAExcitationProcess->AddEmModel(2, bornExc);
|
||||
}
|
||||
|
||||
ph->RegisterProcess(theDNAExcitationProcess, particle);
|
||||
}
|
||||
|
||||
{
|
||||
G4DNAEmfietzoglouExcitationModel* emExc = new G4DNAEmfietzoglouExcitationModel();
|
||||
emExc->SetActivationLowEnergyLimit(0);
|
||||
emExc->SetActivationHighEnergyLimit(10.*keV);
|
||||
theDNAExcitationProcess->SetEmModel(emExc,2);
|
||||
theDNAExcitationProcess->AddEmModel(2, emExc);
|
||||
}
|
||||
ph->RegisterProcess(theDNAExcitationProcess, particle);
|
||||
}
|
||||
{
|
||||
// *** Ionisation ***
|
||||
G4DNAIonisation* theDNAIonisationProcess =
|
||||
// *** Ionisation ***
|
||||
|
||||
G4DNAIonisation* theDNAIonisationProcess =
|
||||
new G4DNAIonisation("e-_G4DNAIonisation");
|
||||
{
|
||||
G4DNABornIonisationModel* bornIon = new G4DNABornIonisationModel();
|
||||
bornIon->SetLowEnergyLimit(10*keV);
|
||||
bornIon->SetHighEnergyLimit(1.*MeV);
|
||||
bornIon->SetActivationLowEnergyLimit(10*keV);
|
||||
bornIon->SetActivationHighEnergyLimit(1.*MeV);
|
||||
|
||||
theDNAIonisationProcess->SetEmModel(bornIon,1);
|
||||
theDNAIonisationProcess->AddEmModel(1,bornIon);
|
||||
}
|
||||
{
|
||||
G4DNAEmfietzoglouIonisationModel* emIonModel = new G4DNAEmfietzoglouIonisationModel();
|
||||
emIonModel->SetActivationLowEnergyLimit(10.*eV);
|
||||
emIonModel->SetActivationHighEnergyLimit(10.*keV);
|
||||
|
||||
{
|
||||
G4DNAEmfietzoglouIonisationModel* emIonModel = new G4DNAEmfietzoglouIonisationModel();
|
||||
emIonModel->SetLowEnergyLimit(10*eV);
|
||||
emIonModel->SetHighEnergyLimit(10.*keV);
|
||||
emIonModel->SetActivationLowEnergyLimit(0);
|
||||
emIonModel->SetActivationHighEnergyLimit(10.*keV);
|
||||
theDNAIonisationProcess->SetEmModel(emIonModel,1);
|
||||
theDNAIonisationProcess->AddEmModel(1,emIonModel);
|
||||
}
|
||||
|
||||
{
|
||||
G4DNABornIonisationModel* bornIon = new G4DNABornIonisationModel();
|
||||
bornIon->SetActivationLowEnergyLimit(10*keV);
|
||||
bornIon->SetActivationHighEnergyLimit(1.*MeV);
|
||||
|
||||
theDNAIonisationProcess->SetEmModel(emIonModel,2);
|
||||
emIonModel->SelectFasterComputation(true);
|
||||
theDNAIonisationProcess->AddEmModel(2,emIonModel);
|
||||
}
|
||||
ph->RegisterProcess(theDNAIonisationProcess, particle);
|
||||
theDNAIonisationProcess->SetEmModel(bornIon,2);
|
||||
theDNAIonisationProcess->AddEmModel(2,bornIon);
|
||||
}
|
||||
|
||||
ph->RegisterProcess(theDNAIonisationProcess, particle);
|
||||
}
|
||||
|
||||
// *** Vibrational excitation ***
|
||||
ph->RegisterProcess(new G4DNAVibExcitation("e-_G4DNAVibExcitation"), particle);
|
||||
|
||||
|
||||
@@ -82,6 +82,8 @@
|
||||
#include "G4UniversalFluctuation.hh"
|
||||
#include "G4LowECapture.hh"
|
||||
#include "G4hMultipleScattering.hh"
|
||||
#include "G4eCoulombScatteringModel.hh"
|
||||
#include "G4IonCoulombScatteringModel.hh"
|
||||
#include "G4ionIonisation.hh"
|
||||
|
||||
// Processes and models for Geant4-DNA
|
||||
@@ -89,7 +91,8 @@
|
||||
|
||||
#include "G4DNAElastic.hh"
|
||||
#include "G4DNAChampionElasticModel.hh"
|
||||
#include "G4DNAScreenedRutherfordElasticModel.hh"
|
||||
//#include "G4DNAScreenedRutherfordElasticModel.hh"
|
||||
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
|
||||
#include "G4DNAIonElasticModel.hh"
|
||||
|
||||
#include "G4DNAExcitation.hh"
|
||||
@@ -102,6 +105,12 @@
|
||||
#include "G4SystemOfUnits.hh"
|
||||
#include <vector>
|
||||
|
||||
#include "G4DNAChemistryManager.hh"
|
||||
#include "G4DNAElectronSolvation.hh"
|
||||
#include "G4DNAEmfietzoglouIonisationModel.hh"
|
||||
#include "G4DNAEmfietzoglouExcitationModel.hh"
|
||||
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
G4EmModelActivator::G4EmModelActivator()
|
||||
@@ -119,11 +128,11 @@ G4EmModelActivator::~G4EmModelActivator()
|
||||
|
||||
void G4EmModelActivator::ConstructParticle()
|
||||
{
|
||||
const std::vector<G4String> regnamesDNA = theParameters->RegionsDNA();
|
||||
if(regnamesDNA.size() > 0)
|
||||
{
|
||||
ConstructDNAParticles();
|
||||
}
|
||||
// const std::vector<G4String> regnamesDNA = theParameters->RegionsDNA();
|
||||
// if(regnamesDNA.size() > 0)
|
||||
//{
|
||||
ConstructDNAParticles();
|
||||
//}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
@@ -153,7 +162,7 @@ void G4EmModelActivator::ActivatePAI()
|
||||
{
|
||||
const std::vector<G4String> regnamesPAI = theParameters->RegionsPAI();
|
||||
G4int nreg = regnamesPAI.size();
|
||||
if(0 == nreg) return;
|
||||
if(0 == nreg) { return; }
|
||||
G4int verbose = theParameters->Verbose() - 1;
|
||||
if(verbose > 0)
|
||||
{
|
||||
@@ -366,7 +375,7 @@ void G4EmModelActivator::ActivateMicroElec()
|
||||
reg,
|
||||
0.0,
|
||||
2 * MeV,
|
||||
new G4IonFluctuations());
|
||||
new G4UniversalFluctuation());
|
||||
|
||||
mod = new G4BetheBlochModel();
|
||||
mod->SetActivationLowEnergyLimit(pmax);
|
||||
@@ -470,10 +479,11 @@ void G4EmModelActivator::ActivateDNA()
|
||||
G4ProcessManager* a0man = alpha0->GetProcessManager();
|
||||
G4ProcessManager* h0man = h0->GetProcessManager();
|
||||
|
||||
G4bool emsc = HasMsc(eman);
|
||||
//G4bool pmsc = HasMsc(pman);
|
||||
//G4bool a2msc = HasMsc(a2man);
|
||||
//G4bool a1msc = HasMsc(a1man);
|
||||
G4bool emsc = HasMsc(eman);
|
||||
G4bool pmsc = HasMsc(pman);
|
||||
G4bool a2msc = HasMsc(a2man);
|
||||
G4bool a1msc = HasMsc(a1man);
|
||||
G4bool imsc = HasMsc(iman);
|
||||
|
||||
// alpha+ standard processes
|
||||
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
|
||||
@@ -625,24 +635,46 @@ void G4EmModelActivator::ActivateDNA()
|
||||
G4VEmModel* mod;
|
||||
|
||||
// limits for DNA model applicability
|
||||
G4double elowest = 11 * eV;
|
||||
G4double elowest = 4. * eV; // theParameters->LowestElectronEnergy();
|
||||
|
||||
// G4cout << "elowest = " << G4BestUnit(elowest, "Energy") << G4endl;
|
||||
|
||||
G4double elimel = 1 * MeV;
|
||||
G4double elimin = 1 * MeV;
|
||||
G4double elimvb = 100 * eV;
|
||||
G4double elimat = 13 * eV;
|
||||
G4double pmin = 10 * keV;
|
||||
G4double elim1 = 10 * keV;
|
||||
G4double pmin = 10 * keV;
|
||||
G4double pminbb = 2 * MeV;
|
||||
G4double pminch = 100 * eV;
|
||||
G4double mgmin = 1 * keV;
|
||||
G4double gmmax = 500 * keV;
|
||||
G4double pmax = 100 * MeV;
|
||||
G4double mgmin = 1 * keV;
|
||||
G4double gmmax = 500 * keV;
|
||||
G4double pmax = 100 * MeV;
|
||||
G4double ionmin = 10 * keV;
|
||||
G4double ionmax = 400 * MeV;
|
||||
G4double hmax = 100 * MeV;
|
||||
G4double gionmax = 1 * TeV;
|
||||
G4double hmax = 100 * MeV;
|
||||
G4double gionmax= 1 * GeV;
|
||||
|
||||
// low-energy capture
|
||||
G4LowECapture* ecap = new G4LowECapture(elowest);
|
||||
eman->AddDiscreteProcess(ecap);
|
||||
G4LowECapture* ecap = nullptr;
|
||||
if(G4DNAChemistryManager::IsActivated() == false)
|
||||
{
|
||||
// Note: G4DNAElectronSolvation could also be used instead of G4LowECapture
|
||||
ecap = new G4LowECapture(elowest);
|
||||
// ecap->SetVerboseLevel(1);
|
||||
eman->AddDiscreteProcess(ecap);
|
||||
}
|
||||
else
|
||||
{
|
||||
// When chemistry is activated: G4DNAElectronSolvation turns the electron
|
||||
// to a solvated electron, otherwise it kills the electron at the
|
||||
// corresponding high energy limit of the model
|
||||
G4DNAElectronSolvation* solvatation =
|
||||
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
|
||||
solvatation->AddEmModel(0, new G4DummyModel());
|
||||
eman->AddDiscreteProcess(solvatation);
|
||||
}
|
||||
|
||||
G4LowECapture* pcap = new G4LowECapture(pmin);
|
||||
pman->AddDiscreteProcess(pcap);
|
||||
G4LowECapture* icap = new G4LowECapture(ionmin);
|
||||
@@ -659,9 +691,8 @@ void G4EmModelActivator::ActivateDNA()
|
||||
// loop over regions
|
||||
for(G4int i = 0; i < nreg; ++i)
|
||||
{
|
||||
|
||||
G4String reg = regnamesDNA[i];
|
||||
if(0 < verbose)
|
||||
if(1 < verbose)
|
||||
{
|
||||
G4cout << "### DNA models are activated for G4Region " << reg << G4endl
|
||||
<< " Energy limits for e- elastic: " << elowest/eV << " eV - "
|
||||
@@ -671,27 +702,70 @@ void G4EmModelActivator::ActivateDNA()
|
||||
<< " Energy limits for hadrons/ions: " << pmin/MeV << " MeV - "
|
||||
<< pmax/MeV << " MeV" << G4endl;
|
||||
}
|
||||
|
||||
// ---
|
||||
// e-
|
||||
if(emsc)
|
||||
{
|
||||
|
||||
if(emsc) {
|
||||
G4UrbanMscModel* msc = new G4UrbanMscModel();
|
||||
msc->SetActivationLowEnergyLimit(elimel);
|
||||
em_config->SetExtraEmModel("e-", "msc", msc, reg);
|
||||
em_config->SetExtraEmModel("e-", "msc", msc, reg, 0.0, 100*MeV);
|
||||
} else {
|
||||
mod = new G4eCoulombScatteringModel();
|
||||
mod->SetActivationLowEnergyLimit(elimel);
|
||||
em_config->SetExtraEmModel("e-", "CoulombScat", mod, reg, 0.0, 10 * TeV);
|
||||
}
|
||||
|
||||
// cuts and solvation
|
||||
if(G4DNAChemistryManager::IsActivated())
|
||||
{
|
||||
// For this condition to work, the chemistry list has to be called
|
||||
// before any standard EM physics list
|
||||
mod = new G4DNATransformElectronModel();
|
||||
mod->SetHighEnergyLimit(elowest);
|
||||
em_config->SetExtraEmModel("e-",
|
||||
"e-_G4DNAElectronSolvation",
|
||||
mod,
|
||||
reg,
|
||||
0.,
|
||||
elowest+1.*eV);
|
||||
|
||||
mod = new G4DNAUeharaScreenedRutherfordElasticModel();
|
||||
mod->SetLowEnergyLimit(0.);
|
||||
mod->SetActivationLowEnergyLimit(0.);
|
||||
em_config->SetExtraEmModel("e-",
|
||||
"e-_G4DNAElastic",
|
||||
mod,
|
||||
reg,
|
||||
0.0,
|
||||
7.4*eV);
|
||||
}
|
||||
else if(ecap)
|
||||
{
|
||||
ecap->AddRegion(reg);
|
||||
}
|
||||
else
|
||||
{
|
||||
mod = new G4DummyModel();
|
||||
em_config->SetExtraEmModel("e-", "CoulombScat", mod, reg, 0.0, elimel);
|
||||
mod = new G4DNAOneStepThermalizationModel();
|
||||
mod->SetHighEnergyLimit(elowest);
|
||||
em_config->SetExtraEmModel("e-",
|
||||
"e-_G4DNAElectronSolvation",
|
||||
mod,
|
||||
reg,
|
||||
0.,
|
||||
elowest);
|
||||
}
|
||||
|
||||
mod = new G4DNAScreenedRutherfordElasticModel();
|
||||
|
||||
mod = new G4DNAChampionElasticModel();
|
||||
em_config->SetExtraEmModel("e-",
|
||||
"e-_G4DNAElastic",
|
||||
mod,
|
||||
reg,
|
||||
elowest,
|
||||
7.4*eV,
|
||||
elimel);
|
||||
|
||||
// ioni
|
||||
|
||||
mod = new G4MollerBhabhaModel();
|
||||
mod->SetActivationLowEnergyLimit(elimin);
|
||||
em_config->SetExtraEmModel("e-",
|
||||
@@ -701,21 +775,38 @@ void G4EmModelActivator::ActivateDNA()
|
||||
0.0,
|
||||
10 * TeV,
|
||||
new G4UniversalFluctuation());
|
||||
|
||||
|
||||
mod = new G4DNAEmfietzoglouIonisationModel();
|
||||
em_config->SetExtraEmModel("e-",
|
||||
"e-_G4DNAIonisation",
|
||||
mod,
|
||||
reg,
|
||||
0.0,
|
||||
elim1);
|
||||
|
||||
mod = new G4DNABornIonisationModel();
|
||||
em_config->SetExtraEmModel("e-",
|
||||
"e-_G4DNAIonisation",
|
||||
mod,
|
||||
reg,
|
||||
elowest,
|
||||
elim1,
|
||||
elimin);
|
||||
|
||||
// exc
|
||||
|
||||
mod = new G4DNAEmfietzoglouExcitationModel();
|
||||
em_config->SetExtraEmModel("e-",
|
||||
"e-_G4DNAExcitation",
|
||||
mod,
|
||||
reg,
|
||||
0.0,
|
||||
elim1);
|
||||
|
||||
mod = new G4DNABornExcitationModel();
|
||||
em_config->SetExtraEmModel("e-",
|
||||
"e-_G4DNAExcitation",
|
||||
mod,
|
||||
reg,
|
||||
elowest,
|
||||
elim1,
|
||||
elimin);
|
||||
|
||||
mod = new G4DNASancheExcitationModel();
|
||||
@@ -723,7 +814,7 @@ void G4EmModelActivator::ActivateDNA()
|
||||
"e-_G4DNAVibExcitation",
|
||||
mod,
|
||||
reg,
|
||||
elowest,
|
||||
0.0,
|
||||
elimvb);
|
||||
|
||||
mod = new G4DNAMeltonAttachmentModel();
|
||||
@@ -731,19 +822,30 @@ void G4EmModelActivator::ActivateDNA()
|
||||
"e-_G4DNAAttachment",
|
||||
mod,
|
||||
reg,
|
||||
elowest,
|
||||
0.0,
|
||||
elimat);
|
||||
|
||||
|
||||
// ---
|
||||
// proton
|
||||
if(pmsc) {
|
||||
G4UrbanMscModel* msc = new G4UrbanMscModel();
|
||||
msc->SetActivationLowEnergyLimit(elimel);
|
||||
em_config->SetExtraEmModel("proton", "msc", msc, reg, 0.0, 100*MeV);
|
||||
} else {
|
||||
mod = new G4eCoulombScatteringModel();
|
||||
mod->SetActivationLowEnergyLimit(elimel);
|
||||
em_config->SetExtraEmModel("proton", "CoulombScat", mod, reg, 0.0, 10 * TeV);
|
||||
}
|
||||
|
||||
mod = new G4BraggModel();
|
||||
mod->SetActivationHighEnergyLimit(0.0);
|
||||
mod->SetActivationLowEnergyLimit(pminbb);
|
||||
em_config->SetExtraEmModel("proton",
|
||||
"hIoni",
|
||||
mod,
|
||||
reg,
|
||||
0.0,
|
||||
2 * MeV,
|
||||
new G4IonFluctuations());
|
||||
pminbb,
|
||||
new G4UniversalFluctuation());
|
||||
|
||||
mod = new G4BetheBlochModel();
|
||||
mod->SetActivationLowEnergyLimit(pmax);
|
||||
@@ -751,7 +853,7 @@ void G4EmModelActivator::ActivateDNA()
|
||||
"hIoni",
|
||||
mod,
|
||||
reg,
|
||||
2 * MeV,
|
||||
pminbb,
|
||||
10 * TeV,
|
||||
new G4UniversalFluctuation());
|
||||
|
||||
@@ -776,7 +878,7 @@ void G4EmModelActivator::ActivateDNA()
|
||||
"proton_G4DNAExcitation",
|
||||
mod,
|
||||
reg,
|
||||
elowest,
|
||||
0.0,
|
||||
gmmax);
|
||||
|
||||
mod = new G4DNABornExcitationModel();
|
||||
@@ -797,21 +899,31 @@ void G4EmModelActivator::ActivateDNA()
|
||||
|
||||
mod = new G4DNAIonElasticModel();
|
||||
em_config->SetExtraEmModel("proton",
|
||||
"proton_G4DNAIonElasticModel",
|
||||
"proton_G4DNAElasticModel",
|
||||
mod,
|
||||
reg,
|
||||
0.0,
|
||||
1 * MeV);
|
||||
elimel);
|
||||
|
||||
// ions
|
||||
// ---
|
||||
// GenericIon
|
||||
if(imsc) {
|
||||
G4UrbanMscModel* msc = new G4UrbanMscModel();
|
||||
msc->SetActivationLowEnergyLimit(elimel);
|
||||
em_config->SetExtraEmModel("proton", "ionmsc", msc, reg, 0.0, 100*MeV);
|
||||
} else {
|
||||
mod = new G4IonCoulombScatteringModel();
|
||||
mod->SetActivationLowEnergyLimit(elimel);
|
||||
em_config->SetExtraEmModel("proton", "CoulombScat", mod, reg, 0.0, 10 * TeV);
|
||||
}
|
||||
mod = new G4BraggIonModel();
|
||||
mod->SetActivationHighEnergyLimit(0.0);
|
||||
mod->SetActivationLowEnergyLimit(pminbb);
|
||||
em_config->SetExtraEmModel("GenericIon",
|
||||
"ionIoni",
|
||||
mod,
|
||||
reg,
|
||||
0.0,
|
||||
2 * MeV,
|
||||
pminbb,
|
||||
new G4IonFluctuations());
|
||||
|
||||
mod = new G4BetheBlochModel();
|
||||
@@ -820,7 +932,7 @@ void G4EmModelActivator::ActivateDNA()
|
||||
"ionIoni",
|
||||
mod,
|
||||
reg,
|
||||
2 * MeV,
|
||||
pminbb,
|
||||
10 * TeV,
|
||||
new G4IonFluctuations());
|
||||
|
||||
@@ -832,15 +944,21 @@ void G4EmModelActivator::ActivateDNA()
|
||||
0.0,
|
||||
gionmax);
|
||||
|
||||
// ---
|
||||
// alpha++
|
||||
if(a2msc) {
|
||||
G4UrbanMscModel* msc = new G4UrbanMscModel();
|
||||
msc->SetActivationLowEnergyLimit(elimel);
|
||||
em_config->SetExtraEmModel("alpha++", "msc", msc, reg, 0.0, 100*MeV);
|
||||
}
|
||||
mod = new G4BraggIonModel();
|
||||
mod->SetActivationHighEnergyLimit(0.0);
|
||||
mod->SetActivationLowEnergyLimit(pminbb);
|
||||
em_config->SetExtraEmModel("alpha",
|
||||
"ionIoni",
|
||||
mod,
|
||||
reg,
|
||||
0.0,
|
||||
2 * MeV,
|
||||
pminbb,
|
||||
new G4IonFluctuations());
|
||||
|
||||
mod = new G4BetheBlochModel();
|
||||
@@ -849,7 +967,7 @@ void G4EmModelActivator::ActivateDNA()
|
||||
"ionIoni",
|
||||
mod,
|
||||
reg,
|
||||
2 * MeV,
|
||||
pminbb,
|
||||
10 * TeV,
|
||||
new G4IonFluctuations());
|
||||
|
||||
@@ -879,21 +997,27 @@ void G4EmModelActivator::ActivateDNA()
|
||||
|
||||
mod = new G4DNAIonElasticModel();
|
||||
em_config->SetExtraEmModel("alpha",
|
||||
"alpha_G4DNAIonElasticModel",
|
||||
"alpha_G4DNAElasticModel",
|
||||
mod,
|
||||
reg,
|
||||
0.0,
|
||||
1 * MeV);
|
||||
elimel);
|
||||
|
||||
// ---
|
||||
// alpha+
|
||||
if(a1msc) {
|
||||
G4UrbanMscModel* msc = new G4UrbanMscModel();
|
||||
msc->SetActivationLowEnergyLimit(elimel);
|
||||
em_config->SetExtraEmModel("alpha+", "msc", msc, reg, 0.0, 100*MeV);
|
||||
}
|
||||
mod = new G4BraggIonModel();
|
||||
mod->SetActivationHighEnergyLimit(0.0);
|
||||
mod->SetActivationLowEnergyLimit(pminbb);
|
||||
em_config->SetExtraEmModel("alpha+",
|
||||
"ionIoni",
|
||||
mod,
|
||||
reg,
|
||||
0.0,
|
||||
2 * MeV,
|
||||
pminbb,
|
||||
new G4IonFluctuations());
|
||||
|
||||
mod = new G4BetheBlochModel();
|
||||
@@ -902,7 +1026,7 @@ void G4EmModelActivator::ActivateDNA()
|
||||
"ionIoni",
|
||||
mod,
|
||||
reg,
|
||||
2 * MeV,
|
||||
pminbb,
|
||||
10 * TeV,
|
||||
new G4IonFluctuations());
|
||||
|
||||
@@ -940,12 +1064,13 @@ void G4EmModelActivator::ActivateDNA()
|
||||
|
||||
mod = new G4DNAIonElasticModel();
|
||||
em_config->SetExtraEmModel("alpha+",
|
||||
"alpha+_G4DNAIonElasticModel",
|
||||
"alpha+_G4DNAElasticModel",
|
||||
mod,
|
||||
reg,
|
||||
0.0,
|
||||
1 * MeV);
|
||||
elimel);
|
||||
|
||||
// ---
|
||||
// helium
|
||||
mod = new G4DNARuddIonisationModel();
|
||||
em_config->SetExtraEmModel("helium",
|
||||
@@ -973,11 +1098,11 @@ void G4EmModelActivator::ActivateDNA()
|
||||
|
||||
mod = new G4DNAIonElasticModel();
|
||||
em_config->SetExtraEmModel("helium",
|
||||
"helium_G4DNAIonElasticModel",
|
||||
"helium_G4DNAElasticModel",
|
||||
mod,
|
||||
reg,
|
||||
0.0,
|
||||
1 * MeV);
|
||||
elimel);
|
||||
|
||||
// hydrogen
|
||||
mod = new G4DNARuddIonisationModel();
|
||||
@@ -993,7 +1118,7 @@ void G4EmModelActivator::ActivateDNA()
|
||||
"hydrogen_G4DNAExcitation",
|
||||
mod,
|
||||
reg,
|
||||
elowest,
|
||||
0.0,
|
||||
gmmax);
|
||||
|
||||
mod = new G4DNADingfelderChargeIncreaseModel();
|
||||
@@ -1006,11 +1131,12 @@ void G4EmModelActivator::ActivateDNA()
|
||||
|
||||
mod = new G4DNAIonElasticModel();
|
||||
em_config->SetExtraEmModel("hydrogen",
|
||||
"hydrogen_G4DNAIonElasticModel",
|
||||
"hydrogen_G4DNAElasticModel",
|
||||
mod,
|
||||
reg,
|
||||
0.0,
|
||||
1 * MeV);
|
||||
elimel);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -113,8 +113,9 @@ G4EmStandardPhysicsGS::G4EmStandardPhysicsGS(G4int ver)
|
||||
param->SetDefaults();
|
||||
param->SetVerbose(verbose);
|
||||
param->SetLowestElectronEnergy(10*eV);
|
||||
param->SetMscRangeFactor(0.12);
|
||||
param->SetMscRangeFactor(0.1);
|
||||
param->SetMscStepLimitType(fUseSafetyPlus);// corresponds to Urban fUseSafety
|
||||
// param->SetMscStepLimitType(fUseSafety);// corresponds to the error-free stepping
|
||||
// param->SetFluo(true);
|
||||
SetPhysicsType(bElectromagnetic);
|
||||
}
|
||||
@@ -128,8 +129,9 @@ G4EmStandardPhysicsGS::G4EmStandardPhysicsGS(G4int ver, const G4String&)
|
||||
param->SetDefaults();
|
||||
param->SetVerbose(verbose);
|
||||
param->SetLowestElectronEnergy(10*eV);
|
||||
param->SetMscRangeFactor(0.12);
|
||||
param->SetMscRangeFactor(0.1);
|
||||
param->SetMscStepLimitType(fUseSafetyPlus);// corresponds to Urban fUseSafety
|
||||
// param->SetMscStepLimitType(fUseSafety);// corresponds to the error-free stepping
|
||||
// param->SetFluo(true);
|
||||
SetPhysicsType(bElectromagnetic);
|
||||
}
|
||||
|
||||
+6
-1
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4EmStandardPhysics_option3.cc 92821 2015-09-17 15:23:49Z gcosmo $
|
||||
// $Id: G4EmStandardPhysics_option3.cc 96267 2016-04-01 12:38:51Z gcosmo $
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
@@ -75,6 +75,7 @@
|
||||
#include "G4MuPairProduction.hh"
|
||||
#include "G4hBremsstrahlung.hh"
|
||||
#include "G4hPairProduction.hh"
|
||||
#include "G4ePairProduction.hh"
|
||||
|
||||
#include "G4MuBremsstrahlungModel.hh"
|
||||
#include "G4MuPairProductionModel.hh"
|
||||
@@ -125,6 +126,7 @@ G4EmStandardPhysics_option3::G4EmStandardPhysics_option3(G4int ver)
|
||||
param->SetLowestElectronEnergy(100*eV);
|
||||
param->SetNumberOfBinsPerDecade(20);
|
||||
param->SetMscStepLimitType(fUseDistanceToBoundary);
|
||||
param->SetMuHadLateralDisplacement(true);
|
||||
param->SetFluo(true);
|
||||
SetPhysicsType(bElectromagnetic);
|
||||
}
|
||||
@@ -205,6 +207,7 @@ void G4EmStandardPhysics_option3::ConstructProcess()
|
||||
G4hPairProduction* kp = new G4hPairProduction();
|
||||
G4hBremsstrahlung* pb = new G4hBremsstrahlung();
|
||||
G4hPairProduction* pp = new G4hPairProduction();
|
||||
G4ePairProduction* ee = new G4ePairProduction();
|
||||
|
||||
// muon & hadron multiple scattering
|
||||
// G4MuMultipleScattering* mumsc = new G4MuMultipleScattering();
|
||||
@@ -259,6 +262,7 @@ void G4EmStandardPhysics_option3::ConstructProcess()
|
||||
ph->RegisterProcess(msc, particle);
|
||||
ph->RegisterProcess(eIoni, particle);
|
||||
ph->RegisterProcess(brem, particle);
|
||||
ph->RegisterProcess(ee, particle);
|
||||
|
||||
} else if (particleName == "e+") {
|
||||
|
||||
@@ -280,6 +284,7 @@ void G4EmStandardPhysics_option3::ConstructProcess()
|
||||
ph->RegisterProcess(msc, particle);
|
||||
ph->RegisterProcess(eIoni, particle);
|
||||
ph->RegisterProcess(brem, particle);
|
||||
ph->RegisterProcess(ee, particle);
|
||||
ph->RegisterProcess(new G4eplusAnnihilation(), particle);
|
||||
|
||||
} else if (particleName == "mu+" ||
|
||||
|
||||
+8
-3
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4EmStandardPhysics_option4.cc 92821 2015-09-17 15:23:49Z gcosmo $
|
||||
// $Id: G4EmStandardPhysics_option4.cc 96209 2016-03-30 08:58:33Z gcosmo $
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
@@ -79,6 +79,7 @@
|
||||
#include "G4MuPairProduction.hh"
|
||||
#include "G4hBremsstrahlung.hh"
|
||||
#include "G4hPairProduction.hh"
|
||||
#include "G4ePairProduction.hh"
|
||||
|
||||
#include "G4MuBremsstrahlungModel.hh"
|
||||
#include "G4MuPairProductionModel.hh"
|
||||
@@ -131,7 +132,7 @@ G4EmStandardPhysics_option4::G4EmStandardPhysics_option4(G4int ver)
|
||||
param->ActivateAngularGeneratorForIonisation(true);
|
||||
param->SetMscRangeFactor(0.02);
|
||||
param->SetMscStepLimitType(fUseDistanceToBoundary);
|
||||
//param->SetLatDisplacementBeyondSafety(true);
|
||||
param->SetLatDisplacementBeyondSafety(true);
|
||||
param->SetFluo(true);
|
||||
SetPhysicsType(bElectromagnetic);
|
||||
}
|
||||
@@ -152,7 +153,8 @@ G4EmStandardPhysics_option4::G4EmStandardPhysics_option4(G4int ver,
|
||||
param->ActivateAngularGeneratorForIonisation(true);
|
||||
param->SetMscRangeFactor(0.02);
|
||||
param->SetMscStepLimitType(fUseDistanceToBoundary);
|
||||
// param->SetLatDisplacementBeyondSafety(true);
|
||||
param->SetMuHadLateralDisplacement(true);
|
||||
//param->SetLatDisplacementBeyondSafety(true);
|
||||
param->SetFluo(true);
|
||||
SetPhysicsType(bElectromagnetic);
|
||||
}
|
||||
@@ -215,6 +217,7 @@ void G4EmStandardPhysics_option4::ConstructProcess()
|
||||
G4hPairProduction* kp = new G4hPairProduction();
|
||||
G4hBremsstrahlung* pb = new G4hBremsstrahlung();
|
||||
G4hPairProduction* pp = new G4hPairProduction();
|
||||
G4ePairProduction* ee = new G4ePairProduction();
|
||||
|
||||
// muon & hadron multiple scattering
|
||||
G4MuMultipleScattering* mumsc = new G4MuMultipleScattering();
|
||||
@@ -314,6 +317,7 @@ void G4EmStandardPhysics_option4::ConstructProcess()
|
||||
ph->RegisterProcess(msc, particle);
|
||||
ph->RegisterProcess(eIoni, particle);
|
||||
ph->RegisterProcess(brem, particle);
|
||||
ph->RegisterProcess(ee, particle);
|
||||
ph->RegisterProcess(ss, particle);
|
||||
|
||||
} else if (particleName == "e+") {
|
||||
@@ -355,6 +359,7 @@ void G4EmStandardPhysics_option4::ConstructProcess()
|
||||
ph->RegisterProcess(msc, particle);
|
||||
ph->RegisterProcess(eIoni, particle);
|
||||
ph->RegisterProcess(brem, particle);
|
||||
ph->RegisterProcess(ee, particle);
|
||||
ph->RegisterProcess(new G4eplusAnnihilation(), particle);
|
||||
ph->RegisterProcess(ss, particle);
|
||||
|
||||
|
||||
@@ -70,7 +70,9 @@ G4OpticalPhysics::G4OpticalPhysics(G4int verbose, const G4String& name)
|
||||
fExcitationRatio(0.0),
|
||||
fProfile("delta"),
|
||||
fFiniteRiseTime(false),
|
||||
fScintillationByParticleType(false)
|
||||
fScintillationByParticleType(false),
|
||||
fScintillationTrackInfo(false),
|
||||
fInvokeSD(true)
|
||||
{
|
||||
verboseLevel = verbose;
|
||||
fMessenger = new G4OpticalPhysicsMessenger(this);
|
||||
@@ -202,17 +204,24 @@ namespace UIhelpers {
|
||||
sccmd3.SetParameterName("ratio",false);
|
||||
//sccmd3.SetRange("ratio>=0.&&ratio<=1.");//LIMITATION: w/ DeclareMethod range checking does not work
|
||||
sccmd3.SetStates(G4State_Idle);
|
||||
|
||||
G4GenericMessenger::Command& sccmd4 = mess->DeclareMethod("setByParticleType",
|
||||
&G4Scintillation::SetScintillationByParticleType,
|
||||
"Activate/Inactivate scintillation process by particle type");
|
||||
sccmd4.SetParameterName("flag", false);
|
||||
sccmd4.SetStates(G4State_Idle);
|
||||
|
||||
G4GenericMessenger::Command& sccmd5 = mess->DeclareMethod("setTrackInfo",
|
||||
&G4Scintillation::SetScintillationTrackInfo,
|
||||
"Activate/Inactivate scintillation track info");
|
||||
sccmd5.SetParameterName("flag", false);
|
||||
sccmd5.SetStates(G4State_Idle);
|
||||
|
||||
G4GenericMessenger::Command& sccmd5 = mess->DeclareMethod("setTrackSecondariesFirst",
|
||||
G4GenericMessenger::Command& sccmd6 = mess->DeclareMethod("setTrackSecondariesFirst",
|
||||
&G4Scintillation::SetTrackSecondariesFirst,
|
||||
"Set option to track secondaries before finishing their parent track");
|
||||
sccmd5.SetParameterName("flag",false);
|
||||
sccmd5.SetStates(G4State_Idle);
|
||||
sccmd6.SetParameterName("flag",false);
|
||||
sccmd6.SetStates(G4State_Idle);
|
||||
|
||||
buildCommands(ScintillationProcess,DIR_CMDS"/scintillation/",GUIDANCE" for scintillation process.");
|
||||
}
|
||||
@@ -282,6 +291,7 @@ void G4OpticalPhysics::ConstructProcess()
|
||||
|
||||
G4OpBoundaryProcess* OpBoundaryProcess = new G4OpBoundaryProcess();
|
||||
UIhelpers::buildCommands(OpBoundaryProcess,DIR_CMDS"/boundary/",GUIDANCE" for boundary process");
|
||||
OpBoundaryProcess->SetInvokeSD(fInvokeSD);
|
||||
OpProcesses[kBoundary] = OpBoundaryProcess;
|
||||
|
||||
G4OpWLS* OpWLSProcess = new G4OpWLS();
|
||||
@@ -311,6 +321,7 @@ void G4OpticalPhysics::ConstructProcess()
|
||||
ScintillationProcess->SetScintillationExcitationRatio(fExcitationRatio);
|
||||
ScintillationProcess->SetFiniteRiseTime(fFiniteRiseTime);
|
||||
ScintillationProcess->SetScintillationByParticleType(fScintillationByParticleType);
|
||||
ScintillationProcess->SetScintillationTrackInfo(fScintillationTrackInfo);
|
||||
ScintillationProcess->SetTrackSecondariesFirst(fProcessTrackSecondariesFirst[kScintillation]);
|
||||
G4EmSaturation* emSaturation = G4LossTableManager::Instance()->EmSaturation();
|
||||
ScintillationProcess->AddSaturation(emSaturation);
|
||||
@@ -415,6 +426,13 @@ void G4OpticalPhysics::
|
||||
//G4Scintillation::SetScintillationByParticleType(scintillationByParticleType);
|
||||
}
|
||||
|
||||
void G4OpticalPhysics::
|
||||
SetScintillationTrackInfo(G4bool scintillationTrackInfo)
|
||||
{
|
||||
fScintillationTrackInfo = scintillationTrackInfo;
|
||||
//G4Scintillation::SetScintillationTrackInfo(scintillationTrackInfo);
|
||||
}
|
||||
|
||||
void G4OpticalPhysics::SetTrackSecondariesFirst(G4OpticalProcessIndex index,
|
||||
G4bool trackSecondariesFirst)
|
||||
{
|
||||
@@ -432,7 +450,12 @@ void G4OpticalPhysics::SetFiniteRiseTime(G4bool finiteRiseTime)
|
||||
{
|
||||
fFiniteRiseTime = finiteRiseTime;
|
||||
//G4Scintillation::SetFiniteRiseTime(finiteRiseTime);
|
||||
}
|
||||
}
|
||||
|
||||
void G4OpticalPhysics::SetInvokeSD(G4bool invokeSD)
|
||||
{
|
||||
fInvokeSD = invokeSD;
|
||||
}
|
||||
|
||||
void G4OpticalPhysics::Configure(G4OpticalProcessIndex index, G4bool isUse)
|
||||
{
|
||||
|
||||
@@ -68,9 +68,11 @@ G4OpticalPhysicsMessenger::G4OpticalPhysicsMessenger(
|
||||
fSetCerenkovMaxBetaChangeCmd(0),
|
||||
fSetScintillationYieldFactorCmd(0),
|
||||
fSetScintillationByParticleTypeCmd(0),
|
||||
fSetScintillationTrackInfoCmd(0),
|
||||
fSetWLSTimeProfileCmd(0),
|
||||
fSetTrackSecondariesFirstCmd(0),
|
||||
fSetFiniteRiseTimeCmd(0)
|
||||
fSetFiniteRiseTimeCmd(0),
|
||||
fSetInvokeSDCmd(0)
|
||||
{
|
||||
G4bool toBeBroadcasted = false;
|
||||
fDir = new G4UIdirectory("/process/optical/defaults/",toBeBroadcasted);
|
||||
@@ -147,6 +149,11 @@ G4OpticalPhysicsMessenger::G4OpticalPhysicsMessenger(
|
||||
fSetScintillationByParticleTypeCmd->SetParameterName("ScintillationByParticleTypeActivation", false);
|
||||
fSetScintillationByParticleTypeCmd->AvailableForStates(G4State_PreInit);
|
||||
|
||||
fSetScintillationTrackInfoCmd = new G4UIcmdWithABool("/process/optical/defaults/scintillation/setTrackInfo", this);
|
||||
fSetScintillationTrackInfoCmd->SetGuidance("Activate/Inactivate scintillation TrackInformation");
|
||||
fSetScintillationTrackInfoCmd->SetParameterName("ScintillationTrackInfo", false);
|
||||
fSetScintillationTrackInfoCmd->AvailableForStates(G4State_PreInit);
|
||||
|
||||
fSetFiniteRiseTimeCmd = new G4UIcmdWithABool("/process/optical/defaults/scintillation/setFiniteRiseTime", this);
|
||||
fSetFiniteRiseTimeCmd->SetGuidance("Set option of a finite rise-time for G4Scintillation");
|
||||
fSetFiniteRiseTimeCmd->SetGuidance("If set, the G4Scintillation process expects the user to have set the constant material property FAST/SLOWSCINTILLATIONRISETIME");
|
||||
@@ -160,6 +167,11 @@ G4OpticalPhysicsMessenger::G4OpticalPhysicsMessenger(
|
||||
fSetWLSTimeProfileCmd->SetParameterName("WLSTimeProfile", false);
|
||||
fSetWLSTimeProfileCmd->SetCandidates("delta exponential");
|
||||
fSetWLSTimeProfileCmd->AvailableForStates(G4State_PreInit);
|
||||
|
||||
fSetInvokeSDCmd = new G4UIcmdWithABool("/process/optical/defaults/boundary/setInvokeSD", this);
|
||||
fSetInvokeSDCmd->SetGuidance("Set option for calling InvokeSD in G4OpBoundaryProcess");
|
||||
fSetInvokeSDCmd->SetParameterName("InvokeSD", false);
|
||||
fSetInvokeSDCmd->AvailableForStates(G4State_PreInit);
|
||||
}
|
||||
|
||||
G4OpticalPhysicsMessenger::~G4OpticalPhysicsMessenger()
|
||||
@@ -174,8 +186,11 @@ G4OpticalPhysicsMessenger::~G4OpticalPhysicsMessenger()
|
||||
delete fSetCerenkovMaxBetaChangeCmd;
|
||||
delete fSetScintillationYieldFactorCmd;
|
||||
delete fSetScintillationByParticleTypeCmd;
|
||||
delete fSetScintillationTrackInfoCmd;
|
||||
delete fSetWLSTimeProfileCmd;
|
||||
delete fSetTrackSecondariesFirstCmd;
|
||||
delete fSetFiniteRiseTimeCmd;
|
||||
delete fSetInvokeSDCmd;
|
||||
}
|
||||
|
||||
#include <iostream>
|
||||
@@ -186,7 +201,7 @@ void G4OpticalPhysicsMessenger::SetNewValue(G4UIcommand* command,
|
||||
if (command == fActivateProcessCmd) {
|
||||
std::istringstream is(newValue.data());
|
||||
G4String pn;
|
||||
G4int flag;
|
||||
G4String flag;
|
||||
is >> pn >> flag;
|
||||
if ( pn == "Cerenkov" ) {
|
||||
fSelectedProcessIndex = kCerenkov;
|
||||
@@ -205,15 +220,16 @@ void G4OpticalPhysicsMessenger::SetNewValue(G4UIcommand* command,
|
||||
} else {
|
||||
G4ExceptionDescription msg;
|
||||
msg << "Not allowed process name: "<<pn<<" (UI: "<<newValue<<")";
|
||||
G4Exception("G4OpticalPhysicsMessenger::SetNewValue(...)","Optical001",FatalException,pn);
|
||||
G4Exception("G4OpticalPhysicsMessenger::SetNewValue(...)","Optical001",FatalException,msg);
|
||||
}
|
||||
fOpticalPhysics->Configure(fSelectedProcessIndex,flag);
|
||||
G4bool value = G4UIcommand::ConvertToBool(flag);
|
||||
fOpticalPhysics->Configure(fSelectedProcessIndex,value);
|
||||
}
|
||||
else if (command == fSetTrackSecondariesFirstCmd )
|
||||
{
|
||||
std::istringstream is(newValue.data());
|
||||
G4String pn;
|
||||
G4int flag;
|
||||
G4String flag;
|
||||
is >> pn >> flag;
|
||||
if ( pn == "Cerenkov" ) {
|
||||
fSelectedProcessIndex = kCerenkov;
|
||||
@@ -232,9 +248,10 @@ void G4OpticalPhysicsMessenger::SetNewValue(G4UIcommand* command,
|
||||
} else {
|
||||
G4ExceptionDescription msg;
|
||||
msg << "Not allowed process name: "<<pn<<" (UI: "<<newValue<<")";
|
||||
G4Exception("G4OpticalPhysicsMessenger::SetNewValue(...)","Optical001",FatalException,pn);
|
||||
G4Exception("G4OpticalPhysicsMessenger::SetNewValue(...)","Optical001",FatalException,msg);
|
||||
}
|
||||
fOpticalPhysics->SetTrackSecondariesFirst(fSelectedProcessIndex,flag);
|
||||
G4bool value = G4UIcommand::ConvertToBool(flag);
|
||||
fOpticalPhysics->SetTrackSecondariesFirst(fSelectedProcessIndex,value);
|
||||
}
|
||||
else if (command == fSetOpProcessVerboseCmd) {
|
||||
fOpticalPhysics->SetVerboseLevel(fSetOpProcessVerboseCmd->GetNewIntValue(newValue));
|
||||
@@ -259,12 +276,21 @@ void G4OpticalPhysicsMessenger::SetNewValue(G4UIcommand* command,
|
||||
->SetScintillationByParticleType(
|
||||
fSetScintillationByParticleTypeCmd->GetNewBoolValue(newValue));
|
||||
}
|
||||
else if (command == fSetScintillationTrackInfoCmd) {
|
||||
fOpticalPhysics
|
||||
->SetScintillationTrackInfo(
|
||||
fSetScintillationTrackInfoCmd->GetNewBoolValue(newValue));
|
||||
}
|
||||
else if (command == fSetFiniteRiseTimeCmd) {
|
||||
fOpticalPhysics
|
||||
->SetFiniteRiseTime(
|
||||
fSetFiniteRiseTimeCmd->GetNewBoolValue(newValue));
|
||||
}
|
||||
else if (command == fSetWLSTimeProfileCmd) {
|
||||
fOpticalPhysics->SetWLSTimeProfile(newValue);
|
||||
fOpticalPhysics->SetWLSTimeProfile(newValue);
|
||||
}
|
||||
else if (command == fSetInvokeSDCmd) {
|
||||
fOpticalPhysics
|
||||
->SetInvokeSD(fSetInvokeSDCmd->GetNewBoolValue(newValue));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user