Belle II Software  release-08-01-10
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 
28 using namespace Belle2;
29 using namespace Simulation;
30 
31 
32 HyperonPhysics::HyperonPhysics()
33  : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
34  m_fragModel(nullptr), m_preCompoundModel(nullptr)
35 {}
36 
37 
38 HyperonPhysics::~HyperonPhysics()
39 {
40  delete m_stringDecay;
41  delete m_stringModel;
42  delete m_fragModel;
43  delete m_preCompoundModel;
44 }
45 
46 
47 void HyperonPhysics::ConstructParticle()
48 {}
49 
50 
51 void 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.