EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
eASTNeutronPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file eASTNeutronPhysics.cc
1 
2 //
3 // eASTNeutronPhysics.cc
4 // Neutron hadronic physics constructor for eASTPhysicsList
5 //
6 // Jun.21.2018 : original implementation - Dennis H. Wright (SLAC)
7 // May.06.2021 : migration to eAST - Makoto Asai (SLAC)
8 // Dec.22.2021 : migration to Geant4 version 11.0 - Makoto Asai (JLab)
9 //
11 
12 
13 #include "eASTNeutronPhysics.hh"
14 
15 #include "G4ProcessManager.hh"
16 #include "G4Version.hh"
17 #if G4VERSION_NUMBER < 1100
18 #include "G4NeutronInelasticProcess.hh"
19 #include "G4HadronCaptureProcess.hh"
20 #else
21 #include "G4HadronInelasticProcess.hh"
22 #include "G4NeutronCaptureProcess.hh"
23 #endif
24 #include "G4HadronElasticProcess.hh"
25 #include "G4NeutronKiller.hh"
26 
27 #include "G4CascadeInterface.hh"
28 #include "G4TheoFSGenerator.hh"
29 #include "G4FTFModel.hh"
30 #include "G4ExcitedStringDecay.hh"
31 #include "G4LundStringFragmentation.hh"
32 #include "G4GeneratorPrecompoundInterface.hh"
33 #include "G4ChipsElasticModel.hh"
34 #include "G4NeutronRadCapture.hh"
35 
36 #include "G4BGGNucleonInelasticXS.hh"
37 #include "G4NeutronElasticXS.hh"
38 #include "G4NeutronCaptureXS.hh"
39 
40 #include "G4SystemOfUnits.hh"
41 
42 #if G4VERSION_NUMBER < 1100
44 {
45 }
46 
48 {
49  delete stringDecay;
50  delete stringModel;
51  delete fragModel;
52  delete preCompoundModel;
53 }
54 #else
56 : G4VPhysicsConstructor("eASTNeutron")
57 {;}
58 
60 {;}
61 #endif
62 
64 {}
65 
66 
68 {
69  // Low energy elastic model
70  G4ChipsElasticModel* elMod = new G4ChipsElasticModel();
71 
72  // Use Bertini cascade for low energies
73  G4CascadeInterface* loInelModel = new G4CascadeInterface;
74  loInelModel->SetMinEnergy(0.0);
75  loInelModel->SetMaxEnergy(12.0*GeV);
76 
77  // Capture model
78  G4NeutronRadCapture* capModel = new G4NeutronRadCapture();
79 
80  // Use FTFP for high energies ==>> eventually replace this with new class FTFPInterface
81  ftfp = new G4TheoFSGenerator("FTFP");
82  stringModel = new G4FTFModel;
83  stringDecay =
84  new G4ExcitedStringDecay(fragModel = new G4LundStringFragmentation);
85  stringModel->SetFragmentationModel(stringDecay);
86  preCompoundModel = new G4GeneratorPrecompoundInterface();
87 
88  ftfp->SetHighEnergyGenerator(stringModel);
89  ftfp->SetTransport(preCompoundModel);
90  ftfp->SetMinEnergy(5*GeV);
91  ftfp->SetMaxEnergy(100*TeV);
92 
93  // Cross section sets
94  G4BGGNucleonInelasticXS* inelCS = new G4BGGNucleonInelasticXS(G4Neutron::Neutron() );
95  G4NeutronElasticXS* elCS = new G4NeutronElasticXS;
96  G4NeutronCaptureXS* capCS = new G4NeutronCaptureXS;
97 
98  G4ProcessManager* procMan = G4Neutron::Neutron()->GetProcessManager();
99 
100  // Elastic process
101  G4HadronElasticProcess* nProcEl = new G4HadronElasticProcess;
102  nProcEl->RegisterMe(elMod);
103  nProcEl->AddDataSet(elCS);
104  procMan->AddDiscreteProcess(nProcEl);
105 
106  // Inelastic process
107 #if G4VERSION_NUMBER < 1100
108  G4NeutronInelasticProcess* nProcInel = new G4NeutronInelasticProcess;
109 #else
110  auto* nProcInel = new G4HadronInelasticProcess("NeutronInelasticProcess",
111  G4Neutron::Neutron() );
112 #endif
113  nProcInel->RegisterMe(loInelModel);
114  nProcInel->RegisterMe(ftfp);
115  nProcInel->AddDataSet(inelCS);
116  procMan->AddDiscreteProcess(nProcInel);
117 
118  // Capture process
119 #if G4VERSION_NUMBER < 1100
120  G4HadronCaptureProcess* nProcCap = new G4HadronCaptureProcess("nCapture");
121 #else
122  auto* nProcCap = new G4NeutronCaptureProcess("nCapture");
123 #endif
124  nProcCap->RegisterMe(capModel);
125  nProcCap->AddDataSet(capCS);
126  procMan->AddDiscreteProcess(nProcCap);
127 
128  // Neutron cut (kill neutrons that live too long or have too little energy)
129  G4NeutronKiller* nKiller = new G4NeutronKiller();
130  nKiller->SetKinEnergyLimit(0.0*MeV);
131  nKiller->SetTimeLimit(10.*microsecond);
132  procMan->AddDiscreteProcess(nKiller);
133 
134 }
135 
136