9#include <simulation/physicslist/AntiBaryonPhysics.h>
11#include "G4ProcessManager.hh"
12#include "G4HadronInelasticProcess.hh"
13#include "G4HadronElasticProcess.hh"
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"
24#include "G4ChipsAntiBaryonElasticXS.hh"
25#include "G4ChipsAntiBaryonInelasticXS.hh"
26#include "G4ComponentAntiNuclNuclearXS.hh"
27#include "G4CrossSectionInelastic.hh"
28#include "G4CrossSectionElastic.hh"
30#include "G4SystemOfUnits.hh"
33using namespace Simulation;
36AntiBaryonPhysics::AntiBaryonPhysics()
37 : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
38 m_fragModel(nullptr), m_preCompoundModel(nullptr),
39 m_theAntiNucleonXS(nullptr)
43AntiBaryonPhysics::~AntiBaryonPhysics()
48 delete m_preCompoundModel;
50 delete m_theAntiNucleonXS;
54void AntiBaryonPhysics::ConstructParticle()
58void AntiBaryonPhysics::ConstructProcess()
60 G4ProcessManager* procMan = 0;
63 G4HadronElastic* elModel =
new G4HadronElastic();
66 G4HadronElastic* loelModel =
new G4HadronElastic();
67 loelModel->SetMaxEnergy(100.1 * MeV);
69 G4AntiNuclElastic* anucEl =
new G4AntiNuclElastic();
70 anucEl->SetMinEnergy(100.0 * MeV);
73 m_ftfp =
new G4TheoFSGenerator(
"FTFP");
74 m_stringModel =
new G4FTFModel;
76 new G4ExcitedStringDecay(m_fragModel =
new G4LundStringFragmentation);
77 m_stringModel->SetFragmentationModel(m_stringDecay);
78 m_preCompoundModel =
new G4GeneratorPrecompoundInterface();
80 m_ftfp->SetHighEnergyGenerator(m_stringModel);
81 m_ftfp->SetTransport(m_preCompoundModel);
82 m_ftfp->SetMinEnergy(0.0);
83 m_ftfp->SetMaxEnergy(100 * TeV);
86 G4CrossSectionElastic* anucElxs =
87 new G4CrossSectionElastic(anucEl->GetComponentCrossSection());
90 m_theAntiNucleonXS =
new G4ComponentAntiNuclNuclearXS;
91 G4VCrossSectionDataSet* antiNucleonData =
92 new G4CrossSectionInelastic(m_theAntiNucleonXS);
94 G4ChipsAntiBaryonElasticXS* hchipsElastic =
new G4ChipsAntiBaryonElasticXS;
95 G4ChipsAntiBaryonInelasticXS* hchipsInelastic =
new G4ChipsAntiBaryonInelasticXS;
101 procMan = G4AntiProton::AntiProton()->GetProcessManager();
104 G4HadronElasticProcess* apProcEl =
new G4HadronElasticProcess;
105 apProcEl->RegisterMe(loelModel);
106 apProcEl->RegisterMe(anucEl);
107 apProcEl->AddDataSet(anucElxs);
108 procMan->AddDiscreteProcess(apProcEl);
111 G4HadronInelasticProcess* apProcInel =
new G4HadronInelasticProcess(
"anti_protonInelastic", G4AntiProton::Definition());
112 apProcInel->RegisterMe(m_ftfp);
113 apProcInel->AddDataSet(antiNucleonData);
114 procMan->AddDiscreteProcess(apProcInel);
117 G4HadronicAbsorptionFritiof* apAbsorb =
new G4HadronicAbsorptionFritiof();
118 procMan->AddRestProcess(apAbsorb);
124 procMan = G4AntiNeutron::AntiNeutron()->GetProcessManager();
127 G4HadronElasticProcess* anProcEl =
new G4HadronElasticProcess;
128 anProcEl->RegisterMe(elModel);
129 anProcEl->AddDataSet(hchipsElastic);
130 procMan->AddDiscreteProcess(anProcEl);
133 G4HadronInelasticProcess* anProcInel =
new G4HadronInelasticProcess(
"anti_neutronInelastic", G4AntiNeutron::Definition());
134 anProcInel->RegisterMe(m_ftfp);
135 anProcInel->AddDataSet(antiNucleonData);
136 procMan->AddDiscreteProcess(anProcInel);
142 procMan = G4AntiDeuteron::AntiDeuteron()->GetProcessManager();
145 G4HadronElasticProcess* adProcEl =
new G4HadronElasticProcess;
146 adProcEl->RegisterMe(loelModel);
147 adProcEl->RegisterMe(anucEl);
148 adProcEl->AddDataSet(anucElxs);
149 procMan->AddDiscreteProcess(adProcEl);
152 G4HadronInelasticProcess* adProcInel =
new G4HadronInelasticProcess(
"anti_deuteronInelastic", G4AntiDeuteron::Definition());
153 adProcInel->RegisterMe(m_ftfp);
154 adProcInel->AddDataSet(antiNucleonData);
155 procMan->AddDiscreteProcess(adProcInel);
158 G4HadronicAbsorptionFritiof* adAbsorb =
new G4HadronicAbsorptionFritiof();
159 procMan->AddRestProcess(adAbsorb);
165 procMan = G4AntiTriton::AntiTriton()->GetProcessManager();
168 G4HadronElasticProcess* atProcEl =
new G4HadronElasticProcess;
169 atProcEl->RegisterMe(loelModel);
170 atProcEl->RegisterMe(anucEl);
171 atProcEl->AddDataSet(anucElxs);
172 procMan->AddDiscreteProcess(atProcEl);
175 G4HadronInelasticProcess* atProcInel =
new G4HadronInelasticProcess(
"anti_tritonInelastic", G4AntiTriton::Definition());
176 atProcInel->RegisterMe(m_ftfp);
177 atProcInel->AddDataSet(antiNucleonData);
178 procMan->AddDiscreteProcess(atProcInel);
181 G4HadronicAbsorptionFritiof* atAbsorb =
new G4HadronicAbsorptionFritiof();
182 procMan->AddRestProcess(atAbsorb);
188 procMan = G4AntiHe3::AntiHe3()->GetProcessManager();
191 G4HadronElasticProcess* ahe3ProcEl =
new G4HadronElasticProcess;
192 ahe3ProcEl->RegisterMe(loelModel);
193 ahe3ProcEl->RegisterMe(anucEl);
194 ahe3ProcEl->AddDataSet(anucElxs);
195 procMan->AddDiscreteProcess(ahe3ProcEl);
198 G4HadronInelasticProcess* ahe3ProcInel =
new G4HadronInelasticProcess(
"anti_He3Inelastic", G4AntiHe3::Definition());
199 ahe3ProcInel->RegisterMe(m_ftfp);
200 ahe3ProcInel->AddDataSet(antiNucleonData);
201 procMan->AddDiscreteProcess(ahe3ProcInel);
204 G4HadronicAbsorptionFritiof* ahe3Absorb =
new G4HadronicAbsorptionFritiof();
205 procMan->AddRestProcess(ahe3Absorb);
211 procMan = G4AntiAlpha::AntiAlpha()->GetProcessManager();
214 G4HadronElasticProcess* aaProcEl =
new G4HadronElasticProcess;
215 aaProcEl->RegisterMe(loelModel);
216 aaProcEl->RegisterMe(anucEl);
217 aaProcEl->AddDataSet(anucElxs);
218 procMan->AddDiscreteProcess(aaProcEl);
221 G4HadronInelasticProcess* aaProcInel =
new G4HadronInelasticProcess(
"anti_alpha_Inelastic", G4AntiAlpha::Definition());
222 aaProcInel->RegisterMe(m_ftfp);
223 aaProcInel->AddDataSet(antiNucleonData);
224 procMan->AddDiscreteProcess(aaProcInel);
227 G4HadronicAbsorptionFritiof* aaAbsorb =
new G4HadronicAbsorptionFritiof();
228 procMan->AddRestProcess(aaAbsorb);
234 procMan = G4AntiLambda::AntiLambda()->GetProcessManager();
237 G4HadronElasticProcess* alamProcEl =
new G4HadronElasticProcess;
238 alamProcEl->RegisterMe(elModel);
239 alamProcEl->AddDataSet(hchipsElastic);
240 procMan->AddDiscreteProcess(alamProcEl);
243 G4HadronInelasticProcess* alamProcInel =
new G4HadronInelasticProcess(
"anti-lambdaInelastic", G4AntiLambda::Definition());
244 alamProcInel->RegisterMe(m_ftfp);
245 alamProcInel->AddDataSet(hchipsInelastic);
246 procMan->AddDiscreteProcess(alamProcInel);
252 procMan = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager();
255 G4HadronElasticProcess* aspProcEl =
new G4HadronElasticProcess;
256 aspProcEl->RegisterMe(elModel);
257 aspProcEl->AddDataSet(hchipsElastic);
258 procMan->AddDiscreteProcess(aspProcEl);
261 G4HadronInelasticProcess* aspProcInel =
new G4HadronInelasticProcess(
"anti_sigma+Inelastic", G4AntiSigmaPlus::Definition());
262 aspProcInel->RegisterMe(m_ftfp);
263 aspProcInel->AddDataSet(hchipsInelastic);
264 procMan->AddDiscreteProcess(aspProcInel);
267 G4HadronicAbsorptionFritiof* aspAbsorb =
new G4HadronicAbsorptionFritiof();
268 procMan->AddRestProcess(aspAbsorb);
274 procMan = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager();
277 G4HadronElasticProcess* asmProcEl =
new G4HadronElasticProcess;
278 asmProcEl->RegisterMe(elModel);
279 asmProcEl->AddDataSet(hchipsElastic);
280 procMan->AddDiscreteProcess(asmProcEl);
283 G4HadronInelasticProcess* asmProcInel =
new G4HadronInelasticProcess(
"anti_sigma-Inelastic", G4AntiSigmaMinus::Definition());
284 asmProcInel->RegisterMe(m_ftfp);
285 asmProcInel->AddDataSet(hchipsInelastic);
286 procMan->AddDiscreteProcess(asmProcInel);
292 procMan = G4AntiXiZero::AntiXiZero()->GetProcessManager();
295 G4HadronElasticProcess* axzProcEl =
new G4HadronElasticProcess;
296 axzProcEl->RegisterMe(elModel);
297 axzProcEl->AddDataSet(hchipsElastic);
298 procMan->AddDiscreteProcess(axzProcEl);
301 G4HadronInelasticProcess* axzProcInel =
new G4HadronInelasticProcess(
"anti_xi0Inelastic", G4AntiXiZero::Definition());
302 axzProcInel->RegisterMe(m_ftfp);
303 axzProcInel->AddDataSet(hchipsInelastic);
304 procMan->AddDiscreteProcess(axzProcInel);
310 procMan = G4AntiXiMinus::AntiXiMinus()->GetProcessManager();
313 G4HadronElasticProcess* axmProcEl =
new G4HadronElasticProcess;
314 axmProcEl->RegisterMe(elModel);
315 axmProcEl->AddDataSet(hchipsElastic);
316 procMan->AddDiscreteProcess(axmProcEl);
319 G4HadronInelasticProcess* axmProcInel =
new G4HadronInelasticProcess(
"anti_xi-Inelastic", G4AntiXiMinus::Definition());
320 axmProcInel->RegisterMe(m_ftfp);
321 axmProcInel->AddDataSet(hchipsInelastic);
322 procMan->AddDiscreteProcess(axmProcInel);
328 procMan = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager();
331 G4HadronElasticProcess* aomProcEl =
new G4HadronElasticProcess;
332 aomProcEl->RegisterMe(elModel);
333 aomProcEl->AddDataSet(hchipsElastic);
334 procMan->AddDiscreteProcess(aomProcEl);
337 G4HadronInelasticProcess* aomProcInel =
new G4HadronInelasticProcess(
"anti_omega-Inelastic", G4AntiOmegaMinus::Definition());
338 aomProcInel->RegisterMe(m_ftfp);
339 aomProcInel->AddDataSet(hchipsInelastic);
340 procMan->AddDiscreteProcess(aomProcInel);
Abstract base class for different kinds of events.