Belle II Software  release-08-01-10
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 
29 using namespace Belle2;
30 using namespace Simulation;
31 
32 
33 PionPhysics::PionPhysics()
34  : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
35  m_fragModel(nullptr), m_preCompoundModel(nullptr)
36 {}
37 
38 
39 PionPhysics::~PionPhysics()
40 {
41  delete m_stringDecay;
42  delete m_stringModel;
43  delete m_fragModel;
44  delete m_preCompoundModel;
45 }
46 
47 
48 void PionPhysics::ConstructParticle()
49 {}
50 
51 
52 void 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.