EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
eASTKaonPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file eASTKaonPhysics.cc
1 
2 //
3 // eASTKaonPhysics.hh
4 // Kaon hadronic physics constructor for eASTPhysicsList
5 //
6 // Jun.21.2018 : original implementation - Dennis H. Wright (SLAC)
7 // May.02.2021 : migration to Genat4 version 10.7 - Dennis H. Wright (SLAC)
8 // May.06.2021 : migration to eAST - Makoto Asai (SLAC)
9 // Dec.22.2021 : migration to Geant4 version 11.0 - Makoto Asai (JLab)
10 //
12 
13 
14 #include "eASTKaonPhysics.hh"
15 
16 #include "G4ProcessManager.hh"
17 #include "G4Version.hh"
18 #if G4VERSION_NUMBER < 1100
19 #include "G4KaonPlusInelasticProcess.hh"
20 #include "G4KaonMinusInelasticProcess.hh"
21 #include "G4KaonZeroLInelasticProcess.hh"
22 #include "G4KaonZeroSInelasticProcess.hh"
23 #else
24 #include "G4HadronInelasticProcess.hh"
25 #endif
26 #include "G4HadronElasticProcess.hh"
27 #include "G4HadronicAbsorptionBertini.hh"
28 
29 #include "G4CascadeInterface.hh"
30 #include "G4TheoFSGenerator.hh"
31 #include "G4FTFModel.hh"
32 #include "G4ExcitedStringDecay.hh"
33 #include "G4LundStringFragmentation.hh"
34 #include "G4GeneratorPrecompoundInterface.hh"
35 #include "G4HadronElastic.hh"
36 
37 #include "G4ChipsKaonPlusInelasticXS.hh"
38 #include "G4ChipsKaonMinusInelasticXS.hh"
39 #include "G4ChipsKaonZeroInelasticXS.hh"
40 #include "G4CrossSectionElastic.hh"
41 #include "G4ComponentGGHadronNucleusXsc.hh"
42 #include "G4SystemOfUnits.hh"
43 
44 #if G4VERSION_NUMBER < 1100
46 {}
47 
49 {
50  delete stringDecay;
51  delete stringModel;
52  delete fragModel;
53  delete preCompoundModel;
54 }
55 #else
57 : G4VPhysicsConstructor("eASTKaon")
58 {;}
59 
61 {;}
62 #endif
63 
65 {}
66 
67 
69 {
70  G4ProcessManager* procMan;
71 
72  // One elastic model for all kaon energies
73  G4HadronElastic* elModel = new G4HadronElastic();
74 
75  // Use Bertini cascade for low energies
76  G4CascadeInterface* loInelModel = new G4CascadeInterface;
77  loInelModel->SetMinEnergy(0.0);
78  loInelModel->SetMaxEnergy(12.0*GeV);
79 
80  // Use FTFP for high energies ==>> eventually replace this with new class FTFPInterface
81  ftfp = new G4TheoFSGenerator("FTFP");
82  stringModel = new G4FTFModel;
83  stringDecay =
84  new G4ExcitedStringDecay(fragModel = new G4LundStringFragmentation);
85  stringModel->SetFragmentationModel(stringDecay);
86  preCompoundModel = new G4GeneratorPrecompoundInterface();
87 
88  ftfp->SetHighEnergyGenerator(stringModel);
89  ftfp->SetTransport(preCompoundModel);
90  ftfp->SetMinEnergy(10*GeV);
91  ftfp->SetMaxEnergy(100*TeV);
92 
93  // Inelastic cross section sets
94  G4VCrossSectionDataSet* kpCS = new G4ChipsKaonPlusInelasticXS;
95  G4VCrossSectionDataSet* kmCS = new G4ChipsKaonMinusInelasticXS;
96  G4VCrossSectionDataSet* kzCS = new G4ChipsKaonZeroInelasticXS;
97 
98  // Elastic cross section
99  G4VCrossSectionDataSet* kelCS =
100  new G4CrossSectionElastic(new G4ComponentGGHadronNucleusXsc);
101 
103  // K+ //
105 
106  procMan = G4KaonPlus::KaonPlus()->GetProcessManager();
107 
108  // elastic
109  G4HadronElasticProcess* kpProcEl = new G4HadronElasticProcess;
110  kpProcEl->RegisterMe(elModel);
111  kpProcEl->AddDataSet(kelCS);
112  procMan->AddDiscreteProcess(kpProcEl);
113 
114  // inelastic
115 #if G4VERSION_NUMBER < 1100
116  G4KaonPlusInelasticProcess* kpProcInel = new G4KaonPlusInelasticProcess;
117 #else
118  auto* kpProcInel = new G4HadronInelasticProcess("KaonPlusInelasticProcess",
119  G4KaonPlus::KaonPlus() );
120 #endif
121  kpProcInel->RegisterMe(loInelModel);
122  kpProcInel->RegisterMe(ftfp);
123  kpProcInel->AddDataSet(kpCS);
124  procMan->AddDiscreteProcess(kpProcInel);
125 
127  // K- //
129 
130  procMan = G4KaonMinus::KaonMinus()->GetProcessManager();
131 
132  // elastic
133  G4HadronElasticProcess* kmProcEl = new G4HadronElasticProcess;
134  kmProcEl->RegisterMe(elModel);
135  kmProcEl->AddDataSet(kelCS);
136  procMan->AddDiscreteProcess(kmProcEl);
137 
138  // inelastic
139 #if G4VERSION_NUMBER < 1100
140  G4KaonMinusInelasticProcess* kmProcInel = new G4KaonMinusInelasticProcess;
141 #else
142  auto* kmProcInel = new G4HadronInelasticProcess("KaonMinusInelasticProcess",
143  G4KaonMinus::KaonMinus() );
144 #endif
145  kmProcInel->RegisterMe(loInelModel);
146  kmProcInel->RegisterMe(ftfp);
147  kmProcInel->AddDataSet(kmCS);
148  procMan->AddDiscreteProcess(kmProcInel);
149 
150  // stopping
151  G4HadronicAbsorptionBertini* bertAbsorb = new G4HadronicAbsorptionBertini;
152  procMan->AddRestProcess(bertAbsorb);
153 
155  // K0L //
157 
158  procMan = G4KaonZeroLong::KaonZeroLong()->GetProcessManager();
159 
160  // elastic
161  G4HadronElasticProcess* k0LProcEl = new G4HadronElasticProcess;
162  k0LProcEl->RegisterMe(elModel);
163  k0LProcEl->AddDataSet(kelCS);
164  procMan->AddDiscreteProcess(k0LProcEl);
165 
166  // inelastic
167 #if G4VERSION_NUMBER < 1100
168  G4KaonZeroLInelasticProcess* k0LProcInel = new G4KaonZeroLInelasticProcess;
169 #else
170  auto* k0LProcInel = new G4HadronInelasticProcess("Kaon0LongInelasticProcess",
171  G4KaonZeroLong::KaonZeroLong() );
172 #endif
173  k0LProcInel->RegisterMe(loInelModel);
174  k0LProcInel->RegisterMe(ftfp);
175  k0LProcInel->AddDataSet(kzCS);
176  procMan->AddDiscreteProcess(k0LProcInel);
177 
179  // K0S //
181 
182  procMan = G4KaonZeroShort::KaonZeroShort()->GetProcessManager();
183 
184  // elastic
185  G4HadronElasticProcess* k0SProcEl = new G4HadronElasticProcess;
186  k0SProcEl->RegisterMe(elModel);
187  k0SProcEl->AddDataSet(kelCS);
188  procMan->AddDiscreteProcess(k0SProcEl);
189 
190  // inelastic
191 #if G4VERSION_NUMBER < 1100
192  G4KaonZeroSInelasticProcess* k0SProcInel = new G4KaonZeroSInelasticProcess;
193 #else
194  auto* k0SProcInel = new G4HadronInelasticProcess("Kaon0ShortInelasticProcess",
195  G4KaonZeroShort::KaonZeroShort() );
196 #endif
197  k0SProcInel->RegisterMe(loInelModel);
198  k0SProcInel->RegisterMe(ftfp);
199  k0SProcInel->AddDataSet(kzCS);
200  procMan->AddDiscreteProcess(k0SProcInel);
201 }
202 
204 {}
205