9 #include <simulation/physicslist/HyperonPhysics.h>
11 #include "G4ProcessManager.hh"
12 #include "G4LambdaInelasticProcess.hh"
13 #include "G4SigmaPlusInelasticProcess.hh"
14 #include "G4SigmaMinusInelasticProcess.hh"
15 #include "G4XiZeroInelasticProcess.hh"
16 #include "G4XiMinusInelasticProcess.hh"
17 #include "G4OmegaMinusInelasticProcess.hh"
19 #include "G4HadronElasticProcess.hh"
20 #include "G4HadronicAbsorptionBertini.hh"
22 #include "G4CascadeInterface.hh"
23 #include "G4TheoFSGenerator.hh"
24 #include "G4FTFModel.hh"
25 #include "G4ExcitedStringDecay.hh"
26 #include "G4LundStringFragmentation.hh"
27 #include "G4GeneratorPrecompoundInterface.hh"
28 #include "G4HadronElastic.hh"
30 #include "G4ChipsHyperonElasticXS.hh"
31 #include "G4ChipsHyperonInelasticXS.hh"
32 #include "G4SystemOfUnits.hh"
35 using namespace Simulation;
38 HyperonPhysics::HyperonPhysics()
39 : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
40 m_fragModel(nullptr), m_preCompoundModel(nullptr)
44 HyperonPhysics::~HyperonPhysics()
49 delete m_preCompoundModel;
53 void HyperonPhysics::ConstructParticle()
57 void HyperonPhysics::ConstructProcess()
59 G4ProcessManager* procMan = 0;
62 G4HadronElastic* elModel =
new G4HadronElastic();
65 G4CascadeInterface* loInelModel =
new G4CascadeInterface;
66 loInelModel->SetMinEnergy(0.0);
67 loInelModel->SetMaxEnergy(6.0 * GeV);
70 m_ftfp =
new G4TheoFSGenerator(
"FTFP");
71 m_stringModel =
new G4FTFModel;
73 new G4ExcitedStringDecay(m_fragModel =
new G4LundStringFragmentation);
74 m_stringModel->SetFragmentationModel(m_stringDecay);
75 m_preCompoundModel =
new G4GeneratorPrecompoundInterface();
77 m_ftfp->SetHighEnergyGenerator(m_stringModel);
78 m_ftfp->SetTransport(m_preCompoundModel);
79 m_ftfp->SetMinEnergy(4 * GeV);
80 m_ftfp->SetMaxEnergy(100 * TeV);
83 G4ChipsHyperonElasticXS* chipsElastic =
new G4ChipsHyperonElasticXS;
84 G4ChipsHyperonInelasticXS* chipsInelastic =
new G4ChipsHyperonInelasticXS;
90 procMan = G4Lambda::Lambda()->GetProcessManager();
93 G4HadronElasticProcess* lamProcEl =
new G4HadronElasticProcess;
94 lamProcEl->RegisterMe(elModel);
95 lamProcEl->AddDataSet(chipsElastic);
96 procMan->AddDiscreteProcess(lamProcEl);
99 G4LambdaInelasticProcess* lamProcInel =
new G4LambdaInelasticProcess;
100 lamProcInel->RegisterMe(loInelModel);
101 lamProcInel->RegisterMe(m_ftfp);
102 lamProcInel->AddDataSet(chipsInelastic);
103 procMan->AddDiscreteProcess(lamProcInel);
109 procMan = G4SigmaPlus::SigmaPlus()->GetProcessManager();
112 G4HadronElasticProcess* spProcEl =
new G4HadronElasticProcess;
113 spProcEl->RegisterMe(elModel);
114 spProcEl->AddDataSet(chipsElastic);
115 procMan->AddDiscreteProcess(spProcEl);
118 G4SigmaPlusInelasticProcess* spProcInel =
new G4SigmaPlusInelasticProcess;
119 spProcInel->RegisterMe(loInelModel);
120 spProcInel->RegisterMe(m_ftfp);
121 spProcInel->AddDataSet(chipsInelastic);
122 procMan->AddDiscreteProcess(spProcInel);
128 procMan = G4SigmaMinus::SigmaMinus()->GetProcessManager();
131 G4HadronElasticProcess* smProcEl =
new G4HadronElasticProcess;
132 smProcEl->RegisterMe(elModel);
133 smProcEl->AddDataSet(chipsElastic);
134 procMan->AddDiscreteProcess(smProcEl);
137 G4SigmaMinusInelasticProcess* smProcInel =
new G4SigmaMinusInelasticProcess;
138 smProcInel->RegisterMe(loInelModel);
139 smProcInel->RegisterMe(m_ftfp);
140 smProcInel->AddDataSet(chipsInelastic);
141 procMan->AddDiscreteProcess(smProcInel);
144 G4HadronicAbsorptionBertini* smAbsorb =
new G4HadronicAbsorptionBertini;
145 procMan->AddRestProcess(smAbsorb);
151 procMan = G4XiZero::XiZero()->GetProcessManager();
154 G4HadronElasticProcess* xzProcEl =
new G4HadronElasticProcess;
155 xzProcEl->RegisterMe(elModel);
156 xzProcEl->AddDataSet(chipsElastic);
157 procMan->AddDiscreteProcess(xzProcEl);
160 G4XiZeroInelasticProcess* xzProcInel =
new G4XiZeroInelasticProcess;
161 xzProcInel->RegisterMe(loInelModel);
162 xzProcInel->RegisterMe(m_ftfp);
163 xzProcInel->AddDataSet(chipsInelastic);
164 procMan->AddDiscreteProcess(xzProcInel);
170 procMan = G4XiMinus::XiMinus()->GetProcessManager();
173 G4HadronElasticProcess* xmProcEl =
new G4HadronElasticProcess;
174 xmProcEl->RegisterMe(elModel);
175 xmProcEl->AddDataSet(chipsElastic);
176 procMan->AddDiscreteProcess(xmProcEl);
179 G4XiMinusInelasticProcess* xmProcInel =
new G4XiMinusInelasticProcess;
180 xmProcInel->RegisterMe(loInelModel);
181 xmProcInel->RegisterMe(m_ftfp);
182 xmProcInel->AddDataSet(chipsInelastic);
183 procMan->AddDiscreteProcess(xmProcInel);
186 G4HadronicAbsorptionBertini* xmAbsorb =
new G4HadronicAbsorptionBertini;
187 procMan->AddRestProcess(xmAbsorb);
193 procMan = G4OmegaMinus::OmegaMinus()->GetProcessManager();
196 G4HadronElasticProcess* omProcEl =
new G4HadronElasticProcess;
197 omProcEl->RegisterMe(elModel);
198 omProcEl->AddDataSet(chipsElastic);
199 procMan->AddDiscreteProcess(omProcEl);
202 G4OmegaMinusInelasticProcess* omProcInel =
new G4OmegaMinusInelasticProcess;
203 omProcInel->RegisterMe(loInelModel);
204 omProcInel->RegisterMe(m_ftfp);
205 omProcInel->AddDataSet(chipsInelastic);
206 procMan->AddDiscreteProcess(omProcInel);
209 G4HadronicAbsorptionBertini* omAbsorb =
new G4HadronicAbsorptionBertini;
210 procMan->AddRestProcess(omAbsorb);
Abstract base class for different kinds of events.