Belle II Software  release-06-02-00
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 "G4LambdaInelasticProcess.hh"
13 #include "G4SigmaPlusInelasticProcess.hh"
14 #include "G4SigmaMinusInelasticProcess.hh"
15 #include "G4XiZeroInelasticProcess.hh"
16 #include "G4XiMinusInelasticProcess.hh"
17 #include "G4OmegaMinusInelasticProcess.hh"
18 
19 #include "G4HadronElasticProcess.hh"
20 #include "G4HadronicAbsorptionBertini.hh"
21 
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"
29 
30 #include "G4ChipsHyperonElasticXS.hh"
31 #include "G4ChipsHyperonInelasticXS.hh"
32 #include "G4SystemOfUnits.hh"
33 
34 using namespace Belle2;
35 using namespace Simulation;
36 
37 
38 HyperonPhysics::HyperonPhysics()
39  : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
40  m_fragModel(nullptr), m_preCompoundModel(nullptr)
41 {}
42 
43 
44 HyperonPhysics::~HyperonPhysics()
45 {
46  delete m_stringDecay;
47  delete m_stringModel;
48  delete m_fragModel;
49  delete m_preCompoundModel;
50 }
51 
52 
53 void HyperonPhysics::ConstructParticle()
54 {}
55 
56 
57 void HyperonPhysics::ConstructProcess()
58 {
59  G4ProcessManager* procMan = 0;
60 
61  // One elastic model for all hyperon energies
62  G4HadronElastic* elModel = new G4HadronElastic();
63 
64  // Use Bertini cascade for low energies
65  G4CascadeInterface* loInelModel = new G4CascadeInterface;
66  loInelModel->SetMinEnergy(0.0);
67  loInelModel->SetMaxEnergy(6.0 * GeV);
68 
69  // Use FTFP for high energies ==>> eventually replace this with new class FTFPInterface
70  m_ftfp = new G4TheoFSGenerator("FTFP");
71  m_stringModel = new G4FTFModel;
72  m_stringDecay =
73  new G4ExcitedStringDecay(m_fragModel = new G4LundStringFragmentation);
74  m_stringModel->SetFragmentationModel(m_stringDecay);
75  m_preCompoundModel = new G4GeneratorPrecompoundInterface();
76 
77  m_ftfp->SetHighEnergyGenerator(m_stringModel);
78  m_ftfp->SetTransport(m_preCompoundModel);
79  m_ftfp->SetMinEnergy(4 * GeV);
80  m_ftfp->SetMaxEnergy(100 * TeV);
81 
82  // Cross section sets
83  G4ChipsHyperonElasticXS* chipsElastic = new G4ChipsHyperonElasticXS;
84  G4ChipsHyperonInelasticXS* chipsInelastic = new G4ChipsHyperonInelasticXS;
85 
87  // Lambda //
89 
90  procMan = G4Lambda::Lambda()->GetProcessManager();
91 
92  // elastic
93  G4HadronElasticProcess* lamProcEl = new G4HadronElasticProcess;
94  lamProcEl->RegisterMe(elModel);
95  lamProcEl->AddDataSet(chipsElastic);
96  procMan->AddDiscreteProcess(lamProcEl);
97 
98  // inelastic
99  G4LambdaInelasticProcess* lamProcInel = new G4LambdaInelasticProcess;
100  lamProcInel->RegisterMe(loInelModel);
101  lamProcInel->RegisterMe(m_ftfp);
102  lamProcInel->AddDataSet(chipsInelastic);
103  procMan->AddDiscreteProcess(lamProcInel);
104 
106  // Sigma+ //
108 
109  procMan = G4SigmaPlus::SigmaPlus()->GetProcessManager();
110 
111  // elastic
112  G4HadronElasticProcess* spProcEl = new G4HadronElasticProcess;
113  spProcEl->RegisterMe(elModel);
114  spProcEl->AddDataSet(chipsElastic);
115  procMan->AddDiscreteProcess(spProcEl);
116 
117  // inelastic
118  G4SigmaPlusInelasticProcess* spProcInel = new G4SigmaPlusInelasticProcess;
119  spProcInel->RegisterMe(loInelModel);
120  spProcInel->RegisterMe(m_ftfp);
121  spProcInel->AddDataSet(chipsInelastic);
122  procMan->AddDiscreteProcess(spProcInel);
123 
125  // Sigma- //
127 
128  procMan = G4SigmaMinus::SigmaMinus()->GetProcessManager();
129 
130  // elastic
131  G4HadronElasticProcess* smProcEl = new G4HadronElasticProcess;
132  smProcEl->RegisterMe(elModel);
133  smProcEl->AddDataSet(chipsElastic);
134  procMan->AddDiscreteProcess(smProcEl);
135 
136  // inelastic
137  G4SigmaMinusInelasticProcess* smProcInel = new G4SigmaMinusInelasticProcess;
138  smProcInel->RegisterMe(loInelModel);
139  smProcInel->RegisterMe(m_ftfp);
140  smProcInel->AddDataSet(chipsInelastic);
141  procMan->AddDiscreteProcess(smProcInel);
142 
143  // stopping
144  G4HadronicAbsorptionBertini* smAbsorb = new G4HadronicAbsorptionBertini;
145  procMan->AddRestProcess(smAbsorb);
146 
148  // Xi0 //
150 
151  procMan = G4XiZero::XiZero()->GetProcessManager();
152 
153  // elastic
154  G4HadronElasticProcess* xzProcEl = new G4HadronElasticProcess;
155  xzProcEl->RegisterMe(elModel);
156  xzProcEl->AddDataSet(chipsElastic);
157  procMan->AddDiscreteProcess(xzProcEl);
158 
159  // inelastic
160  G4XiZeroInelasticProcess* xzProcInel = new G4XiZeroInelasticProcess;
161  xzProcInel->RegisterMe(loInelModel);
162  xzProcInel->RegisterMe(m_ftfp);
163  xzProcInel->AddDataSet(chipsInelastic);
164  procMan->AddDiscreteProcess(xzProcInel);
165 
167  // Xi- //
169 
170  procMan = G4XiMinus::XiMinus()->GetProcessManager();
171 
172  // elastic
173  G4HadronElasticProcess* xmProcEl = new G4HadronElasticProcess;
174  xmProcEl->RegisterMe(elModel);
175  xmProcEl->AddDataSet(chipsElastic);
176  procMan->AddDiscreteProcess(xmProcEl);
177 
178  // inelastic
179  G4XiMinusInelasticProcess* xmProcInel = new G4XiMinusInelasticProcess;
180  xmProcInel->RegisterMe(loInelModel);
181  xmProcInel->RegisterMe(m_ftfp);
182  xmProcInel->AddDataSet(chipsInelastic);
183  procMan->AddDiscreteProcess(xmProcInel);
184 
185  // stopping
186  G4HadronicAbsorptionBertini* xmAbsorb = new G4HadronicAbsorptionBertini;
187  procMan->AddRestProcess(xmAbsorb);
188 
190  // Omega- //
192 
193  procMan = G4OmegaMinus::OmegaMinus()->GetProcessManager();
194 
195  // elastic
196  G4HadronElasticProcess* omProcEl = new G4HadronElasticProcess;
197  omProcEl->RegisterMe(elModel);
198  omProcEl->AddDataSet(chipsElastic);
199  procMan->AddDiscreteProcess(omProcEl);
200 
201  // inelastic
202  G4OmegaMinusInelasticProcess* omProcInel = new G4OmegaMinusInelasticProcess;
203  omProcInel->RegisterMe(loInelModel);
204  omProcInel->RegisterMe(m_ftfp);
205  omProcInel->AddDataSet(chipsInelastic);
206  procMan->AddDiscreteProcess(omProcInel);
207 
208  // stopping
209  G4HadronicAbsorptionBertini* omAbsorb = new G4HadronicAbsorptionBertini;
210  procMan->AddRestProcess(omAbsorb);
211 }
212 
Abstract base class for different kinds of events.