9 #include <simulation/physicslist/PionPhysics.h>
11 #include "G4ProcessManager.hh"
12 #include "G4PionPlusInelasticProcess.hh"
13 #include "G4PionMinusInelasticProcess.hh"
14 #include "G4HadronElasticProcess.hh"
15 #include "G4HadronicAbsorptionBertini.hh"
17 #include "G4CascadeInterface.hh"
18 #include "G4TheoFSGenerator.hh"
19 #include "G4FTFModel.hh"
20 #include "G4ExcitedStringDecay.hh"
21 #include "G4LundStringFragmentation.hh"
22 #include "G4GeneratorPrecompoundInterface.hh"
23 #include "G4HadronElastic.hh"
24 #include "G4ElasticHadrNucleusHE.hh"
26 #include "G4BGGPionElasticXS.hh"
27 #include "G4BGGPionInelasticXS.hh"
28 #include "G4SystemOfUnits.hh"
31 using namespace Simulation;
34 PionPhysics::PionPhysics()
35 : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
36 m_fragModel(nullptr), m_preCompoundModel(nullptr)
40 PionPhysics::~PionPhysics()
45 delete m_preCompoundModel;
49 void PionPhysics::ConstructParticle()
53 void PionPhysics::ConstructProcess()
55 G4ProcessManager* procMan;
58 G4HadronElastic* loElModel =
new G4HadronElastic();
59 loElModel->SetMaxEnergy(1.0001 * GeV);
62 G4ElasticHadrNucleusHE* hiElModel =
new G4ElasticHadrNucleusHE();
63 hiElModel->SetMinEnergy(1.0 * GeV);
66 G4CascadeInterface* loInelModel =
new G4CascadeInterface;
67 loInelModel->SetMinEnergy(0.0);
68 loInelModel->SetMaxEnergy(12.0 * GeV);
71 m_ftfp =
new G4TheoFSGenerator(
"FTFP");
72 m_stringModel =
new G4FTFModel;
74 new G4ExcitedStringDecay(m_fragModel =
new G4LundStringFragmentation);
75 m_stringModel->SetFragmentationModel(m_stringDecay);
76 m_preCompoundModel =
new G4GeneratorPrecompoundInterface();
78 m_ftfp->SetHighEnergyGenerator(m_stringModel);
79 m_ftfp->SetTransport(m_preCompoundModel);
80 m_ftfp->SetMinEnergy(10 * GeV);
81 m_ftfp->SetMaxEnergy(100 * TeV);
87 procMan = G4PionPlus::PionPlus()->GetProcessManager();
90 G4HadronElasticProcess* pipProcEl =
new G4HadronElasticProcess;
91 pipProcEl->RegisterMe(loElModel);
92 pipProcEl->RegisterMe(hiElModel);
93 pipProcEl->AddDataSet(
new G4BGGPionElasticXS(G4PionPlus::PionPlus()));
94 procMan->AddDiscreteProcess(pipProcEl);
97 G4PionPlusInelasticProcess* pipProcInel =
new G4PionPlusInelasticProcess;
98 pipProcInel->RegisterMe(loInelModel);
99 pipProcInel->RegisterMe(m_ftfp);
100 pipProcInel->AddDataSet(
new G4BGGPionInelasticXS(G4PionPlus::PionPlus()));
101 procMan->AddDiscreteProcess(pipProcInel);
107 procMan = G4PionMinus::PionMinus()->GetProcessManager();
110 G4HadronElasticProcess* pimProcEl =
new G4HadronElasticProcess;
111 pimProcEl->RegisterMe(loElModel);
112 pimProcEl->RegisterMe(hiElModel);
113 pimProcEl->AddDataSet(
new G4BGGPionElasticXS(G4PionMinus::PionMinus()));
114 procMan->AddDiscreteProcess(pimProcEl);
117 G4PionMinusInelasticProcess* pimProcInel =
new G4PionMinusInelasticProcess;
118 pimProcInel->RegisterMe(loInelModel);
119 pimProcInel->RegisterMe(m_ftfp);
120 pimProcInel->AddDataSet(
new G4BGGPionInelasticXS(G4PionMinus::PionMinus()));
121 procMan->AddDiscreteProcess(pimProcInel);
124 G4HadronicAbsorptionBertini* bertAbsorb =
new G4HadronicAbsorptionBertini;
125 procMan->AddRestProcess(bertAbsorb);
Abstract base class for different kinds of events.