Belle II Software development
PionPhysics.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8
9#include <simulation/physicslist/PionPhysics.h>
10
11#include "G4ProcessManager.hh"
12#include "G4HadronInelasticProcess.hh"
13#include "G4HadronElasticProcess.hh"
14#include "G4HadronicAbsorptionBertini.hh"
15
16#include "G4CascadeInterface.hh"
17#include "G4TheoFSGenerator.hh"
18#include "G4FTFModel.hh"
19#include "G4ExcitedStringDecay.hh"
20#include "G4LundStringFragmentation.hh"
21#include "G4GeneratorPrecompoundInterface.hh"
22#include "G4HadronElastic.hh"
23#include "G4ElasticHadrNucleusHE.hh"
24
25#include "G4BGGPionElasticXS.hh"
26#include "G4BGGPionInelasticXS.hh"
27#include "G4SystemOfUnits.hh"
28
29using namespace Belle2;
30using namespace Simulation;
31
32
33PionPhysics::PionPhysics()
34 : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
35 m_fragModel(nullptr), m_preCompoundModel(nullptr)
36{}
37
38
39PionPhysics::~PionPhysics()
40{
41 delete m_stringDecay;
42 delete m_stringModel;
43 delete m_fragModel;
44 delete m_preCompoundModel;
45}
46
47
48void PionPhysics::ConstructParticle()
49{}
50
51
52void PionPhysics::ConstructProcess()
53{
54 G4ProcessManager* procMan;
55
56 // Low energy elastic model
57 G4HadronElastic* loElModel = new G4HadronElastic();
58 loElModel->SetMaxEnergy(1.0001 * GeV);
59
60 // High energy elastic model
61 G4ElasticHadrNucleusHE* hiElModel = new G4ElasticHadrNucleusHE();
62 hiElModel->SetMinEnergy(1.0 * GeV);
63
64 // Use Bertini cascade for low energies
65 G4CascadeInterface* loInelModel = new G4CascadeInterface;
66 loInelModel->SetMinEnergy(0.0);
67 loInelModel->SetMaxEnergy(12.0 * GeV);
68
69 // Use FTFP for high energies ==>> eventually replace this with new class FTFPInterface
70 m_ftfp = new G4TheoFSGenerator("FTFP");
71 m_stringModel = new G4FTFModel;
72 m_stringDecay =
73 new G4ExcitedStringDecay(m_fragModel = new G4LundStringFragmentation);
74 m_stringModel->SetFragmentationModel(m_stringDecay);
75 m_preCompoundModel = new G4GeneratorPrecompoundInterface();
76
77 m_ftfp->SetHighEnergyGenerator(m_stringModel);
78 m_ftfp->SetTransport(m_preCompoundModel);
79 m_ftfp->SetMinEnergy(10 * GeV);
80 m_ftfp->SetMaxEnergy(100 * TeV);
81
83 // pi+ //
85
86 procMan = G4PionPlus::PionPlus()->GetProcessManager();
87
88 // elastic
89 G4HadronElasticProcess* pipProcEl = new G4HadronElasticProcess;
90 pipProcEl->RegisterMe(loElModel);
91 pipProcEl->RegisterMe(hiElModel);
92 pipProcEl->AddDataSet(new G4BGGPionElasticXS(G4PionPlus::PionPlus()));
93 procMan->AddDiscreteProcess(pipProcEl);
94
95 // inelastic
96 G4HadronInelasticProcess* pipProcInel = new G4HadronInelasticProcess("pi+Inelastic", G4PionPlus::Definition());
97 pipProcInel->RegisterMe(loInelModel);
98 pipProcInel->RegisterMe(m_ftfp);
99 pipProcInel->AddDataSet(new G4BGGPionInelasticXS(G4PionPlus::PionPlus()));
100 procMan->AddDiscreteProcess(pipProcInel);
101
103 // pi- //
105
106 procMan = G4PionMinus::PionMinus()->GetProcessManager();
107
108 // elastic
109 G4HadronElasticProcess* pimProcEl = new G4HadronElasticProcess;
110 pimProcEl->RegisterMe(loElModel);
111 pimProcEl->RegisterMe(hiElModel);
112 pimProcEl->AddDataSet(new G4BGGPionElasticXS(G4PionMinus::PionMinus()));
113 procMan->AddDiscreteProcess(pimProcEl);
114
115 // inelastic
116 G4HadronInelasticProcess* pimProcInel = new G4HadronInelasticProcess("pi-Inelastic", G4PionMinus::Definition());
117 pimProcInel->RegisterMe(loInelModel);
118 pimProcInel->RegisterMe(m_ftfp);
119 pimProcInel->AddDataSet(new G4BGGPionInelasticXS(G4PionMinus::PionMinus()));
120 procMan->AddDiscreteProcess(pimProcInel);
121
122 // stopping
123 G4HadronicAbsorptionBertini* bertAbsorb = new G4HadronicAbsorptionBertini;
124 procMan->AddRestProcess(bertAbsorb);
125
126}
127
Abstract base class for different kinds of events.