Belle II Software development
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
32using namespace Belle2;
33using namespace Simulation;
34
35
36AntiBaryonPhysics::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
43AntiBaryonPhysics::~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
54void AntiBaryonPhysics::ConstructParticle()
55{}
56
57
58void 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.