9#include <simulation/physicslist/KaonPhysics.h>
11#include "G4ProcessManager.hh"
12#include "G4HadronInelasticProcess.hh"
13#include "G4HadronElasticProcess.hh"
14#include "G4HadronicAbsorptionBertini.hh"
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"
24#include "G4CrossSectionElastic.hh"
25#include "G4CrossSectionInelastic.hh"
26#include "G4ComponentGGHadronNucleusXsc.hh"
27#include "G4SystemOfUnits.hh"
30using namespace Simulation;
33KaonPhysics::KaonPhysics()
34 : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
35 m_fragModel(nullptr), m_preCompoundModel(nullptr)
39KaonPhysics::~KaonPhysics()
44 delete m_preCompoundModel;
48void KaonPhysics::ConstructParticle()
52void KaonPhysics::ConstructProcess()
54 G4ProcessManager* procMan;
57 G4HadronElastic* elModel =
new G4HadronElastic();
60 G4CascadeInterface* loInelModel =
new G4CascadeInterface;
61 loInelModel->SetMinEnergy(0.0);
62 loInelModel->SetMaxEnergy(12.0 * GeV);
65 m_ftfp =
new G4TheoFSGenerator(
"FTFP");
66 m_stringModel =
new G4FTFModel;
68 new G4ExcitedStringDecay(m_fragModel =
new G4LundStringFragmentation);
69 m_stringModel->SetFragmentationModel(m_stringDecay);
70 m_preCompoundModel =
new G4GeneratorPrecompoundInterface();
72 m_ftfp->SetHighEnergyGenerator(m_stringModel);
73 m_ftfp->SetTransport(m_preCompoundModel);
74 m_ftfp->SetMinEnergy(10 * GeV);
75 m_ftfp->SetMaxEnergy(100 * TeV);
78 G4VCrossSectionDataSet* kinelCS =
79 new G4CrossSectionInelastic(
new G4ComponentGGHadronNucleusXsc);
82 G4VCrossSectionDataSet* kelCS =
83 new G4CrossSectionElastic(
new G4ComponentGGHadronNucleusXsc);
89 procMan = G4KaonPlus::KaonPlus()->GetProcessManager();
92 G4HadronElasticProcess* kpProcEl =
new G4HadronElasticProcess;
93 kpProcEl->RegisterMe(elModel);
94 kpProcEl->AddDataSet(kelCS);
95 procMan->AddDiscreteProcess(kpProcEl);
98 G4HadronInelasticProcess* kpProcInel =
new G4HadronInelasticProcess(
"kaon+Inelastic", G4KaonPlus::Definition());
99 kpProcInel->RegisterMe(loInelModel);
100 kpProcInel->RegisterMe(m_ftfp);
101 kpProcInel->AddDataSet(kinelCS);
102 procMan->AddDiscreteProcess(kpProcInel);
108 procMan = G4KaonMinus::KaonMinus()->GetProcessManager();
111 G4HadronElasticProcess* kmProcEl =
new G4HadronElasticProcess;
112 kmProcEl->RegisterMe(elModel);
113 kmProcEl->AddDataSet(kelCS);
114 procMan->AddDiscreteProcess(kmProcEl);
117 G4HadronInelasticProcess* kmProcInel =
new G4HadronInelasticProcess(
"kaon-Inelastic", G4KaonMinus::Definition());
118 kmProcInel->RegisterMe(loInelModel);
119 kmProcInel->RegisterMe(m_ftfp);
120 kmProcInel->AddDataSet(kinelCS);
121 procMan->AddDiscreteProcess(kmProcInel);
124 G4HadronicAbsorptionBertini* bertAbsorb =
new G4HadronicAbsorptionBertini;
125 procMan->AddRestProcess(bertAbsorb);
131 procMan = G4KaonZeroLong::KaonZeroLong()->GetProcessManager();
134 G4HadronElasticProcess* k0LProcEl =
new G4HadronElasticProcess;
135 k0LProcEl->RegisterMe(elModel);
136 k0LProcEl->AddDataSet(kelCS);
137 procMan->AddDiscreteProcess(k0LProcEl);
140 G4HadronInelasticProcess* k0LProcInel =
new G4HadronInelasticProcess(
"kaon0LInelastic", G4KaonZeroLong::Definition());
141 k0LProcInel->RegisterMe(loInelModel);
142 k0LProcInel->RegisterMe(m_ftfp);
143 k0LProcInel->AddDataSet(kinelCS);
144 procMan->AddDiscreteProcess(k0LProcInel);
150 procMan = G4KaonZeroShort::KaonZeroShort()->GetProcessManager();
153 G4HadronElasticProcess* k0SProcEl =
new G4HadronElasticProcess;
154 k0SProcEl->RegisterMe(elModel);
155 k0SProcEl->AddDataSet(kelCS);
156 procMan->AddDiscreteProcess(k0SProcEl);
159 G4HadronInelasticProcess* k0SProcInel =
new G4HadronInelasticProcess(
"kaon0SInelastic", G4KaonZeroShort::Definition());
160 k0SProcInel->RegisterMe(loInelModel);
161 k0SProcInel->RegisterMe(m_ftfp);
162 k0SProcInel->AddDataSet(kinelCS);
163 procMan->AddDiscreteProcess(k0SProcInel);
Abstract base class for different kinds of events.