EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HyperonPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file HyperonPhysics.cc
1 // $Id: $
3 // //
4 // File: HyperonPhysics.cc //
5 // Description: Hyperon hadronic physics constructor for EICPhysicsList //
6 // //
7 // Author: Dennis H. Wright (SLAC) //
8 // Date: 5 July 2018 //
9 // //
11 
12 
13 #include "HyperonPhysics.hh"
14 
15 #include <Geant4/G4ProcessManager.hh>
16 #include <Geant4/G4LambdaInelasticProcess.hh>
17 #include <Geant4/G4SigmaPlusInelasticProcess.hh>
18 #include <Geant4/G4SigmaMinusInelasticProcess.hh>
19 #include <Geant4/G4XiZeroInelasticProcess.hh>
20 #include <Geant4/G4XiMinusInelasticProcess.hh>
21 #include <Geant4/G4OmegaMinusInelasticProcess.hh>
22 
23 #include <Geant4/G4HadronElasticProcess.hh>
24 #include <Geant4/G4HadronicAbsorptionBertini.hh>
25 
26 #include <Geant4/G4CascadeInterface.hh>
27 #include <Geant4/G4TheoFSGenerator.hh>
28 #include <Geant4/G4FTFModel.hh>
29 #include <Geant4/G4ExcitedStringDecay.hh>
30 #include <Geant4/G4LundStringFragmentation.hh>
31 #include <Geant4/G4GeneratorPrecompoundInterface.hh>
32 #include <Geant4/G4HadronElastic.hh>
33 
34 #include <Geant4/G4ChipsHyperonInelasticXS.hh>
35 #include <Geant4/G4SystemOfUnits.hh>
36 
37 
39  ftfp(nullptr),
40  stringModel(nullptr),
41  stringDecay(nullptr),
42  fragModel(nullptr),
43  preCompoundModel(nullptr)
44 {}
45 
46 
48 {
49  delete stringDecay;
50  delete stringModel;
51  delete fragModel;
52  delete preCompoundModel;
53 }
54 
55 
57 {}
58 
59 
61 {
62  G4ProcessManager* procMan = 0;
63 
64  // One elastic model for all hyperon energies
65  G4HadronElastic* elModel = new G4HadronElastic();
66 
67  // Use Bertini cascade for low energies
68  G4CascadeInterface* loInelModel = new G4CascadeInterface;
69  loInelModel->SetMinEnergy(0.0);
70  loInelModel->SetMaxEnergy(6.0*GeV);
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(4*GeV);
83  ftfp->SetMaxEnergy(100*TeV);
84 
85  // Inelastic cross section set
86  G4ChipsHyperonInelasticXS* chipsInelastic = new G4ChipsHyperonInelasticXS;
87 
89  // Lambda //
91 
92  procMan = G4Lambda::Lambda()->GetProcessManager();
93 
94  // elastic
95  G4HadronElasticProcess* lamProcEl = new G4HadronElasticProcess;
96  lamProcEl->RegisterMe(elModel);
97  procMan->AddDiscreteProcess(lamProcEl);
98 
99  // inelastic
100  G4LambdaInelasticProcess* lamProcInel = new G4LambdaInelasticProcess;
101  lamProcInel->RegisterMe(loInelModel);
102  lamProcInel->RegisterMe(ftfp);
103  lamProcInel->AddDataSet(chipsInelastic);
104  procMan->AddDiscreteProcess(lamProcInel);
105 
107  // Sigma+ //
109 
110  procMan = G4SigmaPlus::SigmaPlus()->GetProcessManager();
111 
112  // elastic
113  G4HadronElasticProcess* spProcEl = new G4HadronElasticProcess;
114  spProcEl->RegisterMe(elModel);
115  procMan->AddDiscreteProcess(spProcEl);
116 
117  // inelastic
118  G4SigmaPlusInelasticProcess* spProcInel = new G4SigmaPlusInelasticProcess;
119  spProcInel->RegisterMe(loInelModel);
120  spProcInel->RegisterMe(ftfp);
121  spProcInel->AddDataSet(chipsInelastic);
122  procMan->AddDiscreteProcess(spProcInel);
123 
125  // Sigma- //
127 
128  procMan = G4SigmaMinus::SigmaMinus()->GetProcessManager();
129 
130  // elastic
131  G4HadronElasticProcess* smProcEl = new G4HadronElasticProcess;
132  smProcEl->RegisterMe(elModel);
133  procMan->AddDiscreteProcess(smProcEl);
134 
135  // inelastic
136  G4SigmaMinusInelasticProcess* smProcInel = new G4SigmaMinusInelasticProcess;
137  smProcInel->RegisterMe(loInelModel);
138  smProcInel->RegisterMe(ftfp);
139  smProcInel->AddDataSet(chipsInelastic);
140  procMan->AddDiscreteProcess(smProcInel);
141 
142  // stopping
143  G4HadronicAbsorptionBertini* smAbsorb = new G4HadronicAbsorptionBertini;
144  procMan->AddRestProcess(smAbsorb);
145 
147  // Xi0 //
149 
150  procMan = G4XiZero::XiZero()->GetProcessManager();
151 
152  // elastic
153  G4HadronElasticProcess* xzProcEl = new G4HadronElasticProcess;
154  xzProcEl->RegisterMe(elModel);
155  procMan->AddDiscreteProcess(xzProcEl);
156 
157  // inelastic
158  G4XiZeroInelasticProcess* xzProcInel = new G4XiZeroInelasticProcess;
159  xzProcInel->RegisterMe(loInelModel);
160  xzProcInel->RegisterMe(ftfp);
161  xzProcInel->AddDataSet(chipsInelastic);
162  procMan->AddDiscreteProcess(xzProcInel);
163 
165  // Xi- //
167 
168  procMan = G4XiMinus::XiMinus()->GetProcessManager();
169 
170  // elastic
171  G4HadronElasticProcess* xmProcEl = new G4HadronElasticProcess;
172  xmProcEl->RegisterMe(elModel);
173  procMan->AddDiscreteProcess(xmProcEl);
174 
175  // inelastic
176  G4XiMinusInelasticProcess* xmProcInel = new G4XiMinusInelasticProcess;
177  xmProcInel->RegisterMe(loInelModel);
178  xmProcInel->RegisterMe(ftfp);
179  xmProcInel->AddDataSet(chipsInelastic);
180  procMan->AddDiscreteProcess(xmProcInel);
181 
182  // stopping
183  G4HadronicAbsorptionBertini* xmAbsorb = new G4HadronicAbsorptionBertini;
184  procMan->AddRestProcess(xmAbsorb);
185 
187  // Omega- //
189 
190  procMan = G4OmegaMinus::OmegaMinus()->GetProcessManager();
191 
192  // elastic
193  G4HadronElasticProcess* omProcEl = new G4HadronElasticProcess;
194  omProcEl->RegisterMe(elModel);
195  procMan->AddDiscreteProcess(omProcEl);
196 
197  // inelastic
198  G4OmegaMinusInelasticProcess* omProcInel = new G4OmegaMinusInelasticProcess;
199  omProcInel->RegisterMe(loInelModel);
200  omProcInel->RegisterMe(ftfp);
201  omProcInel->AddDataSet(chipsInelastic);
202  procMan->AddDiscreteProcess(omProcInel);
203 
204  // stopping
205  G4HadronicAbsorptionBertini* omAbsorb = new G4HadronicAbsorptionBertini;
206  procMan->AddRestProcess(omAbsorb);
207 }