Import Geant4 10.3.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2016-06-30 14:12:05 +02:00
parent a654a7ab1f
commit 4ec577e5c4
2021 changed files with 100995 additions and 78277 deletions
@@ -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);
}
@@ -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+" ||
@@ -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));
}
}