11 #include <simulation/physicslist/KaonPhysics.h>
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"
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"
29 #include "G4CrossSectionElastic.hh"
30 #include "G4CrossSectionInelastic.hh"
31 #include "G4ComponentGGHadronNucleusXsc.hh"
32 #include "G4SystemOfUnits.hh"
35 using namespace Simulation;
38 KaonPhysics::KaonPhysics()
39 : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
40 m_fragModel(nullptr), m_preCompoundModel(nullptr)
44 KaonPhysics::~KaonPhysics()
59 G4ProcessManager* procMan;
62 G4HadronElastic* elModel =
new G4HadronElastic();
65 G4CascadeInterface* loInelModel =
new G4CascadeInterface;
66 loInelModel->SetMinEnergy(0.0);
67 loInelModel->SetMaxEnergy(12.0 * GeV);
70 m_ftfp =
new G4TheoFSGenerator(
"FTFP");
73 new G4ExcitedStringDecay(
m_fragModel =
new G4LundStringFragmentation);
79 m_ftfp->SetMinEnergy(10 * GeV);
80 m_ftfp->SetMaxEnergy(100 * TeV);
83 G4VCrossSectionDataSet* kinelCS =
84 new G4CrossSectionInelastic(
new G4ComponentGGHadronNucleusXsc);
87 G4VCrossSectionDataSet* kelCS =
88 new G4CrossSectionElastic(
new G4ComponentGGHadronNucleusXsc);
94 procMan = G4KaonPlus::KaonPlus()->GetProcessManager();
97 G4HadronElasticProcess* kpProcEl =
new G4HadronElasticProcess;
98 kpProcEl->RegisterMe(elModel);
99 kpProcEl->AddDataSet(kelCS);
100 procMan->AddDiscreteProcess(kpProcEl);
103 G4KaonPlusInelasticProcess* kpProcInel =
new G4KaonPlusInelasticProcess;
104 kpProcInel->RegisterMe(loInelModel);
105 kpProcInel->RegisterMe(
m_ftfp);
106 kpProcInel->AddDataSet(kinelCS);
107 procMan->AddDiscreteProcess(kpProcInel);
113 procMan = G4KaonMinus::KaonMinus()->GetProcessManager();
116 G4HadronElasticProcess* kmProcEl =
new G4HadronElasticProcess;
117 kmProcEl->RegisterMe(elModel);
118 kmProcEl->AddDataSet(kelCS);
119 procMan->AddDiscreteProcess(kmProcEl);
122 G4KaonMinusInelasticProcess* kmProcInel =
new G4KaonMinusInelasticProcess;
123 kmProcInel->RegisterMe(loInelModel);
124 kmProcInel->RegisterMe(
m_ftfp);
125 kmProcInel->AddDataSet(kinelCS);
126 procMan->AddDiscreteProcess(kmProcInel);
129 G4HadronicAbsorptionBertini* bertAbsorb =
new G4HadronicAbsorptionBertini;
130 procMan->AddRestProcess(bertAbsorb);
136 procMan = G4KaonZeroLong::KaonZeroLong()->GetProcessManager();
139 G4HadronElasticProcess* k0LProcEl =
new G4HadronElasticProcess;
140 k0LProcEl->RegisterMe(elModel);
141 k0LProcEl->AddDataSet(kelCS);
142 procMan->AddDiscreteProcess(k0LProcEl);
145 G4KaonZeroLInelasticProcess* k0LProcInel =
new G4KaonZeroLInelasticProcess;
146 k0LProcInel->RegisterMe(loInelModel);
147 k0LProcInel->RegisterMe(
m_ftfp);
148 k0LProcInel->AddDataSet(kinelCS);
149 procMan->AddDiscreteProcess(k0LProcInel);
155 procMan = G4KaonZeroShort::KaonZeroShort()->GetProcessManager();
158 G4HadronElasticProcess* k0SProcEl =
new G4HadronElasticProcess;
159 k0SProcEl->RegisterMe(elModel);
160 k0SProcEl->AddDataSet(kelCS);
161 procMan->AddDiscreteProcess(k0SProcEl);
164 G4KaonZeroSInelasticProcess* k0SProcInel =
new G4KaonZeroSInelasticProcess;
165 k0SProcInel->RegisterMe(loInelModel);
166 k0SProcInel->RegisterMe(
m_ftfp);
167 k0SProcInel->AddDataSet(kinelCS);
168 procMan->AddDiscreteProcess(k0SProcInel);