Belle II Software  release-05-02-19
IonPhysics.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/IonPhysics.h>
12 
13 #include "G4ProcessManager.hh"
14 #include "G4HadronElasticProcess.hh"
15 #include "G4HadronInelasticProcess.hh"
16 
17 #include "G4TheoFSGenerator.hh"
18 #include "G4FTFModel.hh"
19 #include "G4ExcitedStringDecay.hh"
20 #include "G4LundStringFragmentation.hh"
21 #include "G4GeneratorPrecompoundInterface.hh"
22 #include "G4QMDReaction.hh"
23 #include "G4HadronicInteractionRegistry.hh"
24 #include "G4PreCompoundModel.hh"
25 #include "G4BinaryLightIonReaction.hh"
26 #include "G4NuclNuclDiffuseElastic.hh"
27 
28 #include "G4CrossSectionElastic.hh"
29 #include "G4CrossSectionInelastic.hh"
30 #include "G4ComponentGGNuclNuclXsc.hh"
31 #include "G4SystemOfUnits.hh"
32 
33 using namespace Belle2;
34 using namespace Simulation;
35 
36 
37 IonPhysics::IonPhysics()
38  : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
39  m_fragModel(nullptr), m_preCompoundModel(nullptr)
40 {}
41 
42 
43 IonPhysics::~IonPhysics()
44 {
45  delete m_stringDecay;
46  delete m_stringModel;
47  delete m_fragModel;
48  delete m_preCompoundModel;
49 
50  delete m_theGGNuclNuclXS;
51  delete m_ionGGXS;
52 }
53 
54 
56 {}
57 
58 
60 {
61  G4ProcessManager* procMan = 0;
62 
63  // Elastic model for generic ions (z > 2)
64  G4NuclNuclDiffuseElastic* ionElastic = new G4NuclNuclDiffuseElastic;
65  ionElastic->SetMinEnergy(0.0);
66 
67  // FTFP ==>> eventually replace this with new class FTFPInterface
68  m_ftfp = new G4TheoFSGenerator("FTFP");
69  m_stringModel = new G4FTFModel;
71  new G4ExcitedStringDecay(m_fragModel = new G4LundStringFragmentation);
72  m_stringModel->SetFragmentationModel(m_stringDecay);
73  m_preCompoundModel = new G4GeneratorPrecompoundInterface();
74 
75  m_ftfp->SetHighEnergyGenerator(m_stringModel);
76  m_ftfp->SetTransport(m_preCompoundModel);
77  m_ftfp->SetMinEnergy(10.01 * GeV);
78  m_ftfp->SetMaxEnergy(1.0 * TeV);
79 
80  // QMD model
81  G4QMDReaction* qmd = new G4QMDReaction;
82  qmd->SetMinEnergy(100.0 * MeV);
83  qmd->SetMaxEnergy(10.0 * GeV);
84 
85  // BIC ion model
86  G4HadronicInteraction* p =
87  G4HadronicInteractionRegistry::Instance()->FindModel("PRECO");
88  G4PreCompoundModel* thePreCompound = static_cast<G4PreCompoundModel*>(p);
89  if (!thePreCompound) { thePreCompound = new G4PreCompoundModel; }
90 
91  G4BinaryLightIonReaction* ionBC = new G4BinaryLightIonReaction(thePreCompound);
92  ionBC->SetMinEnergy(0.0 * MeV);
93  ionBC->SetMaxEnergy(110.0 * MeV);
94 
95  // Elastic cross section set
96  m_ionGGXS = new G4ComponentGGNuclNuclXsc;
97  G4VCrossSectionDataSet* ionElasticXS = new G4CrossSectionElastic(m_ionGGXS);
98  ionElasticXS->SetMinKinEnergy(0.0);
99 
100  // Inelastic cross section set
101  m_theGGNuclNuclXS = new G4ComponentGGNuclNuclXsc();
102  G4VCrossSectionDataSet* nuclNuclXS =
103  new G4CrossSectionInelastic(m_theGGNuclNuclXS);
104 
106  // Deuteron //
108 
109  procMan = G4Deuteron::Deuteron()->GetProcessManager();
110 
111  // elastic
112  // no model available
113 
114  // inelastic
115  G4HadronInelasticProcess* deutProcInel =
116  new G4HadronInelasticProcess("DeuteronInelProcess", G4Deuteron::Deuteron());
117  deutProcInel->RegisterMe(ionBC);
118  deutProcInel->RegisterMe(qmd);
119  deutProcInel->RegisterMe(m_ftfp);
120  deutProcInel->AddDataSet(nuclNuclXS);
121  procMan->AddDiscreteProcess(deutProcInel);
122 
124  // Triton //
126 
127  procMan = G4Triton::Triton()->GetProcessManager();
128 
129  // elastic
130  // no model available
131 
132  // inelastic
133  G4HadronInelasticProcess* tritProcInel =
134  new G4HadronInelasticProcess("TritonInelProcess", G4Triton::Triton());
135  tritProcInel->RegisterMe(ionBC);
136  tritProcInel->RegisterMe(qmd);
137  tritProcInel->RegisterMe(m_ftfp);
138  tritProcInel->AddDataSet(nuclNuclXS);
139  procMan->AddDiscreteProcess(tritProcInel);
140 
142  // He3 //
144 
145  procMan = G4He3::He3()->GetProcessManager();
146 
147  // elastic
148  // no model available
149 
150  // inelastic
151  G4HadronInelasticProcess* he3ProcInel =
152  new G4HadronInelasticProcess("He3InelProcess", G4He3::He3());
153  he3ProcInel->RegisterMe(ionBC);
154  he3ProcInel->RegisterMe(qmd);
155  he3ProcInel->RegisterMe(m_ftfp);
156  he3ProcInel->AddDataSet(nuclNuclXS);
157  procMan->AddDiscreteProcess(he3ProcInel);
158 
160  // Alpha //
162 
163  procMan = G4Alpha::Alpha()->GetProcessManager();
164 
165  // elastic
166  // no model available
167 
168  // inelastic
169  G4HadronInelasticProcess* alphProcInel =
170  new G4HadronInelasticProcess("AlphaInelProcess", G4Alpha::Alpha());
171  alphProcInel->RegisterMe(ionBC);
172  alphProcInel->RegisterMe(qmd);
173  alphProcInel->RegisterMe(m_ftfp);
174  alphProcInel->AddDataSet(nuclNuclXS);
175  procMan->AddDiscreteProcess(alphProcInel);
176 
178  // Generic ion //
180 
181  procMan = G4GenericIon::GenericIon()->GetProcessManager();
182 
183  // elastic
184  G4HadronElasticProcess* ionProcEl = new G4HadronElasticProcess;
185  ionProcEl->RegisterMe(ionElastic);
186  ionProcEl->AddDataSet(ionElasticXS);
187  procMan->AddDiscreteProcess(ionProcEl);
188 
189  // inelastic
190  G4HadronInelasticProcess* genIonProcInel =
191  new G4HadronInelasticProcess("IonInelProcess", G4GenericIon::GenericIon());
192  genIonProcInel->RegisterMe(ionBC);
193  genIonProcInel->RegisterMe(qmd);
194  genIonProcInel->RegisterMe(m_ftfp);
195  genIonProcInel->AddDataSet(nuclNuclXS);
196  procMan->AddDiscreteProcess(genIonProcInel);
197 
198 }
199 
Belle2::Simulation::IonPhysics::m_theGGNuclNuclXS
G4VComponentCrossSection * m_theGGNuclNuclXS
Cross section set for inelastic nucleus-nucleus collisions.
Definition: IonPhysics.h:63
Belle2::Simulation::IonPhysics::ConstructParticle
virtual void ConstructParticle() override
Build processes, models, cross sections used in physics list.
Definition: IonPhysics.cc:55
Belle2::Simulation::IonPhysics::m_ionGGXS
G4ComponentGGNuclNuclXsc * m_ionGGXS
Cross section set for elastic nucleus-nucleus collisions.
Definition: IonPhysics.h:66
Belle2::Simulation::IonPhysics::m_preCompoundModel
G4GeneratorPrecompoundInterface * m_preCompoundModel
Precompound model to deexcite post-collision nucleus.
Definition: IonPhysics.h:60
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::Simulation::IonPhysics::ConstructProcess
virtual void ConstructProcess() override
Build all particle types used in physics list (empty in this class)
Definition: IonPhysics.cc:59
Belle2::Simulation::IonPhysics::m_fragModel
G4LundStringFragmentation * m_fragModel
Lund string fragmentation model.
Definition: IonPhysics.h:57
Belle2::Simulation::IonPhysics::m_ftfp
G4TheoFSGenerator * m_ftfp
Final state generator for QCD string models.
Definition: IonPhysics.h:48
Belle2::Simulation::IonPhysics::m_stringModel
G4FTFModel * m_stringModel
Fritiof string model.
Definition: IonPhysics.h:51
Belle2::Simulation::IonPhysics::m_stringDecay
G4ExcitedStringDecay * m_stringDecay
Model to decay strings into hadrons.
Definition: IonPhysics.h:54