Belle II Software  release-05-01-25
HyperonPhysics.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(c) 2018 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributor: Dennis Wright (SLAC) *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <simulation/physicslist/HyperonPhysics.h>
12 
13 #include "G4ProcessManager.hh"
14 #include "G4LambdaInelasticProcess.hh"
15 #include "G4SigmaPlusInelasticProcess.hh"
16 #include "G4SigmaMinusInelasticProcess.hh"
17 #include "G4XiZeroInelasticProcess.hh"
18 #include "G4XiMinusInelasticProcess.hh"
19 #include "G4OmegaMinusInelasticProcess.hh"
20 
21 #include "G4HadronElasticProcess.hh"
22 #include "G4HadronicAbsorptionBertini.hh"
23 
24 #include "G4CascadeInterface.hh"
25 #include "G4TheoFSGenerator.hh"
26 #include "G4FTFModel.hh"
27 #include "G4ExcitedStringDecay.hh"
28 #include "G4LundStringFragmentation.hh"
29 #include "G4GeneratorPrecompoundInterface.hh"
30 #include "G4HadronElastic.hh"
31 
32 #include "G4ChipsHyperonElasticXS.hh"
33 #include "G4ChipsHyperonInelasticXS.hh"
34 #include "G4SystemOfUnits.hh"
35 
36 using namespace Belle2;
37 using namespace Simulation;
38 
39 
40 HyperonPhysics::HyperonPhysics()
41  : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
42  m_fragModel(nullptr), m_preCompoundModel(nullptr)
43 {}
44 
45 
46 HyperonPhysics::~HyperonPhysics()
47 {
48  delete m_stringDecay;
49  delete m_stringModel;
50  delete m_fragModel;
51  delete m_preCompoundModel;
52 }
53 
54 
56 {}
57 
58 
60 {
61  G4ProcessManager* procMan = 0;
62 
63  // One elastic model for all hyperon energies
64  G4HadronElastic* elModel = new G4HadronElastic();
65 
66  // Use Bertini cascade for low energies
67  G4CascadeInterface* loInelModel = new G4CascadeInterface;
68  loInelModel->SetMinEnergy(0.0);
69  loInelModel->SetMaxEnergy(6.0 * GeV);
70 
71  // Use FTFP for high energies ==>> eventually replace this with new class FTFPInterface
72  m_ftfp = new G4TheoFSGenerator("FTFP");
73  m_stringModel = new G4FTFModel;
75  new G4ExcitedStringDecay(m_fragModel = new G4LundStringFragmentation);
76  m_stringModel->SetFragmentationModel(m_stringDecay);
77  m_preCompoundModel = new G4GeneratorPrecompoundInterface();
78 
79  m_ftfp->SetHighEnergyGenerator(m_stringModel);
80  m_ftfp->SetTransport(m_preCompoundModel);
81  m_ftfp->SetMinEnergy(4 * GeV);
82  m_ftfp->SetMaxEnergy(100 * TeV);
83 
84  // Cross section sets
85  G4ChipsHyperonElasticXS* chipsElastic = new G4ChipsHyperonElasticXS;
86  G4ChipsHyperonInelasticXS* chipsInelastic = new G4ChipsHyperonInelasticXS;
87 
89  // Lambda //
91 
92  procMan = G4Lambda::Lambda()->GetProcessManager();
93 
94  // elastic
95  G4HadronElasticProcess* lamProcEl = new G4HadronElasticProcess;
96  lamProcEl->RegisterMe(elModel);
97  lamProcEl->AddDataSet(chipsElastic);
98  procMan->AddDiscreteProcess(lamProcEl);
99 
100  // inelastic
101  G4LambdaInelasticProcess* lamProcInel = new G4LambdaInelasticProcess;
102  lamProcInel->RegisterMe(loInelModel);
103  lamProcInel->RegisterMe(m_ftfp);
104  lamProcInel->AddDataSet(chipsInelastic);
105  procMan->AddDiscreteProcess(lamProcInel);
106 
108  // Sigma+ //
110 
111  procMan = G4SigmaPlus::SigmaPlus()->GetProcessManager();
112 
113  // elastic
114  G4HadronElasticProcess* spProcEl = new G4HadronElasticProcess;
115  spProcEl->RegisterMe(elModel);
116  spProcEl->AddDataSet(chipsElastic);
117  procMan->AddDiscreteProcess(spProcEl);
118 
119  // inelastic
120  G4SigmaPlusInelasticProcess* spProcInel = new G4SigmaPlusInelasticProcess;
121  spProcInel->RegisterMe(loInelModel);
122  spProcInel->RegisterMe(m_ftfp);
123  spProcInel->AddDataSet(chipsInelastic);
124  procMan->AddDiscreteProcess(spProcInel);
125 
127  // Sigma- //
129 
130  procMan = G4SigmaMinus::SigmaMinus()->GetProcessManager();
131 
132  // elastic
133  G4HadronElasticProcess* smProcEl = new G4HadronElasticProcess;
134  smProcEl->RegisterMe(elModel);
135  smProcEl->AddDataSet(chipsElastic);
136  procMan->AddDiscreteProcess(smProcEl);
137 
138  // inelastic
139  G4SigmaMinusInelasticProcess* smProcInel = new G4SigmaMinusInelasticProcess;
140  smProcInel->RegisterMe(loInelModel);
141  smProcInel->RegisterMe(m_ftfp);
142  smProcInel->AddDataSet(chipsInelastic);
143  procMan->AddDiscreteProcess(smProcInel);
144 
145  // stopping
146  G4HadronicAbsorptionBertini* smAbsorb = new G4HadronicAbsorptionBertini;
147  procMan->AddRestProcess(smAbsorb);
148 
150  // Xi0 //
152 
153  procMan = G4XiZero::XiZero()->GetProcessManager();
154 
155  // elastic
156  G4HadronElasticProcess* xzProcEl = new G4HadronElasticProcess;
157  xzProcEl->RegisterMe(elModel);
158  xzProcEl->AddDataSet(chipsElastic);
159  procMan->AddDiscreteProcess(xzProcEl);
160 
161  // inelastic
162  G4XiZeroInelasticProcess* xzProcInel = new G4XiZeroInelasticProcess;
163  xzProcInel->RegisterMe(loInelModel);
164  xzProcInel->RegisterMe(m_ftfp);
165  xzProcInel->AddDataSet(chipsInelastic);
166  procMan->AddDiscreteProcess(xzProcInel);
167 
169  // Xi- //
171 
172  procMan = G4XiMinus::XiMinus()->GetProcessManager();
173 
174  // elastic
175  G4HadronElasticProcess* xmProcEl = new G4HadronElasticProcess;
176  xmProcEl->RegisterMe(elModel);
177  xmProcEl->AddDataSet(chipsElastic);
178  procMan->AddDiscreteProcess(xmProcEl);
179 
180  // inelastic
181  G4XiMinusInelasticProcess* xmProcInel = new G4XiMinusInelasticProcess;
182  xmProcInel->RegisterMe(loInelModel);
183  xmProcInel->RegisterMe(m_ftfp);
184  xmProcInel->AddDataSet(chipsInelastic);
185  procMan->AddDiscreteProcess(xmProcInel);
186 
187  // stopping
188  G4HadronicAbsorptionBertini* xmAbsorb = new G4HadronicAbsorptionBertini;
189  procMan->AddRestProcess(xmAbsorb);
190 
192  // Omega- //
194 
195  procMan = G4OmegaMinus::OmegaMinus()->GetProcessManager();
196 
197  // elastic
198  G4HadronElasticProcess* omProcEl = new G4HadronElasticProcess;
199  omProcEl->RegisterMe(elModel);
200  omProcEl->AddDataSet(chipsElastic);
201  procMan->AddDiscreteProcess(omProcEl);
202 
203  // inelastic
204  G4OmegaMinusInelasticProcess* omProcInel = new G4OmegaMinusInelasticProcess;
205  omProcInel->RegisterMe(loInelModel);
206  omProcInel->RegisterMe(m_ftfp);
207  omProcInel->AddDataSet(chipsInelastic);
208  procMan->AddDiscreteProcess(omProcInel);
209 
210  // stopping
211  G4HadronicAbsorptionBertini* omAbsorb = new G4HadronicAbsorptionBertini;
212  procMan->AddRestProcess(omAbsorb);
213 }
214 
Belle2::Simulation::HyperonPhysics::m_preCompoundModel
G4GeneratorPrecompoundInterface * m_preCompoundModel
Precompound model to deexcite post-collision nucleus.
Definition: HyperonPhysics.h:58
Belle2::Simulation::HyperonPhysics::m_ftfp
G4TheoFSGenerator * m_ftfp
Final state generator for QCD string models.
Definition: HyperonPhysics.h:46
Belle2::Simulation::HyperonPhysics::ConstructParticle
virtual void ConstructParticle() override
Build processes, models, cross sections used in physics list.
Definition: HyperonPhysics.cc:55
Belle2::Simulation::HyperonPhysics::m_stringDecay
G4ExcitedStringDecay * m_stringDecay
Model to decay strings into hadrons.
Definition: HyperonPhysics.h:52
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::Simulation::HyperonPhysics::m_stringModel
G4FTFModel * m_stringModel
Fritiof string model.
Definition: HyperonPhysics.h:49
Belle2::Simulation::HyperonPhysics::m_fragModel
G4LundStringFragmentation * m_fragModel
Lund string fragmentation model.
Definition: HyperonPhysics.h:55
Belle2::Simulation::HyperonPhysics::ConstructProcess
virtual void ConstructProcess() override
Build all particle types used in physics list (empty in this class)
Definition: HyperonPhysics.cc:59