Belle II Software development
HyperonPhysics.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/HyperonPhysics.h>
10
11#include "G4ProcessManager.hh"
12#include "G4HadronInelasticProcess.hh"
13#include "G4HadronElasticProcess.hh"
14#include "G4HadronicAbsorptionBertini.hh"
15
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"
23
24#include "G4ChipsHyperonElasticXS.hh"
25#include "G4ChipsHyperonInelasticXS.hh"
26#include "G4SystemOfUnits.hh"
27
28using namespace Belle2;
29using namespace Simulation;
30
31
32HyperonPhysics::HyperonPhysics()
33 : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
34 m_fragModel(nullptr), m_preCompoundModel(nullptr)
35{}
36
37
38HyperonPhysics::~HyperonPhysics()
39{
40 delete m_stringDecay;
41 delete m_stringModel;
42 delete m_fragModel;
43 delete m_preCompoundModel;
44}
45
46
47void HyperonPhysics::ConstructParticle()
48{}
49
50
51void HyperonPhysics::ConstructProcess()
52{
53 G4ProcessManager* procMan = 0;
54
55 // One elastic model for all hyperon energies
56 G4HadronElastic* elModel = new G4HadronElastic();
57
58 // Use Bertini cascade for low energies
59 G4CascadeInterface* loInelModel = new G4CascadeInterface;
60 loInelModel->SetMinEnergy(0.0);
61 loInelModel->SetMaxEnergy(6.0 * GeV);
62
63 // Use FTFP for high energies ==>> eventually replace this with new class FTFPInterface
64 m_ftfp = new G4TheoFSGenerator("FTFP");
65 m_stringModel = new G4FTFModel;
66 m_stringDecay =
67 new G4ExcitedStringDecay(m_fragModel = new G4LundStringFragmentation);
68 m_stringModel->SetFragmentationModel(m_stringDecay);
69 m_preCompoundModel = new G4GeneratorPrecompoundInterface();
70
71 m_ftfp->SetHighEnergyGenerator(m_stringModel);
72 m_ftfp->SetTransport(m_preCompoundModel);
73 m_ftfp->SetMinEnergy(4 * GeV);
74 m_ftfp->SetMaxEnergy(100 * TeV);
75
76 // Cross section sets
77 G4ChipsHyperonElasticXS* chipsElastic = new G4ChipsHyperonElasticXS;
78 G4ChipsHyperonInelasticXS* chipsInelastic = new G4ChipsHyperonInelasticXS;
79
81 // Lambda //
83
84 procMan = G4Lambda::Lambda()->GetProcessManager();
85
86 // elastic
87 G4HadronElasticProcess* lamProcEl = new G4HadronElasticProcess;
88 lamProcEl->RegisterMe(elModel);
89 lamProcEl->AddDataSet(chipsElastic);
90 procMan->AddDiscreteProcess(lamProcEl);
91
92 // inelastic
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);
98
100 // Sigma+ //
102
103 procMan = G4SigmaPlus::SigmaPlus()->GetProcessManager();
104
105 // elastic
106 G4HadronElasticProcess* spProcEl = new G4HadronElasticProcess;
107 spProcEl->RegisterMe(elModel);
108 spProcEl->AddDataSet(chipsElastic);
109 procMan->AddDiscreteProcess(spProcEl);
110
111 // inelastic
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);
117
119 // Sigma- //
121
122 procMan = G4SigmaMinus::SigmaMinus()->GetProcessManager();
123
124 // elastic
125 G4HadronElasticProcess* smProcEl = new G4HadronElasticProcess;
126 smProcEl->RegisterMe(elModel);
127 smProcEl->AddDataSet(chipsElastic);
128 procMan->AddDiscreteProcess(smProcEl);
129
130 // inelastic
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);
136
137 // stopping
138 G4HadronicAbsorptionBertini* smAbsorb = new G4HadronicAbsorptionBertini;
139 procMan->AddRestProcess(smAbsorb);
140
142 // Xi0 //
144
145 procMan = G4XiZero::XiZero()->GetProcessManager();
146
147 // elastic
148 G4HadronElasticProcess* xzProcEl = new G4HadronElasticProcess;
149 xzProcEl->RegisterMe(elModel);
150 xzProcEl->AddDataSet(chipsElastic);
151 procMan->AddDiscreteProcess(xzProcEl);
152
153 // inelastic
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);
159
161 // Xi- //
163
164 procMan = G4XiMinus::XiMinus()->GetProcessManager();
165
166 // elastic
167 G4HadronElasticProcess* xmProcEl = new G4HadronElasticProcess;
168 xmProcEl->RegisterMe(elModel);
169 xmProcEl->AddDataSet(chipsElastic);
170 procMan->AddDiscreteProcess(xmProcEl);
171
172 // inelastic
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);
178
179 // stopping
180 G4HadronicAbsorptionBertini* xmAbsorb = new G4HadronicAbsorptionBertini;
181 procMan->AddRestProcess(xmAbsorb);
182
184 // Omega- //
186
187 procMan = G4OmegaMinus::OmegaMinus()->GetProcessManager();
188
189 // elastic
190 G4HadronElasticProcess* omProcEl = new G4HadronElasticProcess;
191 omProcEl->RegisterMe(elModel);
192 omProcEl->AddDataSet(chipsElastic);
193 procMan->AddDiscreteProcess(omProcEl);
194
195 // inelastic
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);
201
202 // stopping
203 G4HadronicAbsorptionBertini* omAbsorb = new G4HadronicAbsorptionBertini;
204 procMan->AddRestProcess(omAbsorb);
205}
206
Abstract base class for different kinds of events.