Belle II Software  release-05-01-25
KaonPhysics.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/KaonPhysics.h>
12 
13 #include "G4ProcessManager.hh"
14 #include "G4KaonPlusInelasticProcess.hh"
15 #include "G4KaonMinusInelasticProcess.hh"
16 #include "G4KaonZeroLInelasticProcess.hh"
17 #include "G4KaonZeroSInelasticProcess.hh"
18 #include "G4HadronElasticProcess.hh"
19 #include "G4HadronicAbsorptionBertini.hh"
20 
21 #include "G4CascadeInterface.hh"
22 #include "G4TheoFSGenerator.hh"
23 #include "G4FTFModel.hh"
24 #include "G4ExcitedStringDecay.hh"
25 #include "G4LundStringFragmentation.hh"
26 #include "G4GeneratorPrecompoundInterface.hh"
27 #include "G4HadronElastic.hh"
28 
29 #include "G4CrossSectionElastic.hh"
30 #include "G4CrossSectionInelastic.hh"
31 #include "G4ComponentGGHadronNucleusXsc.hh"
32 #include "G4SystemOfUnits.hh"
33 
34 using namespace Belle2;
35 using namespace Simulation;
36 
37 
38 KaonPhysics::KaonPhysics()
39  : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
40  m_fragModel(nullptr), m_preCompoundModel(nullptr)
41 {}
42 
43 
44 KaonPhysics::~KaonPhysics()
45 {
46  delete m_stringDecay;
47  delete m_stringModel;
48  delete m_fragModel;
49  delete m_preCompoundModel;
50 }
51 
52 
54 {}
55 
56 
58 {
59  G4ProcessManager* procMan;
60 
61  // One elastic model for all kaon 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(12.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;
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(10 * GeV);
80  m_ftfp->SetMaxEnergy(100 * TeV);
81 
82  // Inelastic cross section sets
83  G4VCrossSectionDataSet* kinelCS =
84  new G4CrossSectionInelastic(new G4ComponentGGHadronNucleusXsc);
85 
86  // Elastic cross section
87  G4VCrossSectionDataSet* kelCS =
88  new G4CrossSectionElastic(new G4ComponentGGHadronNucleusXsc);
89 
91  // K+ //
93 
94  procMan = G4KaonPlus::KaonPlus()->GetProcessManager();
95 
96  // elastic
97  G4HadronElasticProcess* kpProcEl = new G4HadronElasticProcess;
98  kpProcEl->RegisterMe(elModel);
99  kpProcEl->AddDataSet(kelCS);
100  procMan->AddDiscreteProcess(kpProcEl);
101 
102  // inelastic
103  G4KaonPlusInelasticProcess* kpProcInel = new G4KaonPlusInelasticProcess;
104  kpProcInel->RegisterMe(loInelModel);
105  kpProcInel->RegisterMe(m_ftfp);
106  kpProcInel->AddDataSet(kinelCS);
107  procMan->AddDiscreteProcess(kpProcInel);
108 
110  // K- //
112 
113  procMan = G4KaonMinus::KaonMinus()->GetProcessManager();
114 
115  // elastic
116  G4HadronElasticProcess* kmProcEl = new G4HadronElasticProcess;
117  kmProcEl->RegisterMe(elModel);
118  kmProcEl->AddDataSet(kelCS);
119  procMan->AddDiscreteProcess(kmProcEl);
120 
121  // inelastic
122  G4KaonMinusInelasticProcess* kmProcInel = new G4KaonMinusInelasticProcess;
123  kmProcInel->RegisterMe(loInelModel);
124  kmProcInel->RegisterMe(m_ftfp);
125  kmProcInel->AddDataSet(kinelCS);
126  procMan->AddDiscreteProcess(kmProcInel);
127 
128  // stopping
129  G4HadronicAbsorptionBertini* bertAbsorb = new G4HadronicAbsorptionBertini;
130  procMan->AddRestProcess(bertAbsorb);
131 
133  // K0L //
135 
136  procMan = G4KaonZeroLong::KaonZeroLong()->GetProcessManager();
137 
138  // elastic
139  G4HadronElasticProcess* k0LProcEl = new G4HadronElasticProcess;
140  k0LProcEl->RegisterMe(elModel);
141  k0LProcEl->AddDataSet(kelCS);
142  procMan->AddDiscreteProcess(k0LProcEl);
143 
144  // inelastic
145  G4KaonZeroLInelasticProcess* k0LProcInel = new G4KaonZeroLInelasticProcess;
146  k0LProcInel->RegisterMe(loInelModel);
147  k0LProcInel->RegisterMe(m_ftfp);
148  k0LProcInel->AddDataSet(kinelCS);
149  procMan->AddDiscreteProcess(k0LProcInel);
150 
152  // K0S //
154 
155  procMan = G4KaonZeroShort::KaonZeroShort()->GetProcessManager();
156 
157  // elastic
158  G4HadronElasticProcess* k0SProcEl = new G4HadronElasticProcess;
159  k0SProcEl->RegisterMe(elModel);
160  k0SProcEl->AddDataSet(kelCS);
161  procMan->AddDiscreteProcess(k0SProcEl);
162 
163  // inelastic
164  G4KaonZeroSInelasticProcess* k0SProcInel = new G4KaonZeroSInelasticProcess;
165  k0SProcInel->RegisterMe(loInelModel);
166  k0SProcInel->RegisterMe(m_ftfp);
167  k0SProcInel->AddDataSet(kinelCS);
168  procMan->AddDiscreteProcess(k0SProcInel);
169 }
170 
Belle2::Simulation::KaonPhysics::ConstructParticle
virtual void ConstructParticle() override
Build processes, models, cross sections used in physics list.
Definition: KaonPhysics.cc:53
Belle2::Simulation::KaonPhysics::m_stringDecay
G4ExcitedStringDecay * m_stringDecay
Model to decay strings into hadrons.
Definition: KaonPhysics.h:52
Belle2::Simulation::KaonPhysics::m_fragModel
G4LundStringFragmentation * m_fragModel
Lund string fragmentation model.
Definition: KaonPhysics.h:55
Belle2::Simulation::KaonPhysics::ConstructProcess
virtual void ConstructProcess() override
Build all particle types used in physics list (empty in this class)
Definition: KaonPhysics.cc:57
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::Simulation::KaonPhysics::m_stringModel
G4FTFModel * m_stringModel
Fritiof string model.
Definition: KaonPhysics.h:49
Belle2::Simulation::KaonPhysics::m_ftfp
G4TheoFSGenerator * m_ftfp
Final state generator for QCD string models.
Definition: KaonPhysics.h:46
Belle2::Simulation::KaonPhysics::m_preCompoundModel
G4GeneratorPrecompoundInterface * m_preCompoundModel
Precompound model to deexcite post-collision nucleus.
Definition: KaonPhysics.h:58