EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AntiBaryonPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file AntiBaryonPhysics.cc
1 // $Id: $
3 // //
4 // File: AntiBaryonPhysics.cc //
5 // Description: Anti-baryon hadronic physics constructor for EICPhysicsList //
6 // //
7 // Author: Dennis H. Wright (SLAC) //
8 // Date: 5 July 2018 //
9 // //
11 
12 
13 #include "AntiBaryonPhysics.hh"
14 
15 #include <Geant4/G4ProcessManager.hh>
16 #include <Geant4/G4AntiProtonInelasticProcess.hh>
17 #include <Geant4/G4AntiNeutronInelasticProcess.hh>
18 #include <Geant4/G4AntiLambdaInelasticProcess.hh>
19 #include <Geant4/G4AntiSigmaPlusInelasticProcess.hh>
20 #include <Geant4/G4AntiSigmaMinusInelasticProcess.hh>
21 #include <Geant4/G4AntiXiZeroInelasticProcess.hh>
22 #include <Geant4/G4AntiXiMinusInelasticProcess.hh>
23 #include <Geant4/G4AntiOmegaMinusInelasticProcess.hh>
24 
25 #include <Geant4/G4AntiDeuteronInelasticProcess.hh>
26 #include <Geant4/G4AntiTritonInelasticProcess.hh>
27 #include <Geant4/G4AntiHe3InelasticProcess.hh>
28 #include <Geant4/G4AntiAlphaInelasticProcess.hh>
29 #include <Geant4/G4HadronElasticProcess.hh>
30 
31 #include <Geant4/G4TheoFSGenerator.hh>
32 #include <Geant4/G4FTFModel.hh>
33 #include <Geant4/G4ExcitedStringDecay.hh>
34 #include <Geant4/G4LundStringFragmentation.hh>
35 #include <Geant4/G4GeneratorPrecompoundInterface.hh>
36 #include <Geant4/G4HadronElastic.hh>
37 #include <Geant4/G4AntiNuclElastic.hh>
38 #include <Geant4/G4HadronicAbsorptionFritiof.hh>
39 
40 #include <Geant4/G4ChipsHyperonInelasticXS.hh>
41 #include <Geant4/G4ComponentAntiNuclNuclearXS.hh>
42 #include <Geant4/G4CrossSectionInelastic.hh>
43 #include <Geant4/G4CrossSectionElastic.hh>
44 
45 #include <Geant4/G4SystemOfUnits.hh>
46 
47 
49  ftfp(nullptr),
50  stringModel(nullptr),
51  stringDecay(nullptr),
52  fragModel(nullptr),
53  preCompoundModel(nullptr),
54  theAntiNucleonXS(nullptr)
55 {}
56 
57 
59 {
60  delete stringDecay;
61  delete stringModel;
62  delete fragModel;
63  delete preCompoundModel;
64 
65  delete theAntiNucleonXS;
66 }
67 
68 
70 {}
71 
72 
74 {
75  G4ProcessManager* procMan = 0;
76 
77  // One elastic model for all anti-hyperon and anti-neutron energies
78  G4HadronElastic* elModel = new G4HadronElastic();
79 
80  // Elastic models for anti-(p, d, t, He3, alpha)
81  G4HadronElastic* loelModel = new G4HadronElastic();
82  loelModel->SetMaxEnergy(100.1*MeV);
83 
84  G4AntiNuclElastic* anucEl = new G4AntiNuclElastic();
85  anucEl->SetMinEnergy(100.0*MeV);
86 
87  // Use FTFP for all energies ==>> eventually replace this with new class FTFPInterface
88  ftfp = new G4TheoFSGenerator("FTFP");
89  stringModel = new G4FTFModel;
90  stringDecay =
91  new G4ExcitedStringDecay(fragModel = new G4LundStringFragmentation);
92  stringModel->SetFragmentationModel(stringDecay);
93  preCompoundModel = new G4GeneratorPrecompoundInterface();
94 
95  ftfp->SetHighEnergyGenerator(stringModel);
96  ftfp->SetTransport(preCompoundModel);
97  ftfp->SetMinEnergy(0.0);
98  ftfp->SetMaxEnergy(100*TeV);
99 
100  // Elastic data set
101  G4CrossSectionElastic* anucElxs =
102  new G4CrossSectionElastic(anucEl->GetComponentCrossSection() );
103 
104  // Inelastic cross section sets
105  theAntiNucleonXS = new G4ComponentAntiNuclNuclearXS;
106  G4VCrossSectionDataSet* antiNucleonData =
107  new G4CrossSectionInelastic(theAntiNucleonXS);
108 
109  G4ChipsHyperonInelasticXS* hchipsInelastic = new G4ChipsHyperonInelasticXS;
110 
112  // Anti-proton //
114 
115  procMan = G4AntiProton::AntiProton()->GetProcessManager();
116 
117  // elastic
118  G4HadronElasticProcess* apProcEl = new G4HadronElasticProcess;
119  apProcEl->RegisterMe(loelModel);
120  apProcEl->RegisterMe(anucEl);
121  apProcEl->AddDataSet(anucElxs);
122  procMan->AddDiscreteProcess(apProcEl);
123 
124  // inelastic
125  G4AntiProtonInelasticProcess* apProcInel = new G4AntiProtonInelasticProcess;
126  apProcInel->RegisterMe(ftfp);
127  apProcInel->AddDataSet(antiNucleonData);
128  procMan->AddDiscreteProcess(apProcInel);
129 
130  // stopping
131  G4HadronicAbsorptionFritiof* apAbsorb = new G4HadronicAbsorptionFritiof();
132  procMan->AddRestProcess(apAbsorb);
133 
135  // Anti-neutron //
137 
138  procMan = G4AntiNeutron::AntiNeutron()->GetProcessManager();
139 
140  // elastic
141  G4HadronElasticProcess* anProcEl = new G4HadronElasticProcess;
142  anProcEl->RegisterMe(elModel);
143  procMan->AddDiscreteProcess(anProcEl);
144 
145  // inelastic
146  G4AntiNeutronInelasticProcess* anProcInel = new G4AntiNeutronInelasticProcess;
147  anProcInel->RegisterMe(ftfp);
148  anProcInel->AddDataSet(antiNucleonData);
149  procMan->AddDiscreteProcess(anProcInel);
150 
152  // Anti-deuteron //
154 
155  procMan = G4AntiDeuteron::AntiDeuteron()->GetProcessManager();
156 
157  // elastic
158  G4HadronElasticProcess* adProcEl = new G4HadronElasticProcess;
159  adProcEl->RegisterMe(loelModel);
160  adProcEl->RegisterMe(anucEl);
161  adProcEl->AddDataSet(anucElxs);
162  procMan->AddDiscreteProcess(adProcEl);
163 
164  // inelastic
165  G4AntiDeuteronInelasticProcess* adProcInel = new G4AntiDeuteronInelasticProcess;
166  adProcInel->RegisterMe(ftfp);
167  adProcInel->AddDataSet(antiNucleonData);
168  procMan->AddDiscreteProcess(adProcInel);
169 
170  // stopping
171  G4HadronicAbsorptionFritiof* adAbsorb = new G4HadronicAbsorptionFritiof();
172  procMan->AddRestProcess(adAbsorb);
173 
175  // Anti-triton //
177 
178  procMan = G4AntiTriton::AntiTriton()->GetProcessManager();
179 
180  // elastic
181  G4HadronElasticProcess* atProcEl = new G4HadronElasticProcess;
182  atProcEl->RegisterMe(loelModel);
183  atProcEl->RegisterMe(anucEl);
184  atProcEl->AddDataSet(anucElxs);
185  procMan->AddDiscreteProcess(atProcEl);
186 
187  // inelastic
188  G4AntiTritonInelasticProcess* atProcInel = new G4AntiTritonInelasticProcess;
189  atProcInel->RegisterMe(ftfp);
190  atProcInel->AddDataSet(antiNucleonData);
191  procMan->AddDiscreteProcess(atProcInel);
192 
193  // stopping
194  G4HadronicAbsorptionFritiof* atAbsorb = new G4HadronicAbsorptionFritiof();
195  procMan->AddRestProcess(atAbsorb);
196 
198  // Anti-He3 //
200 
201  procMan = G4AntiHe3::AntiHe3()->GetProcessManager();
202 
203  // elastic
204  G4HadronElasticProcess* ahe3ProcEl = new G4HadronElasticProcess;
205  ahe3ProcEl->RegisterMe(loelModel);
206  ahe3ProcEl->RegisterMe(anucEl);
207  ahe3ProcEl->AddDataSet(anucElxs);
208  procMan->AddDiscreteProcess(ahe3ProcEl);
209 
210  // inelastic
211  G4AntiHe3InelasticProcess* ahe3ProcInel = new G4AntiHe3InelasticProcess;
212  ahe3ProcInel->RegisterMe(ftfp);
213  ahe3ProcInel->AddDataSet(antiNucleonData);
214  procMan->AddDiscreteProcess(ahe3ProcInel);
215 
216  // stopping
217  G4HadronicAbsorptionFritiof* ahe3Absorb = new G4HadronicAbsorptionFritiof();
218  procMan->AddRestProcess(ahe3Absorb);
219 
221  // Anti-alpha //
223 
224  procMan = G4AntiAlpha::AntiAlpha()->GetProcessManager();
225 
226  // elastic
227  G4HadronElasticProcess* aaProcEl = new G4HadronElasticProcess;
228  aaProcEl->RegisterMe(loelModel);
229  aaProcEl->RegisterMe(anucEl);
230  aaProcEl->AddDataSet(anucElxs);
231  procMan->AddDiscreteProcess(aaProcEl);
232 
233  // inelastic
234  G4AntiAlphaInelasticProcess* aaProcInel = new G4AntiAlphaInelasticProcess;
235  aaProcInel->RegisterMe(ftfp);
236  aaProcInel->AddDataSet(antiNucleonData);
237  procMan->AddDiscreteProcess(aaProcInel);
238 
239  // stopping
240  G4HadronicAbsorptionFritiof* aaAbsorb = new G4HadronicAbsorptionFritiof();
241  procMan->AddRestProcess(aaAbsorb);
242 
244  // Anti-lambda //
246 
247  procMan = G4AntiLambda::AntiLambda()->GetProcessManager();
248 
249  // elastic
250  G4HadronElasticProcess* alamProcEl = new G4HadronElasticProcess;
251  alamProcEl->RegisterMe(elModel);
252  procMan->AddDiscreteProcess(alamProcEl);
253 
254  // inelastic
255  G4AntiLambdaInelasticProcess* alamProcInel = new G4AntiLambdaInelasticProcess;
256  alamProcInel->RegisterMe(ftfp);
257  alamProcInel->AddDataSet(hchipsInelastic);
258  procMan->AddDiscreteProcess(alamProcInel);
259 
261  // Anti-sigma+ //
263 
264  procMan = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager();
265 
266  // elastic
267  G4HadronElasticProcess* aspProcEl = new G4HadronElasticProcess;
268  aspProcEl->RegisterMe(elModel);
269  procMan->AddDiscreteProcess(aspProcEl);
270 
271  // inelastic
272  G4AntiSigmaPlusInelasticProcess* aspProcInel = new G4AntiSigmaPlusInelasticProcess;
273  aspProcInel->RegisterMe(ftfp);
274  aspProcInel->AddDataSet(hchipsInelastic);
275  procMan->AddDiscreteProcess(aspProcInel);
276 
277  // stopping
278  G4HadronicAbsorptionFritiof* aspAbsorb = new G4HadronicAbsorptionFritiof();
279  procMan->AddRestProcess(aspAbsorb);
280 
282  // Anti-sigma- //
284 
285  procMan = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager();
286 
287  // elastic
288  G4HadronElasticProcess* asmProcEl = new G4HadronElasticProcess;
289  asmProcEl->RegisterMe(elModel);
290  procMan->AddDiscreteProcess(asmProcEl);
291 
292  // inelastic
293  G4AntiSigmaMinusInelasticProcess* asmProcInel = new G4AntiSigmaMinusInelasticProcess;
294  asmProcInel->RegisterMe(ftfp);
295  asmProcInel->AddDataSet(hchipsInelastic);
296  procMan->AddDiscreteProcess(asmProcInel);
297 
299  // Anti-xi0 //
301 
302  procMan = G4AntiXiZero::AntiXiZero()->GetProcessManager();
303 
304  // elastic
305  G4HadronElasticProcess* axzProcEl = new G4HadronElasticProcess;
306  axzProcEl->RegisterMe(elModel);
307  procMan->AddDiscreteProcess(axzProcEl);
308 
309  // inelastic
310  G4AntiXiZeroInelasticProcess* axzProcInel = new G4AntiXiZeroInelasticProcess;
311  axzProcInel->RegisterMe(ftfp);
312  axzProcInel->AddDataSet(hchipsInelastic);
313  procMan->AddDiscreteProcess(axzProcInel);
314 
316  // Anti-xi- //
318 
319  procMan = G4AntiXiMinus::AntiXiMinus()->GetProcessManager();
320 
321  // elastic
322  G4HadronElasticProcess* axmProcEl = new G4HadronElasticProcess;
323  axmProcEl->RegisterMe(elModel);
324  procMan->AddDiscreteProcess(axmProcEl);
325 
326  // inelastic
327  G4AntiXiMinusInelasticProcess* axmProcInel = new G4AntiXiMinusInelasticProcess;
328  axmProcInel->RegisterMe(ftfp);
329  axmProcInel->AddDataSet(hchipsInelastic);
330  procMan->AddDiscreteProcess(axmProcInel);
331 
333  // Anti-omega- //
335 
336  procMan = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager();
337 
338  // elastic
339  G4HadronElasticProcess* aomProcEl = new G4HadronElasticProcess;
340  aomProcEl->RegisterMe(elModel);
341  procMan->AddDiscreteProcess(aomProcEl);
342 
343  // inelastic
344  G4AntiOmegaMinusInelasticProcess* aomProcInel = new G4AntiOmegaMinusInelasticProcess;
345  aomProcInel->RegisterMe(ftfp);
346  aomProcInel->AddDataSet(hchipsInelastic);
347  procMan->AddDiscreteProcess(aomProcInel);
348 
349 }
350