EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
eASTAntiBaryonPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file eASTAntiBaryonPhysics.cc
1 
2 //
3 // eASTAntiBaryonPhysics.cc
4 // Anti-baryon hadronic physics constructor for eASTPhysicsList
5 //
6 // Jun.21.2018 : original implementation - Dennis H. Wright (SLAC)
7 // May.02.2021 : migration to Geant4 version 10.7 - Dennis H. Wright (SLAC)
8 // May.06.2021 : migration to eAST - Makoto Asai (SLAC)
9 // Dec.22.2021 : migration to Geant4 version 11.0 - Makoto Asai (JLab)
10 //
12 
13 
14 #include "eASTAntiBaryonPhysics.hh"
15 
16 #include "G4ProcessManager.hh"
17 
18 #include "G4Version.hh"
19 #if G4VERSION_NUMBER < 1100
20 #include "G4AntiProtonInelasticProcess.hh"
21 #include "G4AntiNeutronInelasticProcess.hh"
22 #include "G4AntiLambdaInelasticProcess.hh"
23 #include "G4AntiSigmaPlusInelasticProcess.hh"
24 #include "G4AntiSigmaMinusInelasticProcess.hh"
25 #include "G4AntiXiZeroInelasticProcess.hh"
26 #include "G4AntiXiMinusInelasticProcess.hh"
27 #include "G4AntiOmegaMinusInelasticProcess.hh"
28 #include "G4AntiDeuteronInelasticProcess.hh"
29 #include "G4AntiTritonInelasticProcess.hh"
30 #include "G4AntiHe3InelasticProcess.hh"
31 #include "G4AntiAlphaInelasticProcess.hh"
32 #else
33 #include "G4HadronInelasticProcess.hh"
34 #endif
35 
36 #include "G4HadronElasticProcess.hh"
37 
38 #include "G4TheoFSGenerator.hh"
39 #include "G4FTFModel.hh"
40 #include "G4ExcitedStringDecay.hh"
41 #include "G4LundStringFragmentation.hh"
42 #include "G4GeneratorPrecompoundInterface.hh"
43 #include "G4HadronElastic.hh"
44 #include "G4AntiNuclElastic.hh"
45 #include "G4HadronicAbsorptionFritiof.hh"
46 
47 #include "G4ChipsAntiBaryonElasticXS.hh"
48 #include "G4ChipsHyperonInelasticXS.hh"
49 #include "G4ComponentAntiNuclNuclearXS.hh"
50 #include "G4ChipsAntiBaryonElasticXS.hh"
51 #include "G4CrossSectionInelastic.hh"
52 #include "G4CrossSectionElastic.hh"
53 
54 #include "G4SystemOfUnits.hh"
55 
56 #if G4VERSION_NUMBER < 1100
58 {}
59 
61 {
62  delete stringDecay;
63  delete stringModel;
64  delete fragModel;
65  delete preCompoundModel;
66 
67  delete theAntiNucleonXS;
68 }
69 #else
71 : G4VPhysicsConstructor("eASTAntiBaryon")
72 {;}
73 
75 {;}
76 #endif
77 
79 {}
80 
81 
83 {
84  G4ProcessManager* procMan = 0;
85 
86  // One elastic model for all anti-hyperon and anti-neutron energies
87  G4HadronElastic* elModel = new G4HadronElastic();
88 
89  // Elastic models for anti-(p, d, t, He3, alpha)
90  G4HadronElastic* loelModel = new G4HadronElastic();
91  loelModel->SetMaxEnergy(100.1*MeV);
92 
93  G4AntiNuclElastic* anucEl = new G4AntiNuclElastic();
94  anucEl->SetMinEnergy(100.0*MeV);
95 
96  // Use FTFP for all energies ==>> eventually replace this with new class FTFPInterface
97  ftfp = new G4TheoFSGenerator("FTFP");
98  stringModel = new G4FTFModel;
99  stringDecay =
100  new G4ExcitedStringDecay(fragModel = new G4LundStringFragmentation);
101  stringModel->SetFragmentationModel(stringDecay);
102  preCompoundModel = new G4GeneratorPrecompoundInterface();
103 
104  ftfp->SetHighEnergyGenerator(stringModel);
105  ftfp->SetTransport(preCompoundModel);
106  ftfp->SetMinEnergy(0.0);
107  ftfp->SetMaxEnergy(100*TeV);
108 
109  // Elastic data sets
110  G4CrossSectionElastic* anucElxs =
111  new G4CrossSectionElastic(anucEl->GetComponentCrossSection() );
112  G4VCrossSectionDataSet* abaryElXs = new G4ChipsAntiBaryonElasticXS;
113 
114  G4VCrossSectionDataSet* anucnucElxs =
115  new G4CrossSectionElastic(new G4ComponentAntiNuclNuclearXS);
116 
117  // Inelastic cross section sets
118  theAntiNucleonXS = new G4ComponentAntiNuclNuclearXS;
119  G4VCrossSectionDataSet* antiNucleonData =
120  new G4CrossSectionInelastic(theAntiNucleonXS);
121 
122  G4ChipsHyperonInelasticXS* hchipsInelastic = new G4ChipsHyperonInelasticXS;
123 
125  // Anti-proton //
127 
128  procMan = G4AntiProton::AntiProton()->GetProcessManager();
129 
130  // elastic
131  G4HadronElasticProcess* apProcEl = new G4HadronElasticProcess;
132  apProcEl->RegisterMe(loelModel);
133  apProcEl->RegisterMe(anucEl);
134  apProcEl->AddDataSet(anucElxs);
135  procMan->AddDiscreteProcess(apProcEl);
136 
137  // inelastic
138 #if G4VERSION_NUMBER < 1100
139  G4AntiProtonInelasticProcess* apProcInel = new G4AntiProtonInelasticProcess;
140 #else
141  auto* apProcInel = new G4HadronInelasticProcess("AntiProtonInelasticProcess",
142  G4AntiProton::AntiProton() );
143 #endif
144  apProcInel->RegisterMe(ftfp);
145  apProcInel->AddDataSet(antiNucleonData);
146  procMan->AddDiscreteProcess(apProcInel);
147 
148  // stopping
149  G4HadronicAbsorptionFritiof* apAbsorb = new G4HadronicAbsorptionFritiof();
150  procMan->AddRestProcess(apAbsorb);
151 
153  // Anti-neutron //
155 
156  procMan = G4AntiNeutron::AntiNeutron()->GetProcessManager();
157 
158  // elastic
159  G4HadronElasticProcess* anProcEl = new G4HadronElasticProcess;
160  anProcEl->RegisterMe(elModel);
161  anProcEl->AddDataSet(anucnucElxs);
162  procMan->AddDiscreteProcess(anProcEl);
163 
164  // inelastic
165 #if G4VERSION_NUMBER < 1100
166  G4AntiNeutronInelasticProcess* anProcInel = new G4AntiNeutronInelasticProcess;
167 #else
168  auto* anProcInel = new G4HadronInelasticProcess("AntiNeutronInelasticProcess",
169  G4AntiNeutron::AntiNeutron() );
170 #endif
171  anProcInel->RegisterMe(ftfp);
172  anProcInel->AddDataSet(antiNucleonData);
173  procMan->AddDiscreteProcess(anProcInel);
174 
176  // Anti-deuteron //
178 
179  procMan = G4AntiDeuteron::AntiDeuteron()->GetProcessManager();
180 
181  // elastic
182  G4HadronElasticProcess* adProcEl = new G4HadronElasticProcess;
183  adProcEl->RegisterMe(loelModel);
184  adProcEl->RegisterMe(anucEl);
185  adProcEl->AddDataSet(anucElxs);
186  procMan->AddDiscreteProcess(adProcEl);
187 
188  // inelastic
189 #if G4VERSION_NUMBER < 1100
190  G4AntiDeuteronInelasticProcess* adProcInel = new G4AntiDeuteronInelasticProcess;
191 #else
192  auto* adProcInel = new G4HadronInelasticProcess("AntiDeuteronInelasticProcess",
193  G4AntiDeuteron::AntiDeuteron() );
194 #endif
195  adProcInel->RegisterMe(ftfp);
196  adProcInel->AddDataSet(antiNucleonData);
197  procMan->AddDiscreteProcess(adProcInel);
198 
199  // stopping
200  G4HadronicAbsorptionFritiof* adAbsorb = new G4HadronicAbsorptionFritiof();
201  procMan->AddRestProcess(adAbsorb);
202 
204  // Anti-triton //
206 
207  procMan = G4AntiTriton::AntiTriton()->GetProcessManager();
208 
209  // elastic
210  G4HadronElasticProcess* atProcEl = new G4HadronElasticProcess;
211  atProcEl->RegisterMe(loelModel);
212  atProcEl->RegisterMe(anucEl);
213  atProcEl->AddDataSet(anucElxs);
214  procMan->AddDiscreteProcess(atProcEl);
215 
216  // inelastic
217 #if G4VERSION_NUMBER < 1100
218  G4AntiTritonInelasticProcess* atProcInel = new G4AntiTritonInelasticProcess;
219 #else
220  auto* atProcInel = new G4HadronInelasticProcess("AntiTritonInelasticProcess",
221  G4AntiTriton::AntiTriton() );
222 #endif
223  atProcInel->RegisterMe(ftfp);
224  atProcInel->AddDataSet(antiNucleonData);
225  procMan->AddDiscreteProcess(atProcInel);
226 
227  // stopping
228  G4HadronicAbsorptionFritiof* atAbsorb = new G4HadronicAbsorptionFritiof();
229  procMan->AddRestProcess(atAbsorb);
230 
232  // Anti-He3 //
234 
235  procMan = G4AntiHe3::AntiHe3()->GetProcessManager();
236 
237  // elastic
238  G4HadronElasticProcess* ahe3ProcEl = new G4HadronElasticProcess;
239  ahe3ProcEl->RegisterMe(loelModel);
240  ahe3ProcEl->RegisterMe(anucEl);
241  ahe3ProcEl->AddDataSet(anucElxs);
242  procMan->AddDiscreteProcess(ahe3ProcEl);
243 
244  // inelastic
245 #if G4VERSION_NUMBER < 1100
246  G4AntiHe3InelasticProcess* ahe3ProcInel = new G4AntiHe3InelasticProcess;
247 #else
248  auto* ahe3ProcInel = new G4HadronInelasticProcess("Anti3HeInelasticProcess",
249  G4AntiHe3::AntiHe3() );
250 #endif
251  ahe3ProcInel->RegisterMe(ftfp);
252  ahe3ProcInel->AddDataSet(antiNucleonData);
253  procMan->AddDiscreteProcess(ahe3ProcInel);
254 
255  // stopping
256  G4HadronicAbsorptionFritiof* ahe3Absorb = new G4HadronicAbsorptionFritiof();
257  procMan->AddRestProcess(ahe3Absorb);
258 
260  // Anti-alpha //
262 
263  procMan = G4AntiAlpha::AntiAlpha()->GetProcessManager();
264 
265  // elastic
266  G4HadronElasticProcess* aaProcEl = new G4HadronElasticProcess;
267  aaProcEl->RegisterMe(loelModel);
268  aaProcEl->RegisterMe(anucEl);
269  aaProcEl->AddDataSet(anucElxs);
270  procMan->AddDiscreteProcess(aaProcEl);
271 
272  // inelastic
273 #if G4VERSION_NUMBER < 1100
274  G4AntiAlphaInelasticProcess* aaProcInel = new G4AntiAlphaInelasticProcess;
275 #else
276  auto* aaProcInel = new G4HadronInelasticProcess("AntiAlphaInelasticProcess",
277  G4AntiAlpha::AntiAlpha() );
278 #endif
279  aaProcInel->RegisterMe(ftfp);
280  aaProcInel->AddDataSet(antiNucleonData);
281  procMan->AddDiscreteProcess(aaProcInel);
282 
283  // stopping
284  G4HadronicAbsorptionFritiof* aaAbsorb = new G4HadronicAbsorptionFritiof();
285  procMan->AddRestProcess(aaAbsorb);
286 
288  // Anti-lambda //
290 
291  procMan = G4AntiLambda::AntiLambda()->GetProcessManager();
292 
293  // elastic
294  G4HadronElasticProcess* alamProcEl = new G4HadronElasticProcess;
295  alamProcEl->RegisterMe(elModel);
296  alamProcEl->AddDataSet(abaryElXs);
297  procMan->AddDiscreteProcess(alamProcEl);
298 
299  // inelastic
300 #if G4VERSION_NUMBER < 1100
301  G4AntiLambdaInelasticProcess* alamProcInel = new G4AntiLambdaInelasticProcess;
302 #else
303  auto* alamProcInel = new G4HadronInelasticProcess("AntiLambdaInelasticProcess",
304  G4AntiLambda::AntiLambda() );
305 #endif
306  alamProcInel->RegisterMe(ftfp);
307  alamProcInel->AddDataSet(hchipsInelastic);
308  procMan->AddDiscreteProcess(alamProcInel);
309 
311  // Anti-sigma+ //
313 
314  procMan = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager();
315 
316  // elastic
317  G4HadronElasticProcess* aspProcEl = new G4HadronElasticProcess;
318  aspProcEl->RegisterMe(elModel);
319  aspProcEl->AddDataSet(abaryElXs);
320  procMan->AddDiscreteProcess(aspProcEl);
321 
322  // inelastic
323 #if G4VERSION_NUMBER < 1100
324  G4AntiSigmaPlusInelasticProcess* aspProcInel = new G4AntiSigmaPlusInelasticProcess;
325 #else
326  auto* aspProcInel = new G4HadronInelasticProcess("AntiSigmaPInelasticProcess",
327  G4AntiSigmaPlus::AntiSigmaPlus() );
328 #endif
329  aspProcInel->RegisterMe(ftfp);
330  aspProcInel->AddDataSet(hchipsInelastic);
331  procMan->AddDiscreteProcess(aspProcInel);
332 
333  // stopping
334  G4HadronicAbsorptionFritiof* aspAbsorb = new G4HadronicAbsorptionFritiof();
335  procMan->AddRestProcess(aspAbsorb);
336 
338  // Anti-sigma- //
340 
341  procMan = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager();
342 
343  // elastic
344  G4HadronElasticProcess* asmProcEl = new G4HadronElasticProcess;
345  asmProcEl->RegisterMe(elModel);
346  asmProcEl->AddDataSet(abaryElXs);
347  procMan->AddDiscreteProcess(asmProcEl);
348 
349  // inelastic
350 #if G4VERSION_NUMBER < 1100
351  G4AntiSigmaMinusInelasticProcess* asmProcInel = new G4AntiSigmaMinusInelasticProcess;
352 #else
353  auto* asmProcInel = new G4HadronInelasticProcess("AntiSigmaMInelasticProcess",
354  G4AntiSigmaMinus::AntiSigmaMinus() );
355 #endif
356  asmProcInel->RegisterMe(ftfp);
357  asmProcInel->AddDataSet(hchipsInelastic);
358  procMan->AddDiscreteProcess(asmProcInel);
359 
361  // Anti-xi0 //
363 
364  procMan = G4AntiXiZero::AntiXiZero()->GetProcessManager();
365 
366  // elastic
367  G4HadronElasticProcess* axzProcEl = new G4HadronElasticProcess;
368  axzProcEl->RegisterMe(elModel);
369  axzProcEl->AddDataSet(abaryElXs);
370  procMan->AddDiscreteProcess(axzProcEl);
371 
372  // inelastic
373 #if G4VERSION_NUMBER < 1100
374  G4AntiXiZeroInelasticProcess* axzProcInel = new G4AntiXiZeroInelasticProcess;
375 #else
376  auto* axzProcInel = new G4HadronInelasticProcess("AntiXi0InelasticProcess",
377  G4AntiXiZero::AntiXiZero() );
378 #endif
379  axzProcInel->RegisterMe(ftfp);
380  axzProcInel->AddDataSet(hchipsInelastic);
381  procMan->AddDiscreteProcess(axzProcInel);
382 
384  // Anti-xi- //
386 
387  procMan = G4AntiXiMinus::AntiXiMinus()->GetProcessManager();
388 
389  // elastic
390  G4HadronElasticProcess* axmProcEl = new G4HadronElasticProcess;
391  axmProcEl->RegisterMe(elModel);
392  axmProcEl->AddDataSet(abaryElXs);
393  procMan->AddDiscreteProcess(axmProcEl);
394 
395  // inelastic
396 #if G4VERSION_NUMBER < 1100
397  G4AntiXiMinusInelasticProcess* axmProcInel = new G4AntiXiMinusInelasticProcess;
398 #else
399  auto* axmProcInel = new G4HadronInelasticProcess("AntiXiMInelasticProcess",
400  G4AntiXiMinus::AntiXiMinus() );
401 #endif
402  axmProcInel->RegisterMe(ftfp);
403  axmProcInel->AddDataSet(hchipsInelastic);
404  procMan->AddDiscreteProcess(axmProcInel);
405 
407  // Anti-omega- //
409 
410  procMan = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager();
411 
412  // elastic
413  G4HadronElasticProcess* aomProcEl = new G4HadronElasticProcess;
414  aomProcEl->RegisterMe(elModel);
415  aomProcEl->AddDataSet(abaryElXs);
416  procMan->AddDiscreteProcess(aomProcEl);
417 
418  // inelastic
419 #if G4VERSION_NUMBER < 1100
420  G4AntiOmegaMinusInelasticProcess* aomProcInel = new G4AntiOmegaMinusInelasticProcess;
421 #else
422  auto* aomProcInel = new G4HadronInelasticProcess("AntiOmegaMInelasticProcess",
423  G4AntiOmegaMinus::AntiOmegaMinus() );
424 #endif
425  aomProcInel->RegisterMe(ftfp);
426  aomProcInel->AddDataSet(hchipsInelastic);
427  procMan->AddDiscreteProcess(aomProcInel);
428 
429 }
430 
432 {}
433