11 #include <simulation/physicslist/PionPhysics.h>
13 #include "G4ProcessManager.hh"
14 #include "G4PionPlusInelasticProcess.hh"
15 #include "G4PionMinusInelasticProcess.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"
26 #include "G4ElasticHadrNucleusHE.hh"
28 #include "G4BGGPionElasticXS.hh"
29 #include "G4BGGPionInelasticXS.hh"
30 #include "G4SystemOfUnits.hh"
33 using namespace Simulation;
36 PionPhysics::PionPhysics()
37 : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
38 m_fragModel(nullptr), m_preCompoundModel(nullptr)
42 PionPhysics::~PionPhysics()
57 G4ProcessManager* procMan;
60 G4HadronElastic* loElModel =
new G4HadronElastic();
61 loElModel->SetMaxEnergy(1.0001 * GeV);
64 G4ElasticHadrNucleusHE* hiElModel =
new G4ElasticHadrNucleusHE();
65 hiElModel->SetMinEnergy(1.0 * GeV);
68 G4CascadeInterface* loInelModel =
new G4CascadeInterface;
69 loInelModel->SetMinEnergy(0.0);
70 loInelModel->SetMaxEnergy(12.0 * GeV);
73 m_ftfp =
new G4TheoFSGenerator(
"FTFP");
76 new G4ExcitedStringDecay(
m_fragModel =
new G4LundStringFragmentation);
82 m_ftfp->SetMinEnergy(10 * GeV);
83 m_ftfp->SetMaxEnergy(100 * TeV);
89 procMan = G4PionPlus::PionPlus()->GetProcessManager();
92 G4HadronElasticProcess* pipProcEl =
new G4HadronElasticProcess;
93 pipProcEl->RegisterMe(loElModel);
94 pipProcEl->RegisterMe(hiElModel);
95 pipProcEl->AddDataSet(
new G4BGGPionElasticXS(G4PionPlus::PionPlus()));
96 procMan->AddDiscreteProcess(pipProcEl);
99 G4PionPlusInelasticProcess* pipProcInel =
new G4PionPlusInelasticProcess;
100 pipProcInel->RegisterMe(loInelModel);
101 pipProcInel->RegisterMe(
m_ftfp);
102 pipProcInel->AddDataSet(
new G4BGGPionInelasticXS(G4PionPlus::PionPlus()));
103 procMan->AddDiscreteProcess(pipProcInel);
109 procMan = G4PionMinus::PionMinus()->GetProcessManager();
112 G4HadronElasticProcess* pimProcEl =
new G4HadronElasticProcess;
113 pimProcEl->RegisterMe(loElModel);
114 pimProcEl->RegisterMe(hiElModel);
115 pimProcEl->AddDataSet(
new G4BGGPionElasticXS(G4PionMinus::PionMinus()));
116 procMan->AddDiscreteProcess(pimProcEl);
119 G4PionMinusInelasticProcess* pimProcInel =
new G4PionMinusInelasticProcess;
120 pimProcInel->RegisterMe(loInelModel);
121 pimProcInel->RegisterMe(
m_ftfp);
122 pimProcInel->AddDataSet(
new G4BGGPionInelasticXS(G4PionMinus::PionMinus()));
123 procMan->AddDiscreteProcess(pimProcInel);
126 G4HadronicAbsorptionBertini* bertAbsorb =
new G4HadronicAbsorptionBertini;
127 procMan->AddRestProcess(bertAbsorb);