EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
eASTHyperonPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file eASTHyperonPhysics.cc
1 
2 //
3 // eASTHyperonPhysics.cc
4 // Hyperon hadronic physics constructor for eASTPhysicsList
5 //
6 // Jun.21.2018 : original implementation - Dennis H. Wright (SLAC)
7 // May.02.2021 : migration to Geant4 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 "eASTHyperonPhysics.hh"
15 
16 #include "G4ProcessManager.hh"
17 #include "G4Version.hh"
18 #if G4VERSION_NUMBER < 1100
19 #include "G4LambdaInelasticProcess.hh"
20 #include "G4SigmaPlusInelasticProcess.hh"
21 #include "G4SigmaMinusInelasticProcess.hh"
22 #include "G4XiZeroInelasticProcess.hh"
23 #include "G4XiMinusInelasticProcess.hh"
24 #include "G4OmegaMinusInelasticProcess.hh"
25 #else
26 #include "G4HadronInelasticProcess.hh"
27 #endif
28 
29 #include "G4HadronElasticProcess.hh"
30 #include "G4HadronicAbsorptionBertini.hh"
31 
32 #include "G4CascadeInterface.hh"
33 #include "G4TheoFSGenerator.hh"
34 #include "G4FTFModel.hh"
35 #include "G4ExcitedStringDecay.hh"
36 #include "G4LundStringFragmentation.hh"
37 #include "G4GeneratorPrecompoundInterface.hh"
38 #include "G4HadronElastic.hh"
39 
40 #include "G4ChipsHyperonElasticXS.hh"
41 #include "G4ChipsHyperonInelasticXS.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("eASTHyperon")
58 {;}
59 
61 {;}
62 #endif
63 
65 {}
66 
67 
69 {
70  G4ProcessManager* procMan = 0;
71 
72  // One elastic model for all hyperon 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(6.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(4*GeV);
91  ftfp->SetMaxEnergy(100*TeV);
92 
93  // Elastic and inelastic cross section sets
94  G4ChipsHyperonElasticXS* chipsElastic = new G4ChipsHyperonElasticXS;
95  G4ChipsHyperonInelasticXS* chipsInelastic = new G4ChipsHyperonInelasticXS;
96 
98  // Lambda //
100 
101  procMan = G4Lambda::Lambda()->GetProcessManager();
102 
103  // elastic
104  G4HadronElasticProcess* lamProcEl = new G4HadronElasticProcess;
105  lamProcEl->RegisterMe(elModel);
106  lamProcEl->AddDataSet(chipsElastic);
107  procMan->AddDiscreteProcess(lamProcEl);
108 
109  // inelastic
110 #if G4VERSION_NUMBER < 1100
111  G4LambdaInelasticProcess* lamProcInel = new G4LambdaInelasticProcess;
112 #else
113  auto* lamProcInel = new G4HadronInelasticProcess("LambdaInelasticProcess",
114  G4Lambda::Lambda() );
115 #endif
116  lamProcInel->RegisterMe(loInelModel);
117  lamProcInel->RegisterMe(ftfp);
118  lamProcInel->AddDataSet(chipsInelastic);
119  procMan->AddDiscreteProcess(lamProcInel);
120 
122  // Sigma+ //
124 
125  procMan = G4SigmaPlus::SigmaPlus()->GetProcessManager();
126 
127  // elastic
128  G4HadronElasticProcess* spProcEl = new G4HadronElasticProcess;
129  spProcEl->RegisterMe(elModel);
130  spProcEl->AddDataSet(chipsElastic);
131  procMan->AddDiscreteProcess(spProcEl);
132 
133  // inelastic
134 #if G4VERSION_NUMBER < 1100
135  G4SigmaPlusInelasticProcess* spProcInel = new G4SigmaPlusInelasticProcess;
136 #else
137  auto* spProcInel = new G4HadronInelasticProcess("SigmaPlusInelasticProcess",
138  G4SigmaPlus::SigmaPlus() );
139 #endif
140  spProcInel->RegisterMe(loInelModel);
141  spProcInel->RegisterMe(ftfp);
142  spProcInel->AddDataSet(chipsInelastic);
143  procMan->AddDiscreteProcess(spProcInel);
144 
146  // Sigma- //
148 
149  procMan = G4SigmaMinus::SigmaMinus()->GetProcessManager();
150 
151  // elastic
152  G4HadronElasticProcess* smProcEl = new G4HadronElasticProcess;
153  smProcEl->RegisterMe(elModel);
154  smProcEl->AddDataSet(chipsElastic);
155  procMan->AddDiscreteProcess(smProcEl);
156 
157  // inelastic
158 #if G4VERSION_NUMBER < 1100
159  G4SigmaMinusInelasticProcess* smProcInel = new G4SigmaMinusInelasticProcess;
160 #else
161  auto* smProcInel = new G4HadronInelasticProcess("SigmaMinusInelasticProcess",
162  G4SigmaMinus::SigmaMinus() );
163 #endif
164  smProcInel->RegisterMe(loInelModel);
165  smProcInel->RegisterMe(ftfp);
166  smProcInel->AddDataSet(chipsInelastic);
167  procMan->AddDiscreteProcess(smProcInel);
168 
169  // stopping
170  G4HadronicAbsorptionBertini* smAbsorb = new G4HadronicAbsorptionBertini;
171  procMan->AddRestProcess(smAbsorb);
172 
174  // Xi0 //
176 
177  procMan = G4XiZero::XiZero()->GetProcessManager();
178 
179  // elastic
180  G4HadronElasticProcess* xzProcEl = new G4HadronElasticProcess;
181  xzProcEl->RegisterMe(elModel);
182  xzProcEl->AddDataSet(chipsElastic);
183  procMan->AddDiscreteProcess(xzProcEl);
184 
185  // inelastic
186 #if G4VERSION_NUMBER < 1100
187  G4XiZeroInelasticProcess* xzProcInel = new G4XiZeroInelasticProcess;
188 #else
189  auto* xzProcInel = new G4HadronInelasticProcess("XiZeroInelasticProcess",
190  G4XiZero::XiZero() );
191 #endif
192  xzProcInel->RegisterMe(loInelModel);
193  xzProcInel->RegisterMe(ftfp);
194  xzProcInel->AddDataSet(chipsInelastic);
195  procMan->AddDiscreteProcess(xzProcInel);
196 
198  // Xi- //
200 
201  procMan = G4XiMinus::XiMinus()->GetProcessManager();
202 
203  // elastic
204  G4HadronElasticProcess* xmProcEl = new G4HadronElasticProcess;
205  xmProcEl->RegisterMe(elModel);
206  xmProcEl->AddDataSet(chipsElastic);
207  procMan->AddDiscreteProcess(xmProcEl);
208 
209  // inelastic
210 #if G4VERSION_NUMBER < 1100
211  G4XiMinusInelasticProcess* xmProcInel = new G4XiMinusInelasticProcess;
212 #else
213  auto* xmProcInel = new G4HadronInelasticProcess("XiMinusInelasticProcess",
214  G4XiMinus::XiMinus() );
215 #endif
216  xmProcInel->RegisterMe(loInelModel);
217  xmProcInel->RegisterMe(ftfp);
218  xmProcInel->AddDataSet(chipsInelastic);
219  procMan->AddDiscreteProcess(xmProcInel);
220 
221  // stopping
222  G4HadronicAbsorptionBertini* xmAbsorb = new G4HadronicAbsorptionBertini;
223  procMan->AddRestProcess(xmAbsorb);
224 
226  // Omega- //
228 
229  procMan = G4OmegaMinus::OmegaMinus()->GetProcessManager();
230 
231  // elastic
232  G4HadronElasticProcess* omProcEl = new G4HadronElasticProcess;
233  omProcEl->RegisterMe(elModel);
234  omProcEl->AddDataSet(chipsElastic);
235  procMan->AddDiscreteProcess(omProcEl);
236 
237  // inelastic
238 #if G4VERSION_NUMBER < 1100
239  G4OmegaMinusInelasticProcess* omProcInel = new G4OmegaMinusInelasticProcess;
240 #else
241  auto* omProcInel = new G4HadronInelasticProcess("OmegaMinusInelasticProcess",
242  G4OmegaMinus::OmegaMinus() );
243 #endif
244  omProcInel->RegisterMe(loInelModel);
245  omProcInel->RegisterMe(ftfp);
246  omProcInel->AddDataSet(chipsInelastic);
247  procMan->AddDiscreteProcess(omProcInel);
248 
249  // stopping
250  G4HadronicAbsorptionBertini* omAbsorb = new G4HadronicAbsorptionBertini;
251  procMan->AddRestProcess(omAbsorb);
252 
253 }
254 
256 {}
257