EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
KaonPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file KaonPhysics.cc
1 // $Id: $
3 // //
4 // File: KaonPhysics.cc //
5 // Description: Kaon hadronic physics constructor for EICPhysicsList //
6 // //
7 // Author: Dennis H. Wright (SLAC) //
8 // Date: 3 July 2018 //
9 // //
11 
12 
13 #include "KaonPhysics.hh"
14 
15 #include <Geant4/G4ProcessManager.hh>
16 #include <Geant4/G4KaonPlusInelasticProcess.hh>
17 #include <Geant4/G4KaonMinusInelasticProcess.hh>
18 #include <Geant4/G4KaonZeroLInelasticProcess.hh>
19 #include <Geant4/G4KaonZeroSInelasticProcess.hh>
20 #include <Geant4/G4HadronElasticProcess.hh>
21 #include <Geant4/G4HadronicAbsorptionBertini.hh>
22 
23 #include <Geant4/G4CascadeInterface.hh>
24 #include <Geant4/G4TheoFSGenerator.hh>
25 #include <Geant4/G4FTFModel.hh>
26 #include <Geant4/G4ExcitedStringDecay.hh>
27 #include <Geant4/G4LundStringFragmentation.hh>
28 #include <Geant4/G4GeneratorPrecompoundInterface.hh>
29 #include <Geant4/G4HadronElastic.hh>
30 
31 #include <Geant4/G4ChipsKaonPlusInelasticXS.hh>
32 #include <Geant4/G4ChipsKaonMinusInelasticXS.hh>
33 #include <Geant4/G4ChipsKaonZeroInelasticXS.hh>
34 #include <Geant4/G4CrossSectionPairGG.hh>
35 #include <Geant4/G4CrossSectionElastic.hh>
36 #include <Geant4/G4ComponentGGHadronNucleusXsc.hh>
37 #include <Geant4/G4SystemOfUnits.hh>
38 
39 
41  ftfp(nullptr),
42  stringModel(nullptr),
43  stringDecay(nullptr),
44  fragModel(nullptr),
45  preCompoundModel(nullptr)
46 {}
47 
48 
50 {
51  delete stringDecay;
52  delete stringModel;
53  delete fragModel;
54  delete preCompoundModel;
55 }
56 
57 
59 {}
60 
61 
63 {
64  G4ProcessManager* procMan;
65 
66  // One elastic model for all kaon energies
67  G4HadronElastic* elModel = new G4HadronElastic();
68 
69  // Use Bertini cascade for low energies
70  G4CascadeInterface* loInelModel = new G4CascadeInterface;
71  loInelModel->SetMinEnergy(0.0);
72  loInelModel->SetMaxEnergy(12.0*GeV);
73 
74  // Use FTFP for high energies ==>> eventually replace this with new class FTFPInterface
75  ftfp = new G4TheoFSGenerator("FTFP");
76  stringModel = new G4FTFModel;
77  stringDecay =
78  new G4ExcitedStringDecay(fragModel = new G4LundStringFragmentation);
79  stringModel->SetFragmentationModel(stringDecay);
80  preCompoundModel = new G4GeneratorPrecompoundInterface();
81 
82  ftfp->SetHighEnergyGenerator(stringModel);
83  ftfp->SetTransport(preCompoundModel);
84  ftfp->SetMinEnergy(10*GeV);
85  ftfp->SetMaxEnergy(100*TeV);
86 
87  // Inelastic cross section sets
88  G4VCrossSectionDataSet* kpCS =
89  new G4CrossSectionPairGG(new G4ChipsKaonPlusInelasticXS, 91*GeV);
90  G4VCrossSectionDataSet* kmCS =
91  new G4CrossSectionPairGG(new G4ChipsKaonMinusInelasticXS, 91*GeV);
92  G4VCrossSectionDataSet* kzCS =
93  new G4CrossSectionPairGG(new G4ChipsKaonZeroInelasticXS, 91*GeV);
94 
95  // Elastic cross section
96  G4VCrossSectionDataSet* kelCS =
97  new G4CrossSectionElastic(new G4ComponentGGHadronNucleusXsc);
98 
100  // K+ //
102 
103  procMan = G4KaonPlus::KaonPlus()->GetProcessManager();
104 
105  // elastic
106  G4HadronElasticProcess* kpProcEl = new G4HadronElasticProcess;
107  kpProcEl->RegisterMe(elModel);
108  kpProcEl->AddDataSet(kelCS);
109  procMan->AddDiscreteProcess(kpProcEl);
110 
111  // inelastic
112  G4KaonPlusInelasticProcess* kpProcInel = new G4KaonPlusInelasticProcess;
113  kpProcInel->RegisterMe(loInelModel);
114  kpProcInel->RegisterMe(ftfp);
115  kpProcInel->AddDataSet(kpCS);
116  procMan->AddDiscreteProcess(kpProcInel);
117 
119  // K- //
121 
122  procMan = G4KaonMinus::KaonMinus()->GetProcessManager();
123 
124  // elastic
125  G4HadronElasticProcess* kmProcEl = new G4HadronElasticProcess;
126  kmProcEl->RegisterMe(elModel);
127  kmProcEl->AddDataSet(kelCS);
128  procMan->AddDiscreteProcess(kmProcEl);
129 
130  // inelastic
131  G4KaonMinusInelasticProcess* kmProcInel = new G4KaonMinusInelasticProcess;
132  kmProcInel->RegisterMe(loInelModel);
133  kmProcInel->RegisterMe(ftfp);
134  kmProcInel->AddDataSet(kmCS);
135  procMan->AddDiscreteProcess(kmProcInel);
136 
137  // stopping
138  G4HadronicAbsorptionBertini* bertAbsorb = new G4HadronicAbsorptionBertini;
139  procMan->AddRestProcess(bertAbsorb);
140 
142  // K0L //
144 
145  procMan = G4KaonZeroLong::KaonZeroLong()->GetProcessManager();
146 
147  // elastic
148  G4HadronElasticProcess* k0LProcEl = new G4HadronElasticProcess;
149  k0LProcEl->RegisterMe(elModel);
150  k0LProcEl->AddDataSet(kelCS);
151  procMan->AddDiscreteProcess(k0LProcEl);
152 
153  // inelastic
154  G4KaonZeroLInelasticProcess* k0LProcInel = new G4KaonZeroLInelasticProcess;
155  k0LProcInel->RegisterMe(loInelModel);
156  k0LProcInel->RegisterMe(ftfp);
157  k0LProcInel->AddDataSet(kzCS);
158  procMan->AddDiscreteProcess(k0LProcInel);
159 
161  // K0S //
163 
164  procMan = G4KaonZeroShort::KaonZeroShort()->GetProcessManager();
165 
166  // elastic
167  G4HadronElasticProcess* k0SProcEl = new G4HadronElasticProcess;
168  k0SProcEl->RegisterMe(elModel);
169  k0SProcEl->AddDataSet(kelCS);
170  procMan->AddDiscreteProcess(k0SProcEl);
171 
172  // inelastic
173  G4KaonZeroSInelasticProcess* k0SProcInel = new G4KaonZeroSInelasticProcess;
174  k0SProcInel->RegisterMe(loInelModel);
175  k0SProcInel->RegisterMe(ftfp);
176  k0SProcInel->AddDataSet(kzCS);
177  procMan->AddDiscreteProcess(k0SProcInel);
178 }