2 #include "G4MesonConstructor.hh" 3 #include "G4LeptonConstructor.hh" 4 #include "G4BaryonConstructor.hh" 5 #include "G4ShortLivedConstructor.hh" 6 #include "G4IonConstructor.hh" 9 #include "G4ProcessManager.hh" 10 #include "G4HadronElasticProcess.hh" 11 #include "G4PionPlusInelasticProcess.hh" 12 #include "G4PionMinusInelasticProcess.hh" 13 #include "G4KaonPlusInelasticProcess.hh" 14 #include "G4KaonMinusInelasticProcess.hh" 15 #include "G4KaonZeroLInelasticProcess.hh" 16 #include "G4KaonZeroSInelasticProcess.hh" 17 #include "G4ProtonInelasticProcess.hh" 18 #include "G4NeutronInelasticProcess.hh" 19 #include "G4HadronFissionProcess.hh" 20 #include "G4HadronCaptureProcess.hh" 21 #include "G4AntiProtonInelasticProcess.hh" 22 #include "G4AntiNeutronInelasticProcess.hh" 23 #include "G4LambdaInelasticProcess.hh" 24 #include "G4AntiLambdaInelasticProcess.hh" 25 #include "G4SigmaPlusInelasticProcess.hh" 26 #include "G4SigmaMinusInelasticProcess.hh" 27 #include "G4AntiSigmaPlusInelasticProcess.hh" 28 #include "G4AntiSigmaMinusInelasticProcess.hh" 29 #include "G4PionMinusAbsorptionAtRest.hh" 30 #include "G4KaonMinusAbsorption.hh" 31 #include "G4AntiProtonAnnihilationAtRest.hh" 32 #include "G4AntiNeutronAnnihilationAtRest.hh" 35 #include "G4PhotoNuclearProcess.hh" 36 #include "G4GammaNuclearReaction.hh" 37 #include "G4ElectroNuclearReaction.hh" 38 #include "G4ElectronNuclearProcess.hh" 42 #include "G4PiNuclearCrossSection.hh" 43 #include "G4ProtonInelasticCrossSection.hh" 44 #include "G4NeutronInelasticCrossSection.hh" 47 #include "G4LElastic.hh" 48 #include "G4CascadeInterface.hh" 49 #include "G4LEPionPlusInelastic.hh" 50 #include "G4LEPionMinusInelastic.hh" 51 #include "G4LEKaonPlusInelastic.hh" 52 #include "G4LEKaonMinusInelastic.hh" 53 #include "G4LEKaonZeroLInelastic.hh" 54 #include "G4LEKaonZeroSInelastic.hh" 55 #include "G4LEProtonInelastic.hh" 56 #include "G4LENeutronInelastic.hh" 57 #include "G4LFission.hh" 58 #include "G4LCapture.hh" 59 #include "G4LEAntiProtonInelastic.hh" 60 #include "G4LEAntiNeutronInelastic.hh" 61 #include "G4LELambdaInelastic.hh" 62 #include "G4LEAntiLambdaInelastic.hh" 63 #include "G4LESigmaPlusInelastic.hh" 64 #include "G4LESigmaMinusInelastic.hh" 65 #include "G4LEAntiSigmaPlusInelastic.hh" 66 #include "G4LEAntiSigmaMinusInelastic.hh" 78 G4MesonConstructor pMesonConstructor;
79 pMesonConstructor.ConstructParticle();
82 G4LeptonConstructor pLeptonConstructor;
83 pLeptonConstructor.ConstructParticle();
86 G4BaryonConstructor pBaryonConstructor;
87 pBaryonConstructor.ConstructParticle();
90 G4ShortLivedConstructor pShortLivedConstructor;
91 pShortLivedConstructor.ConstructParticle();
94 G4IonConstructor ionConstruct;
95 ionConstruct.ConstructParticle();
101 string hd_msg =
gemcOpt.
args[
"LOG_MSG"].args +
" Hadron Physics List: <<< ";
102 double PHY_VERBOSITY =
gemcOpt.
args[
"PHY_VERBOSITY"].arg ;
103 cout << hd_msg <<
" Building Hadron Physics Processes " << endl;
106 G4HadronElasticProcess* elasticProcess =
new G4HadronElasticProcess();
107 G4LElastic* elasticModel =
new G4LElastic();
108 elasticProcess->RegisterMe(elasticModel);
115 G4CascadeInterface* bertiniModel =
new G4CascadeInterface();
116 bertiniModel->SetMaxEnergy(9.9*GeV);
119 G4double LEPUpperLimit = 25*GeV;
120 G4double LEPpnpiLimit = 9.5*GeV;
122 G4LEKaonZeroLInelastic* LEPk0LModel =
new G4LEKaonZeroLInelastic();
123 LEPk0LModel->SetMaxEnergy(LEPUpperLimit);
125 G4LEKaonZeroSInelastic* LEPk0SModel =
new G4LEKaonZeroSInelastic();
126 LEPk0SModel->SetMaxEnergy(LEPUpperLimit);
129 G4ProcessManager * pmanager = 0;
133 theParticleIterator->reset();
134 while( (*theParticleIterator)() )
136 G4ParticleDefinition* particle = theParticleIterator->value();
137 pmanager = particle->GetProcessManager();
138 string pname = particle->GetParticleName();
139 if (elasticProcess->IsApplicable(*particle))
141 if(PHY_VERBOSITY > 2) cout << hd_msg <<
" Adding Hadron Elastic Process for " << pname << endl;
142 pmanager->AddDiscreteProcess(elasticProcess);
148 G4PhotoNuclearProcess* thePhotoNuclearProcess =
new G4PhotoNuclearProcess;
149 G4GammaNuclearReaction* theGammaReaction =
new G4GammaNuclearReaction;
150 theGammaReaction->SetMaxEnergy(20*GeV);
151 thePhotoNuclearProcess->RegisterMe(theGammaReaction);
153 G4ElectronNuclearProcess* theElectronNuclearProcess =
new G4ElectronNuclearProcess;
154 G4ElectroNuclearReaction* theElectroReaction =
new G4ElectroNuclearReaction;
155 theElectroReaction->SetMaxEnergy(20*GeV);
156 theElectronNuclearProcess->RegisterMe(theElectroReaction);
158 theParticleIterator->reset();
159 while( (*theParticleIterator)() )
161 G4ParticleDefinition* particle = theParticleIterator->value();
162 pmanager = particle->GetProcessManager();
163 string pname = particle->GetParticleName();
164 if (pname ==
"gamma")
166 if(PHY_VERBOSITY > 2) cout << hd_msg <<
" Gamma: inelastic nuclear scattering" << endl;
167 pmanager->AddDiscreteProcess(thePhotoNuclearProcess);
169 else if (pname ==
"e-")
171 if(PHY_VERBOSITY > 2) cout << hd_msg <<
" Electron: inelastic nuclear scattering" << endl;
172 pmanager->AddDiscreteProcess(thePhotoNuclearProcess);
175 else if (pname ==
"e+")
177 if(PHY_VERBOSITY > 2) cout << hd_msg <<
" Positron: inelastic nuclear scattering" << endl;
178 pmanager->AddDiscreteProcess(thePhotoNuclearProcess);
193 pmanager = G4PionPlus::PionPlus()->GetProcessManager();
195 G4PionPlusInelasticProcess* pipinelProc =
new G4PionPlusInelasticProcess();
196 G4PiNuclearCrossSection* pion_XC =
new G4PiNuclearCrossSection();
197 pipinelProc->AddDataSet(pion_XC);
198 pipinelProc->RegisterMe(bertiniModel);
200 G4LEPionPlusInelastic* LEPpipModel =
new G4LEPionPlusInelastic();
201 LEPpipModel->SetMinEnergy(LEPpnpiLimit);
202 LEPpipModel->SetMaxEnergy(LEPUpperLimit);
203 pipinelProc->RegisterMe(LEPpipModel);
205 pmanager->AddDiscreteProcess(pipinelProc);
210 pmanager = G4PionMinus::PionMinus()->GetProcessManager();
212 G4PionMinusInelasticProcess* piminelProc =
new G4PionMinusInelasticProcess();
213 piminelProc->AddDataSet(pion_XC);
214 piminelProc->RegisterMe(bertiniModel);
216 G4LEPionMinusInelastic* LEPpimModel =
new G4LEPionMinusInelastic();
217 LEPpimModel->SetMinEnergy(LEPpnpiLimit);
218 LEPpimModel->SetMaxEnergy(LEPUpperLimit);
219 piminelProc->RegisterMe(LEPpimModel);
221 pmanager->AddDiscreteProcess(piminelProc);
224 G4PionMinusAbsorptionAtRest* pimAbsorb =
new G4PionMinusAbsorptionAtRest();
225 pmanager->AddRestProcess(pimAbsorb);
230 pmanager = G4KaonPlus::KaonPlus()->GetProcessManager();
232 G4KaonPlusInelasticProcess* kpinelProc =
new G4KaonPlusInelasticProcess();
233 G4LEKaonPlusInelastic* LEPkpModel =
new G4LEKaonPlusInelastic();
234 LEPkpModel->SetMaxEnergy(LEPUpperLimit);
235 kpinelProc->RegisterMe(LEPkpModel);
236 pmanager->AddDiscreteProcess(kpinelProc);
241 pmanager = G4KaonMinus::KaonMinus()->GetProcessManager();
243 G4KaonMinusInelasticProcess* kminelProc =
new G4KaonMinusInelasticProcess();
244 G4LEKaonMinusInelastic* LEPkmModel =
new G4LEKaonMinusInelastic();
245 LEPkmModel->SetMaxEnergy(LEPUpperLimit);
246 kminelProc->RegisterMe(LEPkmModel);
247 pmanager->AddDiscreteProcess(kminelProc);
250 G4KaonMinusAbsorption* kmAbsorb =
new G4KaonMinusAbsorption();
251 pmanager->AddRestProcess(kmAbsorb);
256 pmanager = G4KaonZeroLong::KaonZeroLong()->GetProcessManager();
258 G4KaonZeroLInelasticProcess* k0LinelProc =
new G4KaonZeroLInelasticProcess();
259 k0LinelProc->RegisterMe(LEPk0LModel);
260 pmanager->AddDiscreteProcess(k0LinelProc);
265 pmanager = G4KaonZeroShort::KaonZeroShort()->GetProcessManager();
267 G4KaonZeroSInelasticProcess* k0SinelProc =
new G4KaonZeroSInelasticProcess();
268 k0SinelProc->RegisterMe(LEPk0SModel);
269 pmanager->AddDiscreteProcess(k0SinelProc);
274 pmanager = G4Proton::Proton()->GetProcessManager();
276 G4ProtonInelasticProcess* pinelProc =
new G4ProtonInelasticProcess();
277 G4ProtonInelasticCrossSection* proton_XC =
new G4ProtonInelasticCrossSection();
278 pinelProc->AddDataSet(proton_XC);
279 pinelProc->RegisterMe(bertiniModel);
281 G4LEProtonInelastic* LEPpModel =
new G4LEProtonInelastic();
282 LEPpModel->SetMinEnergy(LEPpnpiLimit);
283 LEPpModel->SetMaxEnergy(LEPUpperLimit);
284 pinelProc->RegisterMe(LEPpModel);
286 pmanager->AddDiscreteProcess(pinelProc);
291 pmanager = G4AntiProton::AntiProton()->GetProcessManager();
293 G4AntiProtonInelasticProcess* apinelProc =
new G4AntiProtonInelasticProcess();
294 G4LEAntiProtonInelastic* LEPapModel =
new G4LEAntiProtonInelastic();
295 apinelProc->RegisterMe(LEPapModel);
296 pmanager->AddDiscreteProcess(apinelProc);
299 G4AntiProtonAnnihilationAtRest* apAnnihil =
new G4AntiProtonAnnihilationAtRest();
300 pmanager->AddRestProcess(apAnnihil);
305 pmanager = G4Neutron::Neutron()->GetProcessManager();
308 pmanager->AddDiscreteProcess(elasticProcess);
311 G4NeutronInelasticProcess* ninelProc =
new G4NeutronInelasticProcess();
312 G4NeutronInelasticCrossSection* neutron_XC =
313 new G4NeutronInelasticCrossSection();
314 ninelProc->AddDataSet(neutron_XC);
315 ninelProc->RegisterMe(bertiniModel);
317 G4LENeutronInelastic* LEPnModel =
new G4LENeutronInelastic();
318 LEPnModel->SetMinEnergy(LEPpnpiLimit);
319 LEPnModel->SetMaxEnergy(LEPUpperLimit);
320 ninelProc->RegisterMe(LEPnModel);
322 pmanager->AddDiscreteProcess(ninelProc);
325 G4HadronFissionProcess* neutronFission =
new G4HadronFissionProcess();
326 G4LFission* neutronFissionModel =
new G4LFission();
327 neutronFissionModel->SetMinEnergy(0.);
328 neutronFissionModel->SetMaxEnergy(20*TeV);
329 neutronFission->RegisterMe(neutronFissionModel);
330 pmanager->AddDiscreteProcess(neutronFission);
333 G4HadronCaptureProcess* neutronCapture =
new G4HadronCaptureProcess();
334 G4LCapture* neutronCaptureModel =
new G4LCapture();
335 neutronCaptureModel->SetMinEnergy(0.);
336 neutronCaptureModel->SetMaxEnergy(20*TeV);
337 neutronCapture->RegisterMe(neutronCaptureModel);
338 pmanager->AddDiscreteProcess(neutronCapture);
343 pmanager = G4AntiNeutron::AntiNeutron()->GetProcessManager();
345 G4AntiNeutronInelasticProcess* aninelProc =
new G4AntiNeutronInelasticProcess();
346 G4LEAntiNeutronInelastic* LEPanModel =
new G4LEAntiNeutronInelastic();
347 aninelProc->RegisterMe(LEPanModel);
348 pmanager->AddDiscreteProcess(aninelProc);
351 G4AntiNeutronAnnihilationAtRest* anAnnihil =
new G4AntiNeutronAnnihilationAtRest();
352 pmanager->AddRestProcess(anAnnihil);
357 pmanager = G4Lambda::Lambda()->GetProcessManager();
359 G4LambdaInelasticProcess* linelProc =
new G4LambdaInelasticProcess();
360 G4LELambdaInelastic* LEPlModel =
new G4LELambdaInelastic();
361 linelProc->RegisterMe(LEPlModel);
362 pmanager->AddDiscreteProcess(linelProc);
367 pmanager = G4AntiLambda::AntiLambda()->GetProcessManager();
369 G4AntiLambdaInelasticProcess* alinelProc =
new G4AntiLambdaInelasticProcess();
370 G4LEAntiLambdaInelastic* LEPalModel =
new G4LEAntiLambdaInelastic();
371 alinelProc->RegisterMe(LEPalModel);
372 pmanager->AddDiscreteProcess(alinelProc);
377 pmanager = G4SigmaMinus::SigmaMinus()->GetProcessManager();
379 G4SigmaMinusInelasticProcess* sminelProc =
new G4SigmaMinusInelasticProcess();
380 G4LESigmaMinusInelastic* LEPsmModel =
new G4LESigmaMinusInelastic();
381 sminelProc->RegisterMe(LEPsmModel);
382 pmanager->AddDiscreteProcess(sminelProc);
387 pmanager = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager();
389 G4AntiSigmaMinusInelasticProcess* asminelProc =
new G4AntiSigmaMinusInelasticProcess();
390 G4LEAntiSigmaMinusInelastic* LEPasmModel =
new G4LEAntiSigmaMinusInelastic();
391 asminelProc->RegisterMe(LEPasmModel);
392 pmanager->AddDiscreteProcess(asminelProc);
397 pmanager = G4SigmaPlus::SigmaPlus()->GetProcessManager();
400 G4SigmaPlusInelasticProcess* spinelProc =
new G4SigmaPlusInelasticProcess();
401 G4LESigmaPlusInelastic* LEPspModel =
new G4LESigmaPlusInelastic();
402 spinelProc->RegisterMe(LEPspModel);
403 pmanager->AddDiscreteProcess(spinelProc);
408 pmanager = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager();
410 G4AntiSigmaPlusInelasticProcess* aspinelProc =
new G4AntiSigmaPlusInelasticProcess();
411 G4LEAntiSigmaPlusInelastic* LEPaspModel =
new G4LEAntiSigmaPlusInelastic();
412 aspinelProc->RegisterMe(LEPaspModel);
413 pmanager->AddDiscreteProcess(aspinelProc);
virtual void ConstructParticle()
map< string, opts > args
Options map.
virtual void ConstructProcess()