Import Geant4 10.6.0 source tree
This commit is contained in:
@@ -50,13 +50,8 @@
|
||||
#include "G4UImanager.hh"
|
||||
#include "Randomize.hh"
|
||||
|
||||
#ifdef G4VIS_USE
|
||||
#include "G4VisExecutive.hh"
|
||||
#endif
|
||||
|
||||
#ifdef G4UI_USE
|
||||
#include "G4UIExecutive.hh"
|
||||
#endif
|
||||
|
||||
#include "DMXAnalysisManager.hh"
|
||||
#include "DMXDetectorConstruction.hh"
|
||||
@@ -81,12 +76,9 @@ int main(int argc,char** argv) {
|
||||
runManager->SetUserInitialization(new DMXPhysicsList);
|
||||
runManager->SetUserInitialization(new DMXActionInitializer());
|
||||
|
||||
#ifdef G4VIS_USE
|
||||
// visualization manager
|
||||
G4VisManager* visManager = new G4VisExecutive;
|
||||
visManager->Initialize();
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef DMXENV_GPS_USE
|
||||
G4cout << " Using GPS and not DMX gun " << G4endl;
|
||||
@@ -104,14 +96,10 @@ int main(int argc,char** argv) {
|
||||
// Define UI session for interactive mode.
|
||||
if(argc == 1)
|
||||
{
|
||||
#ifdef G4UI_USE
|
||||
G4UIExecutive* ui = new G4UIExecutive(argc, argv);
|
||||
#ifdef G4VIS_USE
|
||||
UImanager->ApplyCommand("/control/execute initInter.mac");
|
||||
#endif
|
||||
ui->SessionStart();
|
||||
delete ui;
|
||||
#endif
|
||||
}
|
||||
// Batch mode
|
||||
else
|
||||
@@ -129,9 +117,8 @@ int main(int argc,char** argv) {
|
||||
// Complete clean-up
|
||||
delete G4AnalysisManager::Instance();
|
||||
|
||||
#ifdef G4VIS_USE
|
||||
if(visManager) delete visManager;
|
||||
#endif
|
||||
|
||||
delete runManager;
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
|
||||
Category History file
|
||||
---------------------
|
||||
09.11.2019 - V. Ivanchenko (DMX-V10-05-03)
|
||||
DMXPhysicsList : clean-up both EM, hadronic and radioactive decay
|
||||
|
||||
30.08.2019 - S. Guatelli (DMX-V10-05-02)
|
||||
G4VIS_USE deleted
|
||||
|
||||
10.05.2019 - V. Ivanchenko (DMX-V10-05-01)
|
||||
DMXPhysicsList : add Glauber-Gribov cross section for all elastic
|
||||
|
||||
@@ -68,6 +68,139 @@
|
||||
#include "G4ios.hh"
|
||||
#include "G4UserLimits.hh"
|
||||
|
||||
#include "G4MesonConstructor.hh"
|
||||
#include "G4BaryonConstructor.hh"
|
||||
#include "G4IonConstructor.hh"
|
||||
#include "G4ShortLivedConstructor.hh"
|
||||
|
||||
#include "DMXMaxTimeCuts.hh"
|
||||
#include "DMXMinEkineCuts.hh"
|
||||
#include "G4StepLimiter.hh"
|
||||
|
||||
// gamma
|
||||
#include "G4PhotoElectricEffect.hh"
|
||||
#include "G4LivermorePhotoElectricModel.hh"
|
||||
|
||||
#include "G4ComptonScattering.hh"
|
||||
#include "G4LivermoreComptonModel.hh"
|
||||
|
||||
#include "G4GammaConversion.hh"
|
||||
#include "G4BetheHeitler5DModel.hh"
|
||||
|
||||
#include "G4RayleighScattering.hh"
|
||||
#include "G4LivermoreRayleighModel.hh"
|
||||
|
||||
// e-
|
||||
#include "G4eMultipleScattering.hh"
|
||||
|
||||
#include "G4eIonisation.hh"
|
||||
#include "G4LivermoreIonisationModel.hh"
|
||||
|
||||
#include "G4eBremsstrahlung.hh"
|
||||
#include "G4UniversalFluctuation.hh"
|
||||
|
||||
// e+
|
||||
#include "G4eIonisation.hh"
|
||||
#include "G4eBremsstrahlung.hh"
|
||||
#include "G4eplusAnnihilation.hh"
|
||||
|
||||
// alpha and GenericIon and deuterons, triton, He3:
|
||||
//muon:
|
||||
#include "G4MuIonisation.hh"
|
||||
#include "G4MuBremsstrahlung.hh"
|
||||
#include "G4MuPairProduction.hh"
|
||||
#include "G4MuMultipleScattering.hh"
|
||||
#include "G4MuonMinusCapture.hh"
|
||||
|
||||
//OTHERS:
|
||||
#include "G4hIonisation.hh"
|
||||
#include "G4hMultipleScattering.hh"
|
||||
#include "G4hBremsstrahlung.hh"
|
||||
#include "G4ionIonisation.hh"
|
||||
#include "G4IonParametrisedLossModel.hh"
|
||||
|
||||
//em process options to allow msc step-limitation to be switched off
|
||||
#include "G4EmParameters.hh"
|
||||
#include "G4VAtomDeexcitation.hh"
|
||||
#include "G4UAtomicDeexcitation.hh"
|
||||
#include "G4LossTableManager.hh"
|
||||
|
||||
#include "G4Scintillation.hh"
|
||||
#include "G4OpAbsorption.hh"
|
||||
#include "G4OpBoundaryProcess.hh"
|
||||
|
||||
// Elastic processes:
|
||||
#include "G4HadronElasticProcess.hh"
|
||||
#include "G4ChipsElasticModel.hh"
|
||||
#include "G4ElasticHadrNucleusHE.hh"
|
||||
|
||||
// Inelastic processes:
|
||||
#include "G4PionPlusInelasticProcess.hh"
|
||||
#include "G4PionMinusInelasticProcess.hh"
|
||||
#include "G4KaonPlusInelasticProcess.hh"
|
||||
#include "G4KaonZeroSInelasticProcess.hh"
|
||||
#include "G4KaonZeroLInelasticProcess.hh"
|
||||
#include "G4KaonMinusInelasticProcess.hh"
|
||||
#include "G4ProtonInelasticProcess.hh"
|
||||
#include "G4AntiProtonInelasticProcess.hh"
|
||||
#include "G4NeutronInelasticProcess.hh"
|
||||
#include "G4AntiNeutronInelasticProcess.hh"
|
||||
#include "G4DeuteronInelasticProcess.hh"
|
||||
#include "G4TritonInelasticProcess.hh"
|
||||
#include "G4AlphaInelasticProcess.hh"
|
||||
|
||||
// High energy FTFP model and Bertini cascade
|
||||
#include "G4FTFModel.hh"
|
||||
#include "G4LundStringFragmentation.hh"
|
||||
#include "G4ExcitedStringDecay.hh"
|
||||
#include "G4PreCompoundModel.hh"
|
||||
#include "G4GeneratorPrecompoundInterface.hh"
|
||||
#include "G4TheoFSGenerator.hh"
|
||||
#include "G4CascadeInterface.hh"
|
||||
|
||||
// Cross sections
|
||||
#include "G4VCrossSectionDataSet.hh"
|
||||
#include "G4CrossSectionDataSetRegistry.hh"
|
||||
|
||||
#include "G4CrossSectionElastic.hh"
|
||||
#include "G4CrossSectionInelastic.hh"
|
||||
#include "G4BGGPionElasticXS.hh"
|
||||
#include "G4BGGPionInelasticXS.hh"
|
||||
#include "G4AntiNuclElastic.hh"
|
||||
|
||||
#include "G4CrossSectionInelastic.hh"
|
||||
#include "G4CrossSectionPairGG.hh"
|
||||
#include "G4BGGNucleonInelasticXS.hh"
|
||||
#include "G4BGGNucleonElasticXS.hh"
|
||||
#include "G4NeutronInelasticXS.hh"
|
||||
#include "G4NeutronElasticXS.hh"
|
||||
#include "G4ComponentAntiNuclNuclearXS.hh"
|
||||
#include "G4ComponentGGNuclNuclXsc.hh"
|
||||
#include "G4ComponentGGHadronNucleusXsc.hh"
|
||||
|
||||
#include "G4HadronElastic.hh"
|
||||
#include "G4HadronCaptureProcess.hh"
|
||||
|
||||
// Neutron high-precision models: <20 MeV
|
||||
#include "G4ParticleHPElastic.hh"
|
||||
#include "G4ParticleHPElasticData.hh"
|
||||
#include "G4ParticleHPCapture.hh"
|
||||
#include "G4ParticleHPCaptureData.hh"
|
||||
#include "G4ParticleHPInelastic.hh"
|
||||
#include "G4ParticleHPInelasticData.hh"
|
||||
|
||||
// Stopping processes
|
||||
#include "G4PiMinusAbsorptionBertini.hh"
|
||||
#include "G4KaonMinusAbsorptionBertini.hh"
|
||||
#include "G4AntiProtonAbsorptionFritiof.hh"
|
||||
#include "G4HadronicParameters.hh"
|
||||
|
||||
#include "G4Decay.hh"
|
||||
#include "G4RadioactiveDecayBase.hh"
|
||||
#include "G4PhysicsListHelper.hh"
|
||||
#include "G4NuclideTable.hh"
|
||||
#include "G4NuclearLevelData.hh"
|
||||
|
||||
// Constructor /////////////////////////////////////////////////////////////
|
||||
DMXPhysicsList::DMXPhysicsList() : G4VUserPhysicsList()
|
||||
{
|
||||
@@ -80,19 +213,31 @@ DMXPhysicsList::DMXPhysicsList() : G4VUserPhysicsList()
|
||||
VerboseLevel = 1;
|
||||
OpVerbLevel = 0;
|
||||
|
||||
//set a finer grid of the physic tables in order to improve precision
|
||||
//former LowEnergy models have 200 bins up to 100 GeV
|
||||
G4EmParameters* param = G4EmParameters::Instance();
|
||||
param->SetMaxEnergy(100*GeV);
|
||||
param->SetNumberOfBinsPerDecade(20);
|
||||
param->SetMscStepLimitType(fMinimal);
|
||||
param->SetFluo(true);
|
||||
param->SetPixe(true);
|
||||
param->SetAuger(true);
|
||||
|
||||
G4EmParameters::Instance()->AddPhysics("World","G4RadioactiveDecay");
|
||||
G4DeexPrecoParameters* deex = G4NuclearLevelData::GetInstance()->GetParameters();
|
||||
deex->SetStoreICLevelData(true);
|
||||
deex->SetMaxLifeTime(G4NuclideTable::GetInstance()->GetThresholdOfHalfLife()
|
||||
/std::log(2.));
|
||||
SetVerboseLevel(VerboseLevel);
|
||||
}
|
||||
|
||||
|
||||
// Destructor //////////////////////////////////////////////////////////////
|
||||
DMXPhysicsList::~DMXPhysicsList()
|
||||
{;}
|
||||
|
||||
|
||||
// Construct Particles /////////////////////////////////////////////////////
|
||||
void DMXPhysicsList::ConstructParticle()
|
||||
{
|
||||
|
||||
// In this method, static member functions should be called
|
||||
// for all particles which you want to use.
|
||||
// This ensures that objects of these particle types will be
|
||||
@@ -102,10 +247,8 @@ void DMXPhysicsList::ConstructParticle()
|
||||
ConstructMyLeptons();
|
||||
ConstructMyHadrons();
|
||||
ConstructMyShortLiveds();
|
||||
|
||||
}
|
||||
|
||||
|
||||
// construct Bosons://///////////////////////////////////////////////////
|
||||
void DMXPhysicsList::ConstructMyBosons()
|
||||
{
|
||||
@@ -121,7 +264,6 @@ void DMXPhysicsList::ConstructMyBosons()
|
||||
|
||||
}
|
||||
|
||||
|
||||
// construct Leptons://///////////////////////////////////////////////////
|
||||
void DMXPhysicsList::ConstructMyLeptons()
|
||||
{
|
||||
@@ -137,11 +279,6 @@ void DMXPhysicsList::ConstructMyLeptons()
|
||||
G4AntiNeutrinoMu::AntiNeutrinoMuDefinition();
|
||||
}
|
||||
|
||||
|
||||
#include "G4MesonConstructor.hh"
|
||||
#include "G4BaryonConstructor.hh"
|
||||
#include "G4IonConstructor.hh"
|
||||
|
||||
// construct Hadrons://///////////////////////////////////////////////////
|
||||
void DMXPhysicsList::ConstructMyHadrons()
|
||||
{
|
||||
@@ -156,11 +293,8 @@ void DMXPhysicsList::ConstructMyHadrons()
|
||||
// ions
|
||||
G4IonConstructor iConstructor;
|
||||
iConstructor.ConstructParticle();
|
||||
|
||||
}
|
||||
|
||||
#include "G4ShortLivedConstructor.hh"
|
||||
|
||||
// construct Shortliveds://///////////////////////////////////////////////////
|
||||
void DMXPhysicsList::ConstructMyShortLiveds()
|
||||
{
|
||||
@@ -171,7 +305,6 @@ void DMXPhysicsList::ConstructMyShortLiveds()
|
||||
// Construct Processes //////////////////////////////////////////////////////
|
||||
void DMXPhysicsList::ConstructProcess()
|
||||
{
|
||||
|
||||
AddTransportation();
|
||||
|
||||
ConstructEM();
|
||||
@@ -181,15 +314,9 @@ void DMXPhysicsList::ConstructProcess()
|
||||
ConstructHad();
|
||||
|
||||
ConstructGeneral();
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Transportation ///////////////////////////////////////////////////////////
|
||||
#include "DMXMaxTimeCuts.hh"
|
||||
#include "DMXMinEkineCuts.hh"
|
||||
#include "G4StepLimiter.hh"
|
||||
|
||||
void DMXPhysicsList::AddTransportation() {
|
||||
|
||||
G4VUserPhysicsList::AddTransportation();
|
||||
@@ -207,82 +334,16 @@ void DMXPhysicsList::AddTransportation() {
|
||||
pmanager->AddDiscreteProcess(new DMXMinEkineCuts());
|
||||
|
||||
// Step limit applied to all particles:
|
||||
pmanager->AddProcess(new G4StepLimiter, -1,-1,1);
|
||||
|
||||
pmanager->AddDiscreteProcess(new G4StepLimiter);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Electromagnetic Processes ////////////////////////////////////////////////
|
||||
// all charged particles
|
||||
|
||||
// gamma
|
||||
#include "G4PhotoElectricEffect.hh"
|
||||
#include "G4LivermorePhotoElectricModel.hh"
|
||||
|
||||
#include "G4ComptonScattering.hh"
|
||||
#include "G4LivermoreComptonModel.hh"
|
||||
|
||||
#include "G4GammaConversion.hh"
|
||||
#include "G4LivermoreGammaConversionModel.hh"
|
||||
|
||||
#include "G4RayleighScattering.hh"
|
||||
#include "G4LivermoreRayleighModel.hh"
|
||||
|
||||
|
||||
// e-
|
||||
#include "G4eMultipleScattering.hh"
|
||||
|
||||
#include "G4eIonisation.hh"
|
||||
#include "G4LivermoreIonisationModel.hh"
|
||||
|
||||
#include "G4eBremsstrahlung.hh"
|
||||
#include "G4LivermoreBremsstrahlungModel.hh"
|
||||
|
||||
|
||||
// e+
|
||||
#include "G4eIonisation.hh"
|
||||
#include "G4eBremsstrahlung.hh"
|
||||
#include "G4eplusAnnihilation.hh"
|
||||
|
||||
|
||||
// alpha and GenericIon and deuterons, triton, He3:
|
||||
|
||||
//muon:
|
||||
#include "G4MuIonisation.hh"
|
||||
#include "G4MuBremsstrahlung.hh"
|
||||
#include "G4MuPairProduction.hh"
|
||||
#include "G4MuonMinusCapture.hh"
|
||||
|
||||
//OTHERS:
|
||||
#include "G4hIonisation.hh"
|
||||
#include "G4hMultipleScattering.hh"
|
||||
#include "G4hBremsstrahlung.hh"
|
||||
#include "G4ionIonisation.hh"
|
||||
#include "G4IonParametrisedLossModel.hh"
|
||||
|
||||
//em process options to allow msc step-limitation to be switched off
|
||||
#include "G4EmParameters.hh"
|
||||
#include "G4VAtomDeexcitation.hh"
|
||||
#include "G4UAtomicDeexcitation.hh"
|
||||
#include "G4LossTableManager.hh"
|
||||
|
||||
void DMXPhysicsList::ConstructEM() {
|
||||
|
||||
//set a finer grid of the physic tables in order to improve precision
|
||||
//former LowEnergy models have 200 bins up to 100 GeV
|
||||
G4EmParameters* param = G4EmParameters::Instance();
|
||||
param->SetMaxEnergy(100*GeV);
|
||||
param->SetNumberOfBinsPerDecade(20);
|
||||
param->SetMscStepLimitType(fMinimal);
|
||||
param->SetFluo(true);
|
||||
param->SetPixe(true);
|
||||
param->SetAuger(true);
|
||||
G4LossTableManager* man = G4LossTableManager::Instance();
|
||||
G4VAtomDeexcitation* ad = man->AtomDeexcitation();
|
||||
if(!ad) {
|
||||
man->SetAtomDeexcitation(new G4UAtomicDeexcitation());
|
||||
}
|
||||
man->SetAtomDeexcitation(new G4UAtomicDeexcitation());
|
||||
|
||||
auto particleIterator=GetParticleIterator();
|
||||
particleIterator->reset();
|
||||
@@ -308,7 +369,7 @@ void DMXPhysicsList::ConstructEM() {
|
||||
pmanager->AddDiscreteProcess(theComptonScattering);
|
||||
|
||||
G4GammaConversion* theGammaConversion = new G4GammaConversion();
|
||||
theGammaConversion->SetEmModel(new G4LivermoreGammaConversionModel());
|
||||
theGammaConversion->SetEmModel(new G4BetheHeitler5DModel());
|
||||
pmanager->AddDiscreteProcess(theGammaConversion);
|
||||
|
||||
}
|
||||
@@ -323,13 +384,14 @@ void DMXPhysicsList::ConstructEM() {
|
||||
|
||||
// Ionisation
|
||||
G4eIonisation* eIonisation = new G4eIonisation();
|
||||
eIonisation->SetEmModel(new G4LivermoreIonisationModel());
|
||||
G4VEmModel* theIoniLiv = new G4LivermoreIonisationModel();
|
||||
theIoniLiv->SetHighEnergyLimit(0.1*MeV);
|
||||
eIonisation->AddEmModel(0, theIoniLiv, new G4UniversalFluctuation() );
|
||||
eIonisation->SetStepFunction(0.2, 100*um); //improved precision in tracking
|
||||
pmanager->AddProcess(eIonisation,-1, 2, 2);
|
||||
|
||||
// Bremsstrahlung
|
||||
G4eBremsstrahlung* eBremsstrahlung = new G4eBremsstrahlung();
|
||||
eBremsstrahlung->SetEmModel(new G4LivermoreBremsstrahlungModel());
|
||||
pmanager->AddProcess(eBremsstrahlung, -1,-3, 3);
|
||||
}
|
||||
else if (particleName == "e+")
|
||||
@@ -354,10 +416,10 @@ void DMXPhysicsList::ConstructEM() {
|
||||
particleName == "mu-" )
|
||||
{
|
||||
//muon
|
||||
pmanager->AddProcess(new G4eMultipleScattering, -1, 1, 1);
|
||||
pmanager->AddProcess(new G4MuIonisation(), -1, 2, 2);
|
||||
pmanager->AddProcess(new G4MuBremsstrahlung(), -1,-1, 3);
|
||||
pmanager->AddProcess(new G4MuPairProduction(), -1,-1, 4);
|
||||
pmanager->AddProcess(new G4MuMultipleScattering, -1, 1,-1);
|
||||
pmanager->AddProcess(new G4MuIonisation(), -1, 2, 1);
|
||||
pmanager->AddProcess(new G4MuBremsstrahlung(), -1,-1, 2);
|
||||
pmanager->AddProcess(new G4MuPairProduction(), -1,-1, 3);
|
||||
if( particleName == "mu-" )
|
||||
pmanager->AddProcess(new G4MuonMinusCapture(), 0,-1,-1);
|
||||
}
|
||||
@@ -366,15 +428,15 @@ void DMXPhysicsList::ConstructEM() {
|
||||
particleName == "pi-")
|
||||
{
|
||||
//multiple scattering
|
||||
pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
|
||||
pmanager->AddProcess(new G4hMultipleScattering, -1, 1, -1);
|
||||
|
||||
//ionisation
|
||||
G4hIonisation* hIonisation = new G4hIonisation();
|
||||
hIonisation->SetStepFunction(0.2, 50*um);
|
||||
pmanager->AddProcess(hIonisation, -1, 2, 2);
|
||||
pmanager->AddProcess(hIonisation, -1, 2, 1);
|
||||
|
||||
//bremmstrahlung
|
||||
pmanager->AddProcess(new G4hBremsstrahlung, -1,-3, 3);
|
||||
pmanager->AddProcess(new G4hBremsstrahlung, -1,-3, 2);
|
||||
}
|
||||
else if(particleName == "alpha" ||
|
||||
particleName == "deuteron" ||
|
||||
@@ -382,12 +444,12 @@ void DMXPhysicsList::ConstructEM() {
|
||||
particleName == "He3")
|
||||
{
|
||||
//multiple scattering
|
||||
pmanager->AddProcess(new G4hMultipleScattering,-1,1,1);
|
||||
pmanager->AddProcess(new G4hMultipleScattering,-1,1,-1);
|
||||
|
||||
//ionisation
|
||||
G4ionIonisation* ionIoni = new G4ionIonisation();
|
||||
ionIoni->SetStepFunction(0.1, 20*um);
|
||||
pmanager->AddProcess(ionIoni, -1, 2, 2);
|
||||
pmanager->AddProcess(ionIoni, -1, 2,-2);
|
||||
}
|
||||
else if (particleName == "GenericIon")
|
||||
{
|
||||
@@ -396,13 +458,13 @@ void DMXPhysicsList::ConstructEM() {
|
||||
// genericIon:
|
||||
|
||||
//multiple scattering
|
||||
pmanager->AddProcess(new G4hMultipleScattering,-1,1,1);
|
||||
pmanager->AddProcess(new G4hMultipleScattering,-1,1,-1);
|
||||
|
||||
//ionisation
|
||||
G4ionIonisation* ionIoni = new G4ionIonisation();
|
||||
ionIoni->SetEmModel(new G4IonParametrisedLossModel());
|
||||
ionIoni->SetStepFunction(0.1, 20*um);
|
||||
pmanager->AddProcess(ionIoni, -1, 2, 2);
|
||||
pmanager->AddProcess(ionIoni, -1, 2, 1);
|
||||
}
|
||||
|
||||
else if ((!particle->IsShortLived()) &&
|
||||
@@ -414,21 +476,15 @@ void DMXPhysicsList::ConstructEM() {
|
||||
G4hIonisation* ahadronIon = new G4hIonisation();
|
||||
|
||||
//multiple scattering
|
||||
pmanager->AddProcess(aMultipleScattering,-1,1,1);
|
||||
pmanager->AddProcess(aMultipleScattering,-1,1,-1);
|
||||
|
||||
//ionisation
|
||||
pmanager->AddProcess(ahadronIon, -1,2,2);
|
||||
pmanager->AddProcess(ahadronIon, -1,2,1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Optical Processes ////////////////////////////////////////////////////////
|
||||
#include "G4Scintillation.hh"
|
||||
#include "G4OpAbsorption.hh"
|
||||
//#include "G4OpRayleigh.hh"
|
||||
#include "G4OpBoundaryProcess.hh"
|
||||
|
||||
void DMXPhysicsList::ConstructOp()
|
||||
{
|
||||
// default scintillation process
|
||||
@@ -499,92 +555,22 @@ void DMXPhysicsList::ConstructOp()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Hadronic processes ////////////////////////////////////////////////////////
|
||||
|
||||
// Elastic processes:
|
||||
#include "G4HadronElasticProcess.hh"
|
||||
#include "G4ChipsElasticModel.hh"
|
||||
#include "G4ElasticHadrNucleusHE.hh"
|
||||
|
||||
// Inelastic processes:
|
||||
#include "G4PionPlusInelasticProcess.hh"
|
||||
#include "G4PionMinusInelasticProcess.hh"
|
||||
#include "G4KaonPlusInelasticProcess.hh"
|
||||
#include "G4KaonZeroSInelasticProcess.hh"
|
||||
#include "G4KaonZeroLInelasticProcess.hh"
|
||||
#include "G4KaonMinusInelasticProcess.hh"
|
||||
#include "G4ProtonInelasticProcess.hh"
|
||||
#include "G4AntiProtonInelasticProcess.hh"
|
||||
#include "G4NeutronInelasticProcess.hh"
|
||||
#include "G4AntiNeutronInelasticProcess.hh"
|
||||
#include "G4DeuteronInelasticProcess.hh"
|
||||
#include "G4TritonInelasticProcess.hh"
|
||||
#include "G4AlphaInelasticProcess.hh"
|
||||
|
||||
// High energy FTFP model and Bertini cascade
|
||||
#include "G4FTFModel.hh"
|
||||
#include "G4LundStringFragmentation.hh"
|
||||
#include "G4ExcitedStringDecay.hh"
|
||||
#include "G4PreCompoundModel.hh"
|
||||
#include "G4GeneratorPrecompoundInterface.hh"
|
||||
#include "G4TheoFSGenerator.hh"
|
||||
#include "G4CascadeInterface.hh"
|
||||
|
||||
// Cross sections
|
||||
#include "G4VCrossSectionDataSet.hh"
|
||||
#include "G4CrossSectionDataSetRegistry.hh"
|
||||
|
||||
#include "G4CrossSectionElastic.hh"
|
||||
#include "G4BGGPionElasticXS.hh"
|
||||
#include "G4AntiNuclElastic.hh"
|
||||
|
||||
#include "G4CrossSectionInelastic.hh"
|
||||
#include "G4PiNuclearCrossSection.hh"
|
||||
#include "G4CrossSectionPairGG.hh"
|
||||
#include "G4BGGNucleonInelasticXS.hh"
|
||||
#include "G4ComponentAntiNuclNuclearXS.hh"
|
||||
#include "G4ComponentGGNuclNuclXsc.hh"
|
||||
#include "G4ComponentGGHadronNucleusXsc.hh"
|
||||
|
||||
#include "G4HadronElastic.hh"
|
||||
#include "G4HadronCaptureProcess.hh"
|
||||
|
||||
// Neutron high-precision models: <20 MeV
|
||||
#include "G4ParticleHPElastic.hh"
|
||||
#include "G4ParticleHPElasticData.hh"
|
||||
#include "G4ParticleHPCapture.hh"
|
||||
#include "G4ParticleHPCaptureData.hh"
|
||||
#include "G4ParticleHPInelastic.hh"
|
||||
#include "G4ParticleHPInelasticData.hh"
|
||||
|
||||
// Stopping processes
|
||||
#include "G4PiMinusAbsorptionBertini.hh"
|
||||
#include "G4KaonMinusAbsorptionBertini.hh"
|
||||
#include "G4AntiProtonAbsorptionFritiof.hh"
|
||||
#include "G4HadronicParameters.hh"
|
||||
|
||||
|
||||
void DMXPhysicsList::ConstructHad()
|
||||
{
|
||||
//Elastic models
|
||||
const G4double elastic_elimitPi = 1.0*GeV;
|
||||
|
||||
G4HadronElastic* elastic_lhep0 = new G4HadronElastic();
|
||||
G4HadronElastic* elastic_lhep1 = new G4HadronElastic();
|
||||
elastic_lhep1->SetMaxEnergy( elastic_elimitPi );
|
||||
G4ChipsElasticModel* elastic_chip = new G4ChipsElasticModel();
|
||||
G4ElasticHadrNucleusHE* elastic_he = new G4ElasticHadrNucleusHE();
|
||||
elastic_he->SetMinEnergy( elastic_elimitPi );
|
||||
|
||||
|
||||
// Inelastic scattering
|
||||
const G4double theFTFMin0 = 0.0*GeV;
|
||||
const G4double theFTFMin1 = 4.0*GeV;
|
||||
const G4double theFTFMin1 = 3.0*GeV;
|
||||
const G4double theFTFMax = G4HadronicParameters::Instance()->GetMaxEnergy();
|
||||
const G4double theBERTMin0 = 0.0*GeV;
|
||||
const G4double theBERTMin1 = 19.0*MeV;
|
||||
const G4double theBERTMax = 5.0*GeV;
|
||||
const G4double theBERTMax = 6.0*GeV;
|
||||
const G4double theHPMin = 0.0*GeV;
|
||||
const G4double theHPMax = 20.0*MeV;
|
||||
|
||||
@@ -614,13 +600,13 @@ void DMXPhysicsList::ConstructHad()
|
||||
theBERTModel1->SetMinEnergy( theBERTMin1 );
|
||||
theBERTModel1->SetMaxEnergy( theBERTMax );
|
||||
|
||||
G4VCrossSectionDataSet * thePiData = new G4CrossSectionPairGG( new G4PiNuclearCrossSection, 91*GeV );
|
||||
G4VCrossSectionDataSet * theAntiNucleonData = new G4CrossSectionInelastic( new G4ComponentAntiNuclNuclearXS );
|
||||
G4ComponentGGNuclNuclXsc * ggNuclNuclXsec = new G4ComponentGGNuclNuclXsc();
|
||||
G4VCrossSectionDataSet * theGGNuclNuclData = new G4CrossSectionInelastic(ggNuclNuclXsec);
|
||||
G4VCrossSectionDataSet * theGGNNEl = new G4CrossSectionElastic(ggNuclNuclXsec);
|
||||
G4ComponentGGHadronNucleusXsc * ggHNXsec = new G4ComponentGGHadronNucleusXsc();
|
||||
G4VCrossSectionDataSet * theGGHNEl = new G4CrossSectionElastic(ggHNXsec);
|
||||
G4VCrossSectionDataSet * theGGHNInel = new G4CrossSectionInelastic(ggHNXsec);
|
||||
|
||||
auto particleIterator=GetParticleIterator();
|
||||
particleIterator->reset();
|
||||
@@ -635,13 +621,12 @@ void DMXPhysicsList::ConstructHad()
|
||||
// Elastic scattering
|
||||
G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
|
||||
theElasticProcess->AddDataSet( new G4BGGPionElasticXS( particle ) );
|
||||
theElasticProcess->RegisterMe( elastic_lhep1 );
|
||||
theElasticProcess->RegisterMe( elastic_he );
|
||||
pmanager->AddDiscreteProcess( theElasticProcess );
|
||||
//Inelastic scattering
|
||||
G4PionPlusInelasticProcess* theInelasticProcess =
|
||||
new G4PionPlusInelasticProcess("inelastic");
|
||||
theInelasticProcess->AddDataSet( thePiData );
|
||||
theInelasticProcess->AddDataSet( new G4BGGPionElasticXS( particle ) );
|
||||
theInelasticProcess->RegisterMe( theFTFModel1 );
|
||||
theInelasticProcess->RegisterMe( theBERTModel0 );
|
||||
pmanager->AddDiscreteProcess( theInelasticProcess );
|
||||
@@ -652,20 +637,18 @@ void DMXPhysicsList::ConstructHad()
|
||||
// Elastic scattering
|
||||
G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
|
||||
theElasticProcess->AddDataSet( new G4BGGPionElasticXS( particle ) );
|
||||
theElasticProcess->RegisterMe( elastic_lhep1 );
|
||||
theElasticProcess->RegisterMe( elastic_he );
|
||||
pmanager->AddDiscreteProcess( theElasticProcess );
|
||||
//Inelastic scattering
|
||||
G4PionMinusInelasticProcess* theInelasticProcess =
|
||||
new G4PionMinusInelasticProcess("inelastic");
|
||||
theInelasticProcess->AddDataSet( thePiData );
|
||||
theInelasticProcess->AddDataSet( new G4BGGPionInelasticXS( particle ) );
|
||||
theInelasticProcess->RegisterMe( theFTFModel1 );
|
||||
theInelasticProcess->RegisterMe( theBERTModel0 );
|
||||
pmanager->AddDiscreteProcess( theInelasticProcess );
|
||||
//Absorption
|
||||
pmanager->AddRestProcess(new G4PiMinusAbsorptionBertini, ordDefault);
|
||||
}
|
||||
|
||||
else if (particleName == "kaon+")
|
||||
{
|
||||
// Elastic scattering
|
||||
@@ -676,13 +659,11 @@ void DMXPhysicsList::ConstructHad()
|
||||
// Inelastic scattering
|
||||
G4KaonPlusInelasticProcess* theInelasticProcess =
|
||||
new G4KaonPlusInelasticProcess("inelastic");
|
||||
theInelasticProcess->AddDataSet( G4CrossSectionDataSetRegistry::Instance()->
|
||||
GetCrossSectionDataSet(G4ChipsKaonPlusInelasticXS::Default_Name()));
|
||||
theInelasticProcess->AddDataSet( theGGHNInel );
|
||||
theInelasticProcess->RegisterMe( theFTFModel1 );
|
||||
theInelasticProcess->RegisterMe( theBERTModel0 );
|
||||
pmanager->AddDiscreteProcess( theInelasticProcess );
|
||||
}
|
||||
|
||||
}
|
||||
else if (particleName == "kaon0S")
|
||||
{
|
||||
// Elastic scattering
|
||||
@@ -693,8 +674,7 @@ void DMXPhysicsList::ConstructHad()
|
||||
// Inelastic scattering
|
||||
G4KaonZeroSInelasticProcess* theInelasticProcess =
|
||||
new G4KaonZeroSInelasticProcess("inelastic");
|
||||
theInelasticProcess->AddDataSet( G4CrossSectionDataSetRegistry::Instance()->
|
||||
GetCrossSectionDataSet(G4ChipsKaonZeroInelasticXS::Default_Name()));
|
||||
theInelasticProcess->AddDataSet( theGGHNInel );
|
||||
theInelasticProcess->RegisterMe( theFTFModel1 );
|
||||
theInelasticProcess->RegisterMe( theBERTModel0 );
|
||||
pmanager->AddDiscreteProcess( theInelasticProcess );
|
||||
@@ -710,8 +690,7 @@ void DMXPhysicsList::ConstructHad()
|
||||
// Inelastic scattering
|
||||
G4KaonZeroLInelasticProcess* theInelasticProcess =
|
||||
new G4KaonZeroLInelasticProcess("inelastic");
|
||||
theInelasticProcess->AddDataSet( G4CrossSectionDataSetRegistry::Instance()->
|
||||
GetCrossSectionDataSet(G4ChipsKaonZeroInelasticXS::Default_Name()));
|
||||
theInelasticProcess->AddDataSet( theGGHNInel );
|
||||
theInelasticProcess->RegisterMe( theFTFModel1 );
|
||||
theInelasticProcess->RegisterMe( theBERTModel0 );
|
||||
pmanager->AddDiscreteProcess( theInelasticProcess );
|
||||
@@ -727,8 +706,7 @@ void DMXPhysicsList::ConstructHad()
|
||||
// Inelastic scattering
|
||||
G4KaonMinusInelasticProcess* theInelasticProcess =
|
||||
new G4KaonMinusInelasticProcess("inelastic");
|
||||
theInelasticProcess->AddDataSet( G4CrossSectionDataSetRegistry::Instance()->
|
||||
GetCrossSectionDataSet(G4ChipsKaonMinusInelasticXS::Default_Name()));
|
||||
theInelasticProcess->AddDataSet( theGGHNInel );
|
||||
theInelasticProcess->RegisterMe( theFTFModel1 );
|
||||
theInelasticProcess->RegisterMe( theBERTModel0 );
|
||||
pmanager->AddDiscreteProcess( theInelasticProcess );
|
||||
@@ -739,8 +717,7 @@ void DMXPhysicsList::ConstructHad()
|
||||
{
|
||||
// Elastic scattering
|
||||
G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
|
||||
theElasticProcess->AddDataSet(G4CrossSectionDataSetRegistry::Instance()->
|
||||
GetCrossSectionDataSet(G4ChipsProtonElasticXS::Default_Name()));
|
||||
theElasticProcess->AddDataSet( new G4BGGNucleonElasticXS( G4Proton::Proton() ) );
|
||||
theElasticProcess->RegisterMe( elastic_chip );
|
||||
pmanager->AddDiscreteProcess( theElasticProcess );
|
||||
// Inelastic scattering
|
||||
@@ -774,11 +751,10 @@ void DMXPhysicsList::ConstructHad()
|
||||
// Absorption
|
||||
pmanager->AddRestProcess(new G4AntiProtonAbsorptionFritiof, ordDefault);
|
||||
}
|
||||
|
||||
else if (particleName == "neutron") {
|
||||
// elastic scattering
|
||||
G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
|
||||
theElasticProcess->AddDataSet(G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsNeutronElasticXS::Default_Name()));
|
||||
theElasticProcess->AddDataSet(new G4NeutronElasticXS());
|
||||
G4HadronElastic* elastic_neutronChipsModel = new G4ChipsElasticModel();
|
||||
elastic_neutronChipsModel->SetMinEnergy( 19.0*MeV );
|
||||
theElasticProcess->RegisterMe( elastic_neutronChipsModel );
|
||||
@@ -791,7 +767,7 @@ void DMXPhysicsList::ConstructHad()
|
||||
// inelastic scattering
|
||||
G4NeutronInelasticProcess* theInelasticProcess =
|
||||
new G4NeutronInelasticProcess("inelastic");
|
||||
theInelasticProcess->AddDataSet( new G4BGGNucleonInelasticXS( G4Neutron::Neutron() ) );
|
||||
theInelasticProcess->AddDataSet( new G4NeutronInelasticXS() );
|
||||
theInelasticProcess->RegisterMe( theFTFModel1 );
|
||||
theInelasticProcess->RegisterMe( theBERTModel1 );
|
||||
G4ParticleHPInelastic * theNeutronInelasticHPModel = new G4ParticleHPInelastic;
|
||||
@@ -809,7 +785,6 @@ void DMXPhysicsList::ConstructHad()
|
||||
theCaptureProcess->RegisterMe(theLENeutronCaptureModel);
|
||||
theCaptureProcess->AddDataSet( new G4ParticleHPCaptureData);
|
||||
pmanager->AddDiscreteProcess(theCaptureProcess);
|
||||
|
||||
}
|
||||
else if (particleName == "anti_neutron")
|
||||
{
|
||||
@@ -825,7 +800,6 @@ void DMXPhysicsList::ConstructHad()
|
||||
theInelasticProcess->RegisterMe( theFTFModel0 );
|
||||
pmanager->AddDiscreteProcess( theInelasticProcess );
|
||||
}
|
||||
|
||||
else if (particleName == "deuteron")
|
||||
{
|
||||
// Elastic scattering
|
||||
@@ -841,7 +815,6 @@ void DMXPhysicsList::ConstructHad()
|
||||
theInelasticProcess->RegisterMe( theBERTModel0 );
|
||||
pmanager->AddDiscreteProcess( theInelasticProcess );
|
||||
}
|
||||
|
||||
else if (particleName == "triton")
|
||||
{
|
||||
// Elastic scattering
|
||||
@@ -876,11 +849,6 @@ void DMXPhysicsList::ConstructHad()
|
||||
}
|
||||
|
||||
// Decays ///////////////////////////////////////////////////////////////////
|
||||
#include "G4Decay.hh"
|
||||
#include "G4RadioactiveDecay.hh"
|
||||
#include "G4IonTable.hh"
|
||||
#include "G4Ions.hh"
|
||||
|
||||
void DMXPhysicsList::ConstructGeneral() {
|
||||
|
||||
// Add Decay Process
|
||||
@@ -902,25 +870,17 @@ void DMXPhysicsList::ConstructGeneral() {
|
||||
}
|
||||
|
||||
// Declare radioactive decay to the GenericIon in the IonTable.
|
||||
const G4IonTable *theIonTable =
|
||||
G4ParticleTable::GetParticleTable()->GetIonTable();
|
||||
G4RadioactiveDecay *theRadioactiveDecay = new G4RadioactiveDecay();
|
||||
G4LossTableManager* man = G4LossTableManager::Instance();
|
||||
G4VAtomDeexcitation* ad = man->AtomDeexcitation();
|
||||
if(!ad) {
|
||||
G4EmParameters::Instance()->SetAugerCascade(true);
|
||||
ad = new G4UAtomicDeexcitation();
|
||||
man->SetAtomDeexcitation(ad);
|
||||
ad->InitialiseAtomicDeexcitation();
|
||||
}
|
||||
|
||||
for (G4int i=0; i<theIonTable->Entries(); i++)
|
||||
{
|
||||
G4String particleName = theIonTable->GetParticle(i)->GetParticleName();
|
||||
G4String particleType = theIonTable->GetParticle(i)->GetParticleType();
|
||||
|
||||
if (particleName == "GenericIon")
|
||||
{
|
||||
G4ProcessManager* pmanager =
|
||||
theIonTable->GetParticle(i)->GetProcessManager();
|
||||
pmanager->SetVerboseLevel(VerboseLevel);
|
||||
pmanager ->AddProcess(theRadioactiveDecay);
|
||||
pmanager ->SetProcessOrdering(theRadioactiveDecay, idxPostStep);
|
||||
pmanager ->SetProcessOrdering(theRadioactiveDecay, idxAtRest);
|
||||
}
|
||||
}
|
||||
G4PhysicsListHelper::GetPhysicsListHelper()->
|
||||
RegisterProcess(new G4RadioactiveDecayBase(), G4GenericIon::GenericIon());
|
||||
}
|
||||
|
||||
// Cuts /////////////////////////////////////////////////////////////////////
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user