11 #include <simulation/physicslist/NeutronPhysics.h>
13 #include "G4ProcessManager.hh"
14 #include "G4NeutronInelasticProcess.hh"
15 #include "G4HadronElasticProcess.hh"
16 #include "G4HadronCaptureProcess.hh"
17 #include "G4NeutronKiller.hh"
19 #include "G4CascadeInterface.hh"
20 #include "G4TheoFSGenerator.hh"
21 #include "G4FTFModel.hh"
22 #include "G4ExcitedStringDecay.hh"
23 #include "G4LundStringFragmentation.hh"
24 #include "G4GeneratorPrecompoundInterface.hh"
25 #include "G4ChipsElasticModel.hh"
26 #include "G4NeutronRadCapture.hh"
28 #include "G4BGGNucleonInelasticXS.hh"
29 #include "G4NeutronElasticXS.hh"
30 #include "G4NeutronCaptureXS.hh"
32 #include "G4SystemOfUnits.hh"
35 using namespace Simulation;
38 NeutronPhysics::NeutronPhysics()
39 : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
40 m_fragModel(nullptr), m_preCompoundModel(nullptr)
44 NeutronPhysics::~NeutronPhysics()
60 G4ChipsElasticModel* elMod =
new G4ChipsElasticModel();
63 G4CascadeInterface* loInelModel =
new G4CascadeInterface;
64 loInelModel->SetMinEnergy(0.0);
65 loInelModel->SetMaxEnergy(12.0 * GeV);
68 G4NeutronRadCapture* capModel =
new G4NeutronRadCapture();
71 m_ftfp =
new G4TheoFSGenerator(
"FTFP");
74 new G4ExcitedStringDecay(
m_fragModel =
new G4LundStringFragmentation);
80 m_ftfp->SetMinEnergy(5 * GeV);
81 m_ftfp->SetMaxEnergy(100 * TeV);
84 G4BGGNucleonInelasticXS* inelCS =
new G4BGGNucleonInelasticXS(G4Neutron::Neutron());
85 G4NeutronElasticXS* elCS =
new G4NeutronElasticXS;
86 G4NeutronCaptureXS* capCS =
new G4NeutronCaptureXS;
88 G4ProcessManager* procMan = G4Neutron::Neutron()->GetProcessManager();
91 G4HadronElasticProcess* nProcEl =
new G4HadronElasticProcess;
92 nProcEl->RegisterMe(elMod);
93 nProcEl->AddDataSet(elCS);
94 procMan->AddDiscreteProcess(nProcEl);
97 G4NeutronInelasticProcess* nProcInel =
new G4NeutronInelasticProcess;
98 nProcInel->RegisterMe(loInelModel);
99 nProcInel->RegisterMe(
m_ftfp);
100 nProcInel->AddDataSet(inelCS);
101 procMan->AddDiscreteProcess(nProcInel);
104 G4HadronCaptureProcess* nProcCap =
new G4HadronCaptureProcess(
"nCapture");
105 nProcCap->RegisterMe(capModel);
106 nProcCap->AddDataSet(capCS);
107 procMan->AddDiscreteProcess(nProcCap);
110 G4NeutronKiller* nKiller =
new G4NeutronKiller();
111 nKiller->SetKinEnergyLimit(0.0 * MeV);
112 nKiller->SetTimeLimit(10.*microsecond);
113 procMan->AddDiscreteProcess(nKiller);