9 #include <simulation/physicslist/KaonPhysics.h>
11 #include "G4ProcessManager.hh"
12 #include "G4KaonPlusInelasticProcess.hh"
13 #include "G4KaonMinusInelasticProcess.hh"
14 #include "G4KaonZeroLInelasticProcess.hh"
15 #include "G4KaonZeroSInelasticProcess.hh"
16 #include "G4HadronElasticProcess.hh"
17 #include "G4HadronicAbsorptionBertini.hh"
19 #include "G4CascadeInterface.hh"
20 #include "G4TheoFSGenerator.hh"
21 #include "G4FTFModel.hh"
22 #include "G4ExcitedStringDecay.hh"
23 #include "G4LundStringFragmentation.hh"
24 #include "G4GeneratorPrecompoundInterface.hh"
25 #include "G4HadronElastic.hh"
27 #include "G4CrossSectionElastic.hh"
28 #include "G4CrossSectionInelastic.hh"
29 #include "G4ComponentGGHadronNucleusXsc.hh"
30 #include "G4SystemOfUnits.hh"
33 using namespace Simulation;
36 KaonPhysics::KaonPhysics()
37 : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
38 m_fragModel(nullptr), m_preCompoundModel(nullptr)
42 KaonPhysics::~KaonPhysics()
47 delete m_preCompoundModel;
51 void KaonPhysics::ConstructParticle()
55 void KaonPhysics::ConstructProcess()
57 G4ProcessManager* procMan;
60 G4HadronElastic* elModel =
new G4HadronElastic();
63 G4CascadeInterface* loInelModel =
new G4CascadeInterface;
64 loInelModel->SetMinEnergy(0.0);
65 loInelModel->SetMaxEnergy(12.0 * GeV);
68 m_ftfp =
new G4TheoFSGenerator(
"FTFP");
69 m_stringModel =
new G4FTFModel;
71 new G4ExcitedStringDecay(m_fragModel =
new G4LundStringFragmentation);
72 m_stringModel->SetFragmentationModel(m_stringDecay);
73 m_preCompoundModel =
new G4GeneratorPrecompoundInterface();
75 m_ftfp->SetHighEnergyGenerator(m_stringModel);
76 m_ftfp->SetTransport(m_preCompoundModel);
77 m_ftfp->SetMinEnergy(10 * GeV);
78 m_ftfp->SetMaxEnergy(100 * TeV);
81 G4VCrossSectionDataSet* kinelCS =
82 new G4CrossSectionInelastic(
new G4ComponentGGHadronNucleusXsc);
85 G4VCrossSectionDataSet* kelCS =
86 new G4CrossSectionElastic(
new G4ComponentGGHadronNucleusXsc);
92 procMan = G4KaonPlus::KaonPlus()->GetProcessManager();
95 G4HadronElasticProcess* kpProcEl =
new G4HadronElasticProcess;
96 kpProcEl->RegisterMe(elModel);
97 kpProcEl->AddDataSet(kelCS);
98 procMan->AddDiscreteProcess(kpProcEl);
101 G4KaonPlusInelasticProcess* kpProcInel =
new G4KaonPlusInelasticProcess;
102 kpProcInel->RegisterMe(loInelModel);
103 kpProcInel->RegisterMe(m_ftfp);
104 kpProcInel->AddDataSet(kinelCS);
105 procMan->AddDiscreteProcess(kpProcInel);
111 procMan = G4KaonMinus::KaonMinus()->GetProcessManager();
114 G4HadronElasticProcess* kmProcEl =
new G4HadronElasticProcess;
115 kmProcEl->RegisterMe(elModel);
116 kmProcEl->AddDataSet(kelCS);
117 procMan->AddDiscreteProcess(kmProcEl);
120 G4KaonMinusInelasticProcess* kmProcInel =
new G4KaonMinusInelasticProcess;
121 kmProcInel->RegisterMe(loInelModel);
122 kmProcInel->RegisterMe(m_ftfp);
123 kmProcInel->AddDataSet(kinelCS);
124 procMan->AddDiscreteProcess(kmProcInel);
127 G4HadronicAbsorptionBertini* bertAbsorb =
new G4HadronicAbsorptionBertini;
128 procMan->AddRestProcess(bertAbsorb);
134 procMan = G4KaonZeroLong::KaonZeroLong()->GetProcessManager();
137 G4HadronElasticProcess* k0LProcEl =
new G4HadronElasticProcess;
138 k0LProcEl->RegisterMe(elModel);
139 k0LProcEl->AddDataSet(kelCS);
140 procMan->AddDiscreteProcess(k0LProcEl);
143 G4KaonZeroLInelasticProcess* k0LProcInel =
new G4KaonZeroLInelasticProcess;
144 k0LProcInel->RegisterMe(loInelModel);
145 k0LProcInel->RegisterMe(m_ftfp);
146 k0LProcInel->AddDataSet(kinelCS);
147 procMan->AddDiscreteProcess(k0LProcInel);
153 procMan = G4KaonZeroShort::KaonZeroShort()->GetProcessManager();
156 G4HadronElasticProcess* k0SProcEl =
new G4HadronElasticProcess;
157 k0SProcEl->RegisterMe(elModel);
158 k0SProcEl->AddDataSet(kelCS);
159 procMan->AddDiscreteProcess(k0SProcEl);
162 G4KaonZeroSInelasticProcess* k0SProcInel =
new G4KaonZeroSInelasticProcess;
163 k0SProcInel->RegisterMe(loInelModel);
164 k0SProcInel->RegisterMe(m_ftfp);
165 k0SProcInel->AddDataSet(kinelCS);
166 procMan->AddDiscreteProcess(k0SProcInel);
Abstract base class for different kinds of events.