9 #include <simulation/physicslist/AntiBaryonPhysics.h>
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"
21 #include "G4AntiDeuteronInelasticProcess.hh"
22 #include "G4AntiTritonInelasticProcess.hh"
23 #include "G4AntiHe3InelasticProcess.hh"
24 #include "G4AntiAlphaInelasticProcess.hh"
25 #include "G4HadronElasticProcess.hh"
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"
36 #include "G4ChipsAntiBaryonElasticXS.hh"
37 #include "G4ChipsAntiBaryonInelasticXS.hh"
38 #include "G4ComponentAntiNuclNuclearXS.hh"
39 #include "G4CrossSectionInelastic.hh"
40 #include "G4CrossSectionElastic.hh"
42 #include "G4SystemOfUnits.hh"
45 using namespace Simulation;
48 AntiBaryonPhysics::AntiBaryonPhysics()
49 : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
50 m_fragModel(nullptr), m_preCompoundModel(nullptr),
51 m_theAntiNucleonXS(nullptr)
55 AntiBaryonPhysics::~AntiBaryonPhysics()
60 delete m_preCompoundModel;
62 delete m_theAntiNucleonXS;
66 void AntiBaryonPhysics::ConstructParticle()
70 void AntiBaryonPhysics::ConstructProcess()
72 G4ProcessManager* procMan = 0;
75 G4HadronElastic* elModel =
new G4HadronElastic();
78 G4HadronElastic* loelModel =
new G4HadronElastic();
79 loelModel->SetMaxEnergy(100.1 * MeV);
81 G4AntiNuclElastic* anucEl =
new G4AntiNuclElastic();
82 anucEl->SetMinEnergy(100.0 * MeV);
85 m_ftfp =
new G4TheoFSGenerator(
"FTFP");
86 m_stringModel =
new G4FTFModel;
88 new G4ExcitedStringDecay(m_fragModel =
new G4LundStringFragmentation);
89 m_stringModel->SetFragmentationModel(m_stringDecay);
90 m_preCompoundModel =
new G4GeneratorPrecompoundInterface();
92 m_ftfp->SetHighEnergyGenerator(m_stringModel);
93 m_ftfp->SetTransport(m_preCompoundModel);
94 m_ftfp->SetMinEnergy(0.0);
95 m_ftfp->SetMaxEnergy(100 * TeV);
98 G4CrossSectionElastic* anucElxs =
99 new G4CrossSectionElastic(anucEl->GetComponentCrossSection());
102 m_theAntiNucleonXS =
new G4ComponentAntiNuclNuclearXS;
103 G4VCrossSectionDataSet* antiNucleonData =
104 new G4CrossSectionInelastic(m_theAntiNucleonXS);
106 G4ChipsAntiBaryonElasticXS* hchipsElastic =
new G4ChipsAntiBaryonElasticXS;
107 G4ChipsAntiBaryonInelasticXS* hchipsInelastic =
new G4ChipsAntiBaryonInelasticXS;
113 procMan = G4AntiProton::AntiProton()->GetProcessManager();
116 G4HadronElasticProcess* apProcEl =
new G4HadronElasticProcess;
117 apProcEl->RegisterMe(loelModel);
118 apProcEl->RegisterMe(anucEl);
119 apProcEl->AddDataSet(anucElxs);
120 procMan->AddDiscreteProcess(apProcEl);
123 G4AntiProtonInelasticProcess* apProcInel =
new G4AntiProtonInelasticProcess;
124 apProcInel->RegisterMe(m_ftfp);
125 apProcInel->AddDataSet(antiNucleonData);
126 procMan->AddDiscreteProcess(apProcInel);
129 G4HadronicAbsorptionFritiof* apAbsorb =
new G4HadronicAbsorptionFritiof();
130 procMan->AddRestProcess(apAbsorb);
136 procMan = G4AntiNeutron::AntiNeutron()->GetProcessManager();
139 G4HadronElasticProcess* anProcEl =
new G4HadronElasticProcess;
140 anProcEl->RegisterMe(elModel);
141 anProcEl->AddDataSet(hchipsElastic);
142 procMan->AddDiscreteProcess(anProcEl);
145 G4AntiNeutronInelasticProcess* anProcInel =
new G4AntiNeutronInelasticProcess;
146 anProcInel->RegisterMe(m_ftfp);
147 anProcInel->AddDataSet(antiNucleonData);
148 procMan->AddDiscreteProcess(anProcInel);
154 procMan = G4AntiDeuteron::AntiDeuteron()->GetProcessManager();
157 G4HadronElasticProcess* adProcEl =
new G4HadronElasticProcess;
158 adProcEl->RegisterMe(loelModel);
159 adProcEl->RegisterMe(anucEl);
160 adProcEl->AddDataSet(anucElxs);
161 procMan->AddDiscreteProcess(adProcEl);
164 G4AntiDeuteronInelasticProcess* adProcInel =
new G4AntiDeuteronInelasticProcess;
165 adProcInel->RegisterMe(m_ftfp);
166 adProcInel->AddDataSet(antiNucleonData);
167 procMan->AddDiscreteProcess(adProcInel);
170 G4HadronicAbsorptionFritiof* adAbsorb =
new G4HadronicAbsorptionFritiof();
171 procMan->AddRestProcess(adAbsorb);
177 procMan = G4AntiTriton::AntiTriton()->GetProcessManager();
180 G4HadronElasticProcess* atProcEl =
new G4HadronElasticProcess;
181 atProcEl->RegisterMe(loelModel);
182 atProcEl->RegisterMe(anucEl);
183 atProcEl->AddDataSet(anucElxs);
184 procMan->AddDiscreteProcess(atProcEl);
187 G4AntiTritonInelasticProcess* atProcInel =
new G4AntiTritonInelasticProcess;
188 atProcInel->RegisterMe(m_ftfp);
189 atProcInel->AddDataSet(antiNucleonData);
190 procMan->AddDiscreteProcess(atProcInel);
193 G4HadronicAbsorptionFritiof* atAbsorb =
new G4HadronicAbsorptionFritiof();
194 procMan->AddRestProcess(atAbsorb);
200 procMan = G4AntiHe3::AntiHe3()->GetProcessManager();
203 G4HadronElasticProcess* ahe3ProcEl =
new G4HadronElasticProcess;
204 ahe3ProcEl->RegisterMe(loelModel);
205 ahe3ProcEl->RegisterMe(anucEl);
206 ahe3ProcEl->AddDataSet(anucElxs);
207 procMan->AddDiscreteProcess(ahe3ProcEl);
210 G4AntiHe3InelasticProcess* ahe3ProcInel =
new G4AntiHe3InelasticProcess;
211 ahe3ProcInel->RegisterMe(m_ftfp);
212 ahe3ProcInel->AddDataSet(antiNucleonData);
213 procMan->AddDiscreteProcess(ahe3ProcInel);
216 G4HadronicAbsorptionFritiof* ahe3Absorb =
new G4HadronicAbsorptionFritiof();
217 procMan->AddRestProcess(ahe3Absorb);
223 procMan = G4AntiAlpha::AntiAlpha()->GetProcessManager();
226 G4HadronElasticProcess* aaProcEl =
new G4HadronElasticProcess;
227 aaProcEl->RegisterMe(loelModel);
228 aaProcEl->RegisterMe(anucEl);
229 aaProcEl->AddDataSet(anucElxs);
230 procMan->AddDiscreteProcess(aaProcEl);
233 G4AntiAlphaInelasticProcess* aaProcInel =
new G4AntiAlphaInelasticProcess;
234 aaProcInel->RegisterMe(m_ftfp);
235 aaProcInel->AddDataSet(antiNucleonData);
236 procMan->AddDiscreteProcess(aaProcInel);
239 G4HadronicAbsorptionFritiof* aaAbsorb =
new G4HadronicAbsorptionFritiof();
240 procMan->AddRestProcess(aaAbsorb);
246 procMan = G4AntiLambda::AntiLambda()->GetProcessManager();
249 G4HadronElasticProcess* alamProcEl =
new G4HadronElasticProcess;
250 alamProcEl->RegisterMe(elModel);
251 alamProcEl->AddDataSet(hchipsElastic);
252 procMan->AddDiscreteProcess(alamProcEl);
255 G4AntiLambdaInelasticProcess* alamProcInel =
new G4AntiLambdaInelasticProcess;
256 alamProcInel->RegisterMe(m_ftfp);
257 alamProcInel->AddDataSet(hchipsInelastic);
258 procMan->AddDiscreteProcess(alamProcInel);
264 procMan = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager();
267 G4HadronElasticProcess* aspProcEl =
new G4HadronElasticProcess;
268 aspProcEl->RegisterMe(elModel);
269 aspProcEl->AddDataSet(hchipsElastic);
270 procMan->AddDiscreteProcess(aspProcEl);
273 G4AntiSigmaPlusInelasticProcess* aspProcInel =
new G4AntiSigmaPlusInelasticProcess;
274 aspProcInel->RegisterMe(m_ftfp);
275 aspProcInel->AddDataSet(hchipsInelastic);
276 procMan->AddDiscreteProcess(aspProcInel);
279 G4HadronicAbsorptionFritiof* aspAbsorb =
new G4HadronicAbsorptionFritiof();
280 procMan->AddRestProcess(aspAbsorb);
286 procMan = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager();
289 G4HadronElasticProcess* asmProcEl =
new G4HadronElasticProcess;
290 asmProcEl->RegisterMe(elModel);
291 asmProcEl->AddDataSet(hchipsElastic);
292 procMan->AddDiscreteProcess(asmProcEl);
295 G4AntiSigmaMinusInelasticProcess* asmProcInel =
new G4AntiSigmaMinusInelasticProcess;
296 asmProcInel->RegisterMe(m_ftfp);
297 asmProcInel->AddDataSet(hchipsInelastic);
298 procMan->AddDiscreteProcess(asmProcInel);
304 procMan = G4AntiXiZero::AntiXiZero()->GetProcessManager();
307 G4HadronElasticProcess* axzProcEl =
new G4HadronElasticProcess;
308 axzProcEl->RegisterMe(elModel);
309 axzProcEl->AddDataSet(hchipsElastic);
310 procMan->AddDiscreteProcess(axzProcEl);
313 G4AntiXiZeroInelasticProcess* axzProcInel =
new G4AntiXiZeroInelasticProcess;
314 axzProcInel->RegisterMe(m_ftfp);
315 axzProcInel->AddDataSet(hchipsInelastic);
316 procMan->AddDiscreteProcess(axzProcInel);
322 procMan = G4AntiXiMinus::AntiXiMinus()->GetProcessManager();
325 G4HadronElasticProcess* axmProcEl =
new G4HadronElasticProcess;
326 axmProcEl->RegisterMe(elModel);
327 axmProcEl->AddDataSet(hchipsElastic);
328 procMan->AddDiscreteProcess(axmProcEl);
331 G4AntiXiMinusInelasticProcess* axmProcInel =
new G4AntiXiMinusInelasticProcess;
332 axmProcInel->RegisterMe(m_ftfp);
333 axmProcInel->AddDataSet(hchipsInelastic);
334 procMan->AddDiscreteProcess(axmProcInel);
340 procMan = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager();
343 G4HadronElasticProcess* aomProcEl =
new G4HadronElasticProcess;
344 aomProcEl->RegisterMe(elModel);
345 aomProcEl->AddDataSet(hchipsElastic);
346 procMan->AddDiscreteProcess(aomProcEl);
349 G4AntiOmegaMinusInelasticProcess* aomProcInel =
new G4AntiOmegaMinusInelasticProcess;
350 aomProcInel->RegisterMe(m_ftfp);
351 aomProcInel->AddDataSet(hchipsInelastic);
352 procMan->AddDiscreteProcess(aomProcInel);
Abstract base class for different kinds of events.