9#include <simulation/physicslist/HyperonPhysics.h>
11#include "G4ProcessManager.hh"
12#include "G4HadronInelasticProcess.hh"
13#include "G4HadronElasticProcess.hh"
14#include "G4HadronicAbsorptionBertini.hh"
16#include "G4CascadeInterface.hh"
17#include "G4TheoFSGenerator.hh"
18#include "G4FTFModel.hh"
19#include "G4ExcitedStringDecay.hh"
20#include "G4LundStringFragmentation.hh"
21#include "G4GeneratorPrecompoundInterface.hh"
22#include "G4HadronElastic.hh"
24#include "G4ChipsHyperonElasticXS.hh"
25#include "G4ChipsHyperonInelasticXS.hh"
26#include "G4SystemOfUnits.hh"
29using namespace Simulation;
32HyperonPhysics::HyperonPhysics()
33 : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
34 m_fragModel(nullptr), m_preCompoundModel(nullptr)
38HyperonPhysics::~HyperonPhysics()
43 delete m_preCompoundModel;
47void HyperonPhysics::ConstructParticle()
51void HyperonPhysics::ConstructProcess()
53 G4ProcessManager* procMan = 0;
56 G4HadronElastic* elModel =
new G4HadronElastic();
59 G4CascadeInterface* loInelModel =
new G4CascadeInterface;
60 loInelModel->SetMinEnergy(0.0);
61 loInelModel->SetMaxEnergy(6.0 * GeV);
64 m_ftfp =
new G4TheoFSGenerator(
"FTFP");
65 m_stringModel =
new G4FTFModel;
67 new G4ExcitedStringDecay(m_fragModel =
new G4LundStringFragmentation);
68 m_stringModel->SetFragmentationModel(m_stringDecay);
69 m_preCompoundModel =
new G4GeneratorPrecompoundInterface();
71 m_ftfp->SetHighEnergyGenerator(m_stringModel);
72 m_ftfp->SetTransport(m_preCompoundModel);
73 m_ftfp->SetMinEnergy(4 * GeV);
74 m_ftfp->SetMaxEnergy(100 * TeV);
77 G4ChipsHyperonElasticXS* chipsElastic =
new G4ChipsHyperonElasticXS;
78 G4ChipsHyperonInelasticXS* chipsInelastic =
new G4ChipsHyperonInelasticXS;
84 procMan = G4Lambda::Lambda()->GetProcessManager();
87 G4HadronElasticProcess* lamProcEl =
new G4HadronElasticProcess;
88 lamProcEl->RegisterMe(elModel);
89 lamProcEl->AddDataSet(chipsElastic);
90 procMan->AddDiscreteProcess(lamProcEl);
93 G4HadronInelasticProcess* lamProcInel =
new G4HadronInelasticProcess(
"lambdaInelastic", G4Lambda::Definition());
94 lamProcInel->RegisterMe(loInelModel);
95 lamProcInel->RegisterMe(m_ftfp);
96 lamProcInel->AddDataSet(chipsInelastic);
97 procMan->AddDiscreteProcess(lamProcInel);
103 procMan = G4SigmaPlus::SigmaPlus()->GetProcessManager();
106 G4HadronElasticProcess* spProcEl =
new G4HadronElasticProcess;
107 spProcEl->RegisterMe(elModel);
108 spProcEl->AddDataSet(chipsElastic);
109 procMan->AddDiscreteProcess(spProcEl);
112 G4HadronInelasticProcess* spProcInel =
new G4HadronInelasticProcess(
"sigma+Inelastic", G4SigmaPlus::Definition());
113 spProcInel->RegisterMe(loInelModel);
114 spProcInel->RegisterMe(m_ftfp);
115 spProcInel->AddDataSet(chipsInelastic);
116 procMan->AddDiscreteProcess(spProcInel);
122 procMan = G4SigmaMinus::SigmaMinus()->GetProcessManager();
125 G4HadronElasticProcess* smProcEl =
new G4HadronElasticProcess;
126 smProcEl->RegisterMe(elModel);
127 smProcEl->AddDataSet(chipsElastic);
128 procMan->AddDiscreteProcess(smProcEl);
131 G4HadronInelasticProcess* smProcInel =
new G4HadronInelasticProcess(
"sigma-Inelastic", G4SigmaMinus::Definition());
132 smProcInel->RegisterMe(loInelModel);
133 smProcInel->RegisterMe(m_ftfp);
134 smProcInel->AddDataSet(chipsInelastic);
135 procMan->AddDiscreteProcess(smProcInel);
138 G4HadronicAbsorptionBertini* smAbsorb =
new G4HadronicAbsorptionBertini;
139 procMan->AddRestProcess(smAbsorb);
145 procMan = G4XiZero::XiZero()->GetProcessManager();
148 G4HadronElasticProcess* xzProcEl =
new G4HadronElasticProcess;
149 xzProcEl->RegisterMe(elModel);
150 xzProcEl->AddDataSet(chipsElastic);
151 procMan->AddDiscreteProcess(xzProcEl);
154 G4HadronInelasticProcess* xzProcInel =
new G4HadronInelasticProcess(
"xi0Inelastic", G4XiZero::Definition());
155 xzProcInel->RegisterMe(loInelModel);
156 xzProcInel->RegisterMe(m_ftfp);
157 xzProcInel->AddDataSet(chipsInelastic);
158 procMan->AddDiscreteProcess(xzProcInel);
164 procMan = G4XiMinus::XiMinus()->GetProcessManager();
167 G4HadronElasticProcess* xmProcEl =
new G4HadronElasticProcess;
168 xmProcEl->RegisterMe(elModel);
169 xmProcEl->AddDataSet(chipsElastic);
170 procMan->AddDiscreteProcess(xmProcEl);
173 G4HadronInelasticProcess* xmProcInel =
new G4HadronInelasticProcess(
"xi-Inelastic", G4XiMinus::Definition());
174 xmProcInel->RegisterMe(loInelModel);
175 xmProcInel->RegisterMe(m_ftfp);
176 xmProcInel->AddDataSet(chipsInelastic);
177 procMan->AddDiscreteProcess(xmProcInel);
180 G4HadronicAbsorptionBertini* xmAbsorb =
new G4HadronicAbsorptionBertini;
181 procMan->AddRestProcess(xmAbsorb);
187 procMan = G4OmegaMinus::OmegaMinus()->GetProcessManager();
190 G4HadronElasticProcess* omProcEl =
new G4HadronElasticProcess;
191 omProcEl->RegisterMe(elModel);
192 omProcEl->AddDataSet(chipsElastic);
193 procMan->AddDiscreteProcess(omProcEl);
196 G4HadronInelasticProcess* omProcInel =
new G4HadronInelasticProcess(
"omega-Inelastic", G4OmegaMinus::Definition());
197 omProcInel->RegisterMe(loInelModel);
198 omProcInel->RegisterMe(m_ftfp);
199 omProcInel->AddDataSet(chipsInelastic);
200 procMan->AddDiscreteProcess(omProcInel);
203 G4HadronicAbsorptionBertini* omAbsorb =
new G4HadronicAbsorptionBertini;
204 procMan->AddRestProcess(omAbsorb);
Abstract base class for different kinds of events.