Belle II Software  release-06-00-14
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 "G4PionPlusInelasticProcess.hh"
13 #include "G4PionMinusInelasticProcess.hh"
14 #include "G4HadronElasticProcess.hh"
15 #include "G4HadronicAbsorptionBertini.hh"
16 
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"
25 
26 #include "G4BGGPionElasticXS.hh"
27 #include "G4BGGPionInelasticXS.hh"
28 #include "G4SystemOfUnits.hh"
29 
30 using namespace Belle2;
31 using namespace Simulation;
32 
33 
34 PionPhysics::PionPhysics()
35  : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
36  m_fragModel(nullptr), m_preCompoundModel(nullptr)
37 {}
38 
39 
40 PionPhysics::~PionPhysics()
41 {
42  delete m_stringDecay;
43  delete m_stringModel;
44  delete m_fragModel;
45  delete m_preCompoundModel;
46 }
47 
48 
49 void PionPhysics::ConstructParticle()
50 {}
51 
52 
53 void PionPhysics::ConstructProcess()
54 {
55  G4ProcessManager* procMan;
56 
57  // Low energy elastic model
58  G4HadronElastic* loElModel = new G4HadronElastic();
59  loElModel->SetMaxEnergy(1.0001 * GeV);
60 
61  // High energy elastic model
62  G4ElasticHadrNucleusHE* hiElModel = new G4ElasticHadrNucleusHE();
63  hiElModel->SetMinEnergy(1.0 * GeV);
64 
65  // Use Bertini cascade for low energies
66  G4CascadeInterface* loInelModel = new G4CascadeInterface;
67  loInelModel->SetMinEnergy(0.0);
68  loInelModel->SetMaxEnergy(12.0 * GeV);
69 
70  // Use FTFP for high energies ==>> eventually replace this with new class FTFPInterface
71  m_ftfp = new G4TheoFSGenerator("FTFP");
72  m_stringModel = new G4FTFModel;
73  m_stringDecay =
74  new G4ExcitedStringDecay(m_fragModel = new G4LundStringFragmentation);
75  m_stringModel->SetFragmentationModel(m_stringDecay);
76  m_preCompoundModel = new G4GeneratorPrecompoundInterface();
77 
78  m_ftfp->SetHighEnergyGenerator(m_stringModel);
79  m_ftfp->SetTransport(m_preCompoundModel);
80  m_ftfp->SetMinEnergy(10 * GeV);
81  m_ftfp->SetMaxEnergy(100 * TeV);
82 
84  // pi+ //
86 
87  procMan = G4PionPlus::PionPlus()->GetProcessManager();
88 
89  // elastic
90  G4HadronElasticProcess* pipProcEl = new G4HadronElasticProcess;
91  pipProcEl->RegisterMe(loElModel);
92  pipProcEl->RegisterMe(hiElModel);
93  pipProcEl->AddDataSet(new G4BGGPionElasticXS(G4PionPlus::PionPlus()));
94  procMan->AddDiscreteProcess(pipProcEl);
95 
96  // inelastic
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);
102 
104  // pi- //
106 
107  procMan = G4PionMinus::PionMinus()->GetProcessManager();
108 
109  // elastic
110  G4HadronElasticProcess* pimProcEl = new G4HadronElasticProcess;
111  pimProcEl->RegisterMe(loElModel);
112  pimProcEl->RegisterMe(hiElModel);
113  pimProcEl->AddDataSet(new G4BGGPionElasticXS(G4PionMinus::PionMinus()));
114  procMan->AddDiscreteProcess(pimProcEl);
115 
116  // inelastic
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);
122 
123  // stopping
124  G4HadronicAbsorptionBertini* bertAbsorb = new G4HadronicAbsorptionBertini;
125  procMan->AddRestProcess(bertAbsorb);
126 
127 }
128 
Abstract base class for different kinds of events.