Belle II Software  release-05-01-25
PionPhysics.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(c) 2018 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributor: Dennis Wright (SLAC) *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <simulation/physicslist/PionPhysics.h>
12 
13 #include "G4ProcessManager.hh"
14 #include "G4PionPlusInelasticProcess.hh"
15 #include "G4PionMinusInelasticProcess.hh"
16 #include "G4HadronElasticProcess.hh"
17 #include "G4HadronicAbsorptionBertini.hh"
18 
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"
27 
28 #include "G4BGGPionElasticXS.hh"
29 #include "G4BGGPionInelasticXS.hh"
30 #include "G4SystemOfUnits.hh"
31 
32 using namespace Belle2;
33 using namespace Simulation;
34 
35 
36 PionPhysics::PionPhysics()
37  : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
38  m_fragModel(nullptr), m_preCompoundModel(nullptr)
39 {}
40 
41 
42 PionPhysics::~PionPhysics()
43 {
44  delete m_stringDecay;
45  delete m_stringModel;
46  delete m_fragModel;
47  delete m_preCompoundModel;
48 }
49 
50 
52 {}
53 
54 
56 {
57  G4ProcessManager* procMan;
58 
59  // Low energy elastic model
60  G4HadronElastic* loElModel = new G4HadronElastic();
61  loElModel->SetMaxEnergy(1.0001 * GeV);
62 
63  // High energy elastic model
64  G4ElasticHadrNucleusHE* hiElModel = new G4ElasticHadrNucleusHE();
65  hiElModel->SetMinEnergy(1.0 * GeV);
66 
67  // Use Bertini cascade for low energies
68  G4CascadeInterface* loInelModel = new G4CascadeInterface;
69  loInelModel->SetMinEnergy(0.0);
70  loInelModel->SetMaxEnergy(12.0 * GeV);
71 
72  // Use FTFP for high energies ==>> eventually replace this with new class FTFPInterface
73  m_ftfp = new G4TheoFSGenerator("FTFP");
74  m_stringModel = new G4FTFModel;
76  new G4ExcitedStringDecay(m_fragModel = new G4LundStringFragmentation);
77  m_stringModel->SetFragmentationModel(m_stringDecay);
78  m_preCompoundModel = new G4GeneratorPrecompoundInterface();
79 
80  m_ftfp->SetHighEnergyGenerator(m_stringModel);
81  m_ftfp->SetTransport(m_preCompoundModel);
82  m_ftfp->SetMinEnergy(10 * GeV);
83  m_ftfp->SetMaxEnergy(100 * TeV);
84 
86  // pi+ //
88 
89  procMan = G4PionPlus::PionPlus()->GetProcessManager();
90 
91  // elastic
92  G4HadronElasticProcess* pipProcEl = new G4HadronElasticProcess;
93  pipProcEl->RegisterMe(loElModel);
94  pipProcEl->RegisterMe(hiElModel);
95  pipProcEl->AddDataSet(new G4BGGPionElasticXS(G4PionPlus::PionPlus()));
96  procMan->AddDiscreteProcess(pipProcEl);
97 
98  // inelastic
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);
104 
106  // pi- //
108 
109  procMan = G4PionMinus::PionMinus()->GetProcessManager();
110 
111  // elastic
112  G4HadronElasticProcess* pimProcEl = new G4HadronElasticProcess;
113  pimProcEl->RegisterMe(loElModel);
114  pimProcEl->RegisterMe(hiElModel);
115  pimProcEl->AddDataSet(new G4BGGPionElasticXS(G4PionMinus::PionMinus()));
116  procMan->AddDiscreteProcess(pimProcEl);
117 
118  // inelastic
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);
124 
125  // stopping
126  G4HadronicAbsorptionBertini* bertAbsorb = new G4HadronicAbsorptionBertini;
127  procMan->AddRestProcess(bertAbsorb);
128 
129 }
130 
Belle2::Simulation::PionPhysics::m_preCompoundModel
G4GeneratorPrecompoundInterface * m_preCompoundModel
Precompound model to deexcite post-collision nucleus.
Definition: PionPhysics.h:58
Belle2::Simulation::PionPhysics::m_stringModel
G4FTFModel * m_stringModel
Fritiof string model.
Definition: PionPhysics.h:49
Belle2::Simulation::PionPhysics::m_fragModel
G4LundStringFragmentation * m_fragModel
Lund string fragmentation model.
Definition: PionPhysics.h:55
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::Simulation::PionPhysics::ConstructParticle
virtual void ConstructParticle() override
Build processes, models, cross sections used in physics list.
Definition: PionPhysics.cc:51
Belle2::Simulation::PionPhysics::m_stringDecay
G4ExcitedStringDecay * m_stringDecay
Model to decay strings into hadrons.
Definition: PionPhysics.h:52
Belle2::Simulation::PionPhysics::ConstructProcess
virtual void ConstructProcess() override
Build all particle types used in physics list (empty in this class)
Definition: PionPhysics.cc:55
Belle2::Simulation::PionPhysics::m_ftfp
G4TheoFSGenerator * m_ftfp
Final state generator for QCD string models.
Definition: PionPhysics.h:46