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