Belle II Software  release-06-02-00
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 "G4AntiProtonInelasticProcess.hh"
13 #include "G4AntiNeutronInelasticProcess.hh"
14 #include "G4AntiLambdaInelasticProcess.hh"
15 #include "G4AntiSigmaPlusInelasticProcess.hh"
16 #include "G4AntiSigmaMinusInelasticProcess.hh"
17 #include "G4AntiXiZeroInelasticProcess.hh"
18 #include "G4AntiXiMinusInelasticProcess.hh"
19 #include "G4AntiOmegaMinusInelasticProcess.hh"
20 
21 #include "G4AntiDeuteronInelasticProcess.hh"
22 #include "G4AntiTritonInelasticProcess.hh"
23 #include "G4AntiHe3InelasticProcess.hh"
24 #include "G4AntiAlphaInelasticProcess.hh"
25 #include "G4HadronElasticProcess.hh"
26 
27 #include "G4TheoFSGenerator.hh"
28 #include "G4FTFModel.hh"
29 #include "G4ExcitedStringDecay.hh"
30 #include "G4LundStringFragmentation.hh"
31 #include "G4GeneratorPrecompoundInterface.hh"
32 #include "G4HadronElastic.hh"
33 #include "G4AntiNuclElastic.hh"
34 #include "G4HadronicAbsorptionFritiof.hh"
35 
36 #include "G4ChipsAntiBaryonElasticXS.hh"
37 #include "G4ChipsAntiBaryonInelasticXS.hh"
38 #include "G4ComponentAntiNuclNuclearXS.hh"
39 #include "G4CrossSectionInelastic.hh"
40 #include "G4CrossSectionElastic.hh"
41 
42 #include "G4SystemOfUnits.hh"
43 
44 using namespace Belle2;
45 using namespace Simulation;
46 
47 
48 AntiBaryonPhysics::AntiBaryonPhysics()
49  : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
50  m_fragModel(nullptr), m_preCompoundModel(nullptr),
51  m_theAntiNucleonXS(nullptr)
52 {}
53 
54 
55 AntiBaryonPhysics::~AntiBaryonPhysics()
56 {
57  delete m_stringDecay;
58  delete m_stringModel;
59  delete m_fragModel;
60  delete m_preCompoundModel;
61 
62  delete m_theAntiNucleonXS;
63 }
64 
65 
66 void AntiBaryonPhysics::ConstructParticle()
67 {}
68 
69 
70 void AntiBaryonPhysics::ConstructProcess()
71 {
72  G4ProcessManager* procMan = 0;
73 
74  // One elastic model for all anti-hyperon and anti-neutron energies
75  G4HadronElastic* elModel = new G4HadronElastic();
76 
77  // Elastic models for anti-(p, d, t, He3, alpha)
78  G4HadronElastic* loelModel = new G4HadronElastic();
79  loelModel->SetMaxEnergy(100.1 * MeV);
80 
81  G4AntiNuclElastic* anucEl = new G4AntiNuclElastic();
82  anucEl->SetMinEnergy(100.0 * MeV);
83 
84  // Use FTFP for all energies ==>> eventually replace this with new class FTFPInterface
85  m_ftfp = new G4TheoFSGenerator("FTFP");
86  m_stringModel = new G4FTFModel;
87  m_stringDecay =
88  new G4ExcitedStringDecay(m_fragModel = new G4LundStringFragmentation);
89  m_stringModel->SetFragmentationModel(m_stringDecay);
90  m_preCompoundModel = new G4GeneratorPrecompoundInterface();
91 
92  m_ftfp->SetHighEnergyGenerator(m_stringModel);
93  m_ftfp->SetTransport(m_preCompoundModel);
94  m_ftfp->SetMinEnergy(0.0);
95  m_ftfp->SetMaxEnergy(100 * TeV);
96 
97  // Elastic data set
98  G4CrossSectionElastic* anucElxs =
99  new G4CrossSectionElastic(anucEl->GetComponentCrossSection());
100 
101  // Inelastic cross section sets
102  m_theAntiNucleonXS = new G4ComponentAntiNuclNuclearXS;
103  G4VCrossSectionDataSet* antiNucleonData =
104  new G4CrossSectionInelastic(m_theAntiNucleonXS);
105 
106  G4ChipsAntiBaryonElasticXS* hchipsElastic = new G4ChipsAntiBaryonElasticXS;
107  G4ChipsAntiBaryonInelasticXS* hchipsInelastic = new G4ChipsAntiBaryonInelasticXS;
108 
110  // Anti-proton //
112 
113  procMan = G4AntiProton::AntiProton()->GetProcessManager();
114 
115  // elastic
116  G4HadronElasticProcess* apProcEl = new G4HadronElasticProcess;
117  apProcEl->RegisterMe(loelModel);
118  apProcEl->RegisterMe(anucEl);
119  apProcEl->AddDataSet(anucElxs);
120  procMan->AddDiscreteProcess(apProcEl);
121 
122  // inelastic
123  G4AntiProtonInelasticProcess* apProcInel = new G4AntiProtonInelasticProcess;
124  apProcInel->RegisterMe(m_ftfp);
125  apProcInel->AddDataSet(antiNucleonData);
126  procMan->AddDiscreteProcess(apProcInel);
127 
128  // stopping
129  G4HadronicAbsorptionFritiof* apAbsorb = new G4HadronicAbsorptionFritiof();
130  procMan->AddRestProcess(apAbsorb);
131 
133  // Anti-neutron //
135 
136  procMan = G4AntiNeutron::AntiNeutron()->GetProcessManager();
137 
138  // elastic
139  G4HadronElasticProcess* anProcEl = new G4HadronElasticProcess;
140  anProcEl->RegisterMe(elModel);
141  anProcEl->AddDataSet(hchipsElastic);
142  procMan->AddDiscreteProcess(anProcEl);
143 
144  // inelastic
145  G4AntiNeutronInelasticProcess* anProcInel = new G4AntiNeutronInelasticProcess;
146  anProcInel->RegisterMe(m_ftfp);
147  anProcInel->AddDataSet(antiNucleonData);
148  procMan->AddDiscreteProcess(anProcInel);
149 
151  // Anti-deuteron //
153 
154  procMan = G4AntiDeuteron::AntiDeuteron()->GetProcessManager();
155 
156  // elastic
157  G4HadronElasticProcess* adProcEl = new G4HadronElasticProcess;
158  adProcEl->RegisterMe(loelModel);
159  adProcEl->RegisterMe(anucEl);
160  adProcEl->AddDataSet(anucElxs);
161  procMan->AddDiscreteProcess(adProcEl);
162 
163  // inelastic
164  G4AntiDeuteronInelasticProcess* adProcInel = new G4AntiDeuteronInelasticProcess;
165  adProcInel->RegisterMe(m_ftfp);
166  adProcInel->AddDataSet(antiNucleonData);
167  procMan->AddDiscreteProcess(adProcInel);
168 
169  // stopping
170  G4HadronicAbsorptionFritiof* adAbsorb = new G4HadronicAbsorptionFritiof();
171  procMan->AddRestProcess(adAbsorb);
172 
174  // Anti-triton //
176 
177  procMan = G4AntiTriton::AntiTriton()->GetProcessManager();
178 
179  // elastic
180  G4HadronElasticProcess* atProcEl = new G4HadronElasticProcess;
181  atProcEl->RegisterMe(loelModel);
182  atProcEl->RegisterMe(anucEl);
183  atProcEl->AddDataSet(anucElxs);
184  procMan->AddDiscreteProcess(atProcEl);
185 
186  // inelastic
187  G4AntiTritonInelasticProcess* atProcInel = new G4AntiTritonInelasticProcess;
188  atProcInel->RegisterMe(m_ftfp);
189  atProcInel->AddDataSet(antiNucleonData);
190  procMan->AddDiscreteProcess(atProcInel);
191 
192  // stopping
193  G4HadronicAbsorptionFritiof* atAbsorb = new G4HadronicAbsorptionFritiof();
194  procMan->AddRestProcess(atAbsorb);
195 
197  // Anti-He3 //
199 
200  procMan = G4AntiHe3::AntiHe3()->GetProcessManager();
201 
202  // elastic
203  G4HadronElasticProcess* ahe3ProcEl = new G4HadronElasticProcess;
204  ahe3ProcEl->RegisterMe(loelModel);
205  ahe3ProcEl->RegisterMe(anucEl);
206  ahe3ProcEl->AddDataSet(anucElxs);
207  procMan->AddDiscreteProcess(ahe3ProcEl);
208 
209  // inelastic
210  G4AntiHe3InelasticProcess* ahe3ProcInel = new G4AntiHe3InelasticProcess;
211  ahe3ProcInel->RegisterMe(m_ftfp);
212  ahe3ProcInel->AddDataSet(antiNucleonData);
213  procMan->AddDiscreteProcess(ahe3ProcInel);
214 
215  // stopping
216  G4HadronicAbsorptionFritiof* ahe3Absorb = new G4HadronicAbsorptionFritiof();
217  procMan->AddRestProcess(ahe3Absorb);
218 
220  // Anti-alpha //
222 
223  procMan = G4AntiAlpha::AntiAlpha()->GetProcessManager();
224 
225  // elastic
226  G4HadronElasticProcess* aaProcEl = new G4HadronElasticProcess;
227  aaProcEl->RegisterMe(loelModel);
228  aaProcEl->RegisterMe(anucEl);
229  aaProcEl->AddDataSet(anucElxs);
230  procMan->AddDiscreteProcess(aaProcEl);
231 
232  // inelastic
233  G4AntiAlphaInelasticProcess* aaProcInel = new G4AntiAlphaInelasticProcess;
234  aaProcInel->RegisterMe(m_ftfp);
235  aaProcInel->AddDataSet(antiNucleonData);
236  procMan->AddDiscreteProcess(aaProcInel);
237 
238  // stopping
239  G4HadronicAbsorptionFritiof* aaAbsorb = new G4HadronicAbsorptionFritiof();
240  procMan->AddRestProcess(aaAbsorb);
241 
243  // Anti-lambda //
245 
246  procMan = G4AntiLambda::AntiLambda()->GetProcessManager();
247 
248  // elastic
249  G4HadronElasticProcess* alamProcEl = new G4HadronElasticProcess;
250  alamProcEl->RegisterMe(elModel);
251  alamProcEl->AddDataSet(hchipsElastic);
252  procMan->AddDiscreteProcess(alamProcEl);
253 
254  // inelastic
255  G4AntiLambdaInelasticProcess* alamProcInel = new G4AntiLambdaInelasticProcess;
256  alamProcInel->RegisterMe(m_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  aspProcEl->AddDataSet(hchipsElastic);
270  procMan->AddDiscreteProcess(aspProcEl);
271 
272  // inelastic
273  G4AntiSigmaPlusInelasticProcess* aspProcInel = new G4AntiSigmaPlusInelasticProcess;
274  aspProcInel->RegisterMe(m_ftfp);
275  aspProcInel->AddDataSet(hchipsInelastic);
276  procMan->AddDiscreteProcess(aspProcInel);
277 
278  // stopping
279  G4HadronicAbsorptionFritiof* aspAbsorb = new G4HadronicAbsorptionFritiof();
280  procMan->AddRestProcess(aspAbsorb);
281 
283  // Anti-sigma- //
285 
286  procMan = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager();
287 
288  // elastic
289  G4HadronElasticProcess* asmProcEl = new G4HadronElasticProcess;
290  asmProcEl->RegisterMe(elModel);
291  asmProcEl->AddDataSet(hchipsElastic);
292  procMan->AddDiscreteProcess(asmProcEl);
293 
294  // inelastic
295  G4AntiSigmaMinusInelasticProcess* asmProcInel = new G4AntiSigmaMinusInelasticProcess;
296  asmProcInel->RegisterMe(m_ftfp);
297  asmProcInel->AddDataSet(hchipsInelastic);
298  procMan->AddDiscreteProcess(asmProcInel);
299 
301  // Anti-xi0 //
303 
304  procMan = G4AntiXiZero::AntiXiZero()->GetProcessManager();
305 
306  // elastic
307  G4HadronElasticProcess* axzProcEl = new G4HadronElasticProcess;
308  axzProcEl->RegisterMe(elModel);
309  axzProcEl->AddDataSet(hchipsElastic);
310  procMan->AddDiscreteProcess(axzProcEl);
311 
312  // inelastic
313  G4AntiXiZeroInelasticProcess* axzProcInel = new G4AntiXiZeroInelasticProcess;
314  axzProcInel->RegisterMe(m_ftfp);
315  axzProcInel->AddDataSet(hchipsInelastic);
316  procMan->AddDiscreteProcess(axzProcInel);
317 
319  // Anti-xi- //
321 
322  procMan = G4AntiXiMinus::AntiXiMinus()->GetProcessManager();
323 
324  // elastic
325  G4HadronElasticProcess* axmProcEl = new G4HadronElasticProcess;
326  axmProcEl->RegisterMe(elModel);
327  axmProcEl->AddDataSet(hchipsElastic);
328  procMan->AddDiscreteProcess(axmProcEl);
329 
330  // inelastic
331  G4AntiXiMinusInelasticProcess* axmProcInel = new G4AntiXiMinusInelasticProcess;
332  axmProcInel->RegisterMe(m_ftfp);
333  axmProcInel->AddDataSet(hchipsInelastic);
334  procMan->AddDiscreteProcess(axmProcInel);
335 
337  // Anti-omega- //
339 
340  procMan = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager();
341 
342  // elastic
343  G4HadronElasticProcess* aomProcEl = new G4HadronElasticProcess;
344  aomProcEl->RegisterMe(elModel);
345  aomProcEl->AddDataSet(hchipsElastic);
346  procMan->AddDiscreteProcess(aomProcEl);
347 
348  // inelastic
349  G4AntiOmegaMinusInelasticProcess* aomProcInel = new G4AntiOmegaMinusInelasticProcess;
350  aomProcInel->RegisterMe(m_ftfp);
351  aomProcInel->AddDataSet(hchipsInelastic);
352  procMan->AddDiscreteProcess(aomProcInel);
353 
354 }
355 
Abstract base class for different kinds of events.