Belle II Software  release-08-01-10
AntiBaryonPhysics.cc
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 #include <simulation/physicslist/AntiBaryonPhysics.h>
10 
11 #include "G4ProcessManager.hh"
12 #include "G4HadronInelasticProcess.hh"
13 #include "G4HadronElasticProcess.hh"
14 
15 #include "G4TheoFSGenerator.hh"
16 #include "G4FTFModel.hh"
17 #include "G4ExcitedStringDecay.hh"
18 #include "G4LundStringFragmentation.hh"
19 #include "G4GeneratorPrecompoundInterface.hh"
20 #include "G4HadronElastic.hh"
21 #include "G4AntiNuclElastic.hh"
22 #include "G4HadronicAbsorptionFritiof.hh"
23 
24 #include "G4ChipsAntiBaryonElasticXS.hh"
25 #include "G4ChipsAntiBaryonInelasticXS.hh"
26 #include "G4ComponentAntiNuclNuclearXS.hh"
27 #include "G4CrossSectionInelastic.hh"
28 #include "G4CrossSectionElastic.hh"
29 
30 #include "G4SystemOfUnits.hh"
31 
32 using namespace Belle2;
33 using namespace Simulation;
34 
35 
36 AntiBaryonPhysics::AntiBaryonPhysics()
37  : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
38  m_fragModel(nullptr), m_preCompoundModel(nullptr),
39  m_theAntiNucleonXS(nullptr)
40 {}
41 
42 
43 AntiBaryonPhysics::~AntiBaryonPhysics()
44 {
45  delete m_stringDecay;
46  delete m_stringModel;
47  delete m_fragModel;
48  delete m_preCompoundModel;
49 
50  delete m_theAntiNucleonXS;
51 }
52 
53 
54 void AntiBaryonPhysics::ConstructParticle()
55 {}
56 
57 
58 void AntiBaryonPhysics::ConstructProcess()
59 {
60  G4ProcessManager* procMan = 0;
61 
62  // One elastic model for all anti-hyperon and anti-neutron energies
63  G4HadronElastic* elModel = new G4HadronElastic();
64 
65  // Elastic models for anti-(p, d, t, He3, alpha)
66  G4HadronElastic* loelModel = new G4HadronElastic();
67  loelModel->SetMaxEnergy(100.1 * MeV);
68 
69  G4AntiNuclElastic* anucEl = new G4AntiNuclElastic();
70  anucEl->SetMinEnergy(100.0 * MeV);
71 
72  // Use FTFP for all energies ==>> eventually replace this with new class FTFPInterface
73  m_ftfp = new G4TheoFSGenerator("FTFP");
74  m_stringModel = new G4FTFModel;
75  m_stringDecay =
76  new G4ExcitedStringDecay(m_fragModel = new G4LundStringFragmentation);
77  m_stringModel->SetFragmentationModel(m_stringDecay);
78  m_preCompoundModel = new G4GeneratorPrecompoundInterface();
79 
80  m_ftfp->SetHighEnergyGenerator(m_stringModel);
81  m_ftfp->SetTransport(m_preCompoundModel);
82  m_ftfp->SetMinEnergy(0.0);
83  m_ftfp->SetMaxEnergy(100 * TeV);
84 
85  // Elastic data set
86  G4CrossSectionElastic* anucElxs =
87  new G4CrossSectionElastic(anucEl->GetComponentCrossSection());
88 
89  // Inelastic cross section sets
90  m_theAntiNucleonXS = new G4ComponentAntiNuclNuclearXS;
91  G4VCrossSectionDataSet* antiNucleonData =
92  new G4CrossSectionInelastic(m_theAntiNucleonXS);
93 
94  G4ChipsAntiBaryonElasticXS* hchipsElastic = new G4ChipsAntiBaryonElasticXS;
95  G4ChipsAntiBaryonInelasticXS* hchipsInelastic = new G4ChipsAntiBaryonInelasticXS;
96 
98  // Anti-proton //
100 
101  procMan = G4AntiProton::AntiProton()->GetProcessManager();
102 
103  // elastic
104  G4HadronElasticProcess* apProcEl = new G4HadronElasticProcess;
105  apProcEl->RegisterMe(loelModel);
106  apProcEl->RegisterMe(anucEl);
107  apProcEl->AddDataSet(anucElxs);
108  procMan->AddDiscreteProcess(apProcEl);
109 
110  // inelastic
111  G4HadronInelasticProcess* apProcInel = new G4HadronInelasticProcess("anti_protonInelastic", G4AntiProton::Definition());
112  apProcInel->RegisterMe(m_ftfp);
113  apProcInel->AddDataSet(antiNucleonData);
114  procMan->AddDiscreteProcess(apProcInel);
115 
116  // stopping
117  G4HadronicAbsorptionFritiof* apAbsorb = new G4HadronicAbsorptionFritiof();
118  procMan->AddRestProcess(apAbsorb);
119 
121  // Anti-neutron //
123 
124  procMan = G4AntiNeutron::AntiNeutron()->GetProcessManager();
125 
126  // elastic
127  G4HadronElasticProcess* anProcEl = new G4HadronElasticProcess;
128  anProcEl->RegisterMe(elModel);
129  anProcEl->AddDataSet(hchipsElastic);
130  procMan->AddDiscreteProcess(anProcEl);
131 
132  // inelastic
133  G4HadronInelasticProcess* anProcInel = new G4HadronInelasticProcess("anti_neutronInelastic", G4AntiNeutron::Definition());
134  anProcInel->RegisterMe(m_ftfp);
135  anProcInel->AddDataSet(antiNucleonData);
136  procMan->AddDiscreteProcess(anProcInel);
137 
139  // Anti-deuteron //
141 
142  procMan = G4AntiDeuteron::AntiDeuteron()->GetProcessManager();
143 
144  // elastic
145  G4HadronElasticProcess* adProcEl = new G4HadronElasticProcess;
146  adProcEl->RegisterMe(loelModel);
147  adProcEl->RegisterMe(anucEl);
148  adProcEl->AddDataSet(anucElxs);
149  procMan->AddDiscreteProcess(adProcEl);
150 
151  // inelastic
152  G4HadronInelasticProcess* adProcInel = new G4HadronInelasticProcess("anti_deuteronInelastic", G4AntiDeuteron::Definition());
153  adProcInel->RegisterMe(m_ftfp);
154  adProcInel->AddDataSet(antiNucleonData);
155  procMan->AddDiscreteProcess(adProcInel);
156 
157  // stopping
158  G4HadronicAbsorptionFritiof* adAbsorb = new G4HadronicAbsorptionFritiof();
159  procMan->AddRestProcess(adAbsorb);
160 
162  // Anti-triton //
164 
165  procMan = G4AntiTriton::AntiTriton()->GetProcessManager();
166 
167  // elastic
168  G4HadronElasticProcess* atProcEl = new G4HadronElasticProcess;
169  atProcEl->RegisterMe(loelModel);
170  atProcEl->RegisterMe(anucEl);
171  atProcEl->AddDataSet(anucElxs);
172  procMan->AddDiscreteProcess(atProcEl);
173 
174  // inelastic
175  G4HadronInelasticProcess* atProcInel = new G4HadronInelasticProcess("anti_tritonInelastic", G4AntiTriton::Definition());
176  atProcInel->RegisterMe(m_ftfp);
177  atProcInel->AddDataSet(antiNucleonData);
178  procMan->AddDiscreteProcess(atProcInel);
179 
180  // stopping
181  G4HadronicAbsorptionFritiof* atAbsorb = new G4HadronicAbsorptionFritiof();
182  procMan->AddRestProcess(atAbsorb);
183 
185  // Anti-He3 //
187 
188  procMan = G4AntiHe3::AntiHe3()->GetProcessManager();
189 
190  // elastic
191  G4HadronElasticProcess* ahe3ProcEl = new G4HadronElasticProcess;
192  ahe3ProcEl->RegisterMe(loelModel);
193  ahe3ProcEl->RegisterMe(anucEl);
194  ahe3ProcEl->AddDataSet(anucElxs);
195  procMan->AddDiscreteProcess(ahe3ProcEl);
196 
197  // inelastic
198  G4HadronInelasticProcess* ahe3ProcInel = new G4HadronInelasticProcess("anti_He3Inelastic", G4AntiHe3::Definition());
199  ahe3ProcInel->RegisterMe(m_ftfp);
200  ahe3ProcInel->AddDataSet(antiNucleonData);
201  procMan->AddDiscreteProcess(ahe3ProcInel);
202 
203  // stopping
204  G4HadronicAbsorptionFritiof* ahe3Absorb = new G4HadronicAbsorptionFritiof();
205  procMan->AddRestProcess(ahe3Absorb);
206 
208  // Anti-alpha //
210 
211  procMan = G4AntiAlpha::AntiAlpha()->GetProcessManager();
212 
213  // elastic
214  G4HadronElasticProcess* aaProcEl = new G4HadronElasticProcess;
215  aaProcEl->RegisterMe(loelModel);
216  aaProcEl->RegisterMe(anucEl);
217  aaProcEl->AddDataSet(anucElxs);
218  procMan->AddDiscreteProcess(aaProcEl);
219 
220  // inelastic
221  G4HadronInelasticProcess* aaProcInel = new G4HadronInelasticProcess("anti_alpha_Inelastic", G4AntiAlpha::Definition());
222  aaProcInel->RegisterMe(m_ftfp);
223  aaProcInel->AddDataSet(antiNucleonData);
224  procMan->AddDiscreteProcess(aaProcInel);
225 
226  // stopping
227  G4HadronicAbsorptionFritiof* aaAbsorb = new G4HadronicAbsorptionFritiof();
228  procMan->AddRestProcess(aaAbsorb);
229 
231  // Anti-lambda //
233 
234  procMan = G4AntiLambda::AntiLambda()->GetProcessManager();
235 
236  // elastic
237  G4HadronElasticProcess* alamProcEl = new G4HadronElasticProcess;
238  alamProcEl->RegisterMe(elModel);
239  alamProcEl->AddDataSet(hchipsElastic);
240  procMan->AddDiscreteProcess(alamProcEl);
241 
242  // inelastic
243  G4HadronInelasticProcess* alamProcInel = new G4HadronInelasticProcess("anti-lambdaInelastic", G4AntiLambda::Definition());
244  alamProcInel->RegisterMe(m_ftfp);
245  alamProcInel->AddDataSet(hchipsInelastic);
246  procMan->AddDiscreteProcess(alamProcInel);
247 
249  // Anti-sigma+ //
251 
252  procMan = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager();
253 
254  // elastic
255  G4HadronElasticProcess* aspProcEl = new G4HadronElasticProcess;
256  aspProcEl->RegisterMe(elModel);
257  aspProcEl->AddDataSet(hchipsElastic);
258  procMan->AddDiscreteProcess(aspProcEl);
259 
260  // inelastic
261  G4HadronInelasticProcess* aspProcInel = new G4HadronInelasticProcess("anti_sigma+Inelastic", G4AntiSigmaPlus::Definition());
262  aspProcInel->RegisterMe(m_ftfp);
263  aspProcInel->AddDataSet(hchipsInelastic);
264  procMan->AddDiscreteProcess(aspProcInel);
265 
266  // stopping
267  G4HadronicAbsorptionFritiof* aspAbsorb = new G4HadronicAbsorptionFritiof();
268  procMan->AddRestProcess(aspAbsorb);
269 
271  // Anti-sigma- //
273 
274  procMan = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager();
275 
276  // elastic
277  G4HadronElasticProcess* asmProcEl = new G4HadronElasticProcess;
278  asmProcEl->RegisterMe(elModel);
279  asmProcEl->AddDataSet(hchipsElastic);
280  procMan->AddDiscreteProcess(asmProcEl);
281 
282  // inelastic
283  G4HadronInelasticProcess* asmProcInel = new G4HadronInelasticProcess("anti_sigma-Inelastic", G4AntiSigmaMinus::Definition());
284  asmProcInel->RegisterMe(m_ftfp);
285  asmProcInel->AddDataSet(hchipsInelastic);
286  procMan->AddDiscreteProcess(asmProcInel);
287 
289  // Anti-xi0 //
291 
292  procMan = G4AntiXiZero::AntiXiZero()->GetProcessManager();
293 
294  // elastic
295  G4HadronElasticProcess* axzProcEl = new G4HadronElasticProcess;
296  axzProcEl->RegisterMe(elModel);
297  axzProcEl->AddDataSet(hchipsElastic);
298  procMan->AddDiscreteProcess(axzProcEl);
299 
300  // inelastic
301  G4HadronInelasticProcess* axzProcInel = new G4HadronInelasticProcess("anti_xi0Inelastic", G4AntiXiZero::Definition());
302  axzProcInel->RegisterMe(m_ftfp);
303  axzProcInel->AddDataSet(hchipsInelastic);
304  procMan->AddDiscreteProcess(axzProcInel);
305 
307  // Anti-xi- //
309 
310  procMan = G4AntiXiMinus::AntiXiMinus()->GetProcessManager();
311 
312  // elastic
313  G4HadronElasticProcess* axmProcEl = new G4HadronElasticProcess;
314  axmProcEl->RegisterMe(elModel);
315  axmProcEl->AddDataSet(hchipsElastic);
316  procMan->AddDiscreteProcess(axmProcEl);
317 
318  // inelastic
319  G4HadronInelasticProcess* axmProcInel = new G4HadronInelasticProcess("anti_xi-Inelastic", G4AntiXiMinus::Definition());
320  axmProcInel->RegisterMe(m_ftfp);
321  axmProcInel->AddDataSet(hchipsInelastic);
322  procMan->AddDiscreteProcess(axmProcInel);
323 
325  // Anti-omega- //
327 
328  procMan = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager();
329 
330  // elastic
331  G4HadronElasticProcess* aomProcEl = new G4HadronElasticProcess;
332  aomProcEl->RegisterMe(elModel);
333  aomProcEl->AddDataSet(hchipsElastic);
334  procMan->AddDiscreteProcess(aomProcEl);
335 
336  // inelastic
337  G4HadronInelasticProcess* aomProcInel = new G4HadronInelasticProcess("anti_omega-Inelastic", G4AntiOmegaMinus::Definition());
338  aomProcInel->RegisterMe(m_ftfp);
339  aomProcInel->AddDataSet(hchipsInelastic);
340  procMan->AddDiscreteProcess(aomProcInel);
341 
342 }
343 
Abstract base class for different kinds of events.