ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
HadronPhysicsCRMC_FTFP_BERT.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file HadronPhysicsCRMC_FTFP_BERT.cc
1
//
2
// ********************************************************************
3
// * License and Disclaimer *
4
// * *
5
// * The Geant4 software is copyright of the Copyright Holders of *
6
// * the Geant4 Collaboration. It is provided under the terms and *
7
// * conditions of the Geant4 Software License, included in the file *
8
// * LICENSE and available at http://cern.ch/geant4/license . These *
9
// * include a list of copyright holders. *
10
// * *
11
// * Neither the authors of this software system, nor their employing *
12
// * institutes,nor the agencies providing financial support for this *
13
// * work make any representation or warranty, express or implied, *
14
// * regarding this software system or assume any liability for its *
15
// * use. Please see the license in the file LICENSE and URL above *
16
// * for the full disclaimer and the limitation of liability. *
17
// * *
18
// * This code implementation is the result of the scientific and *
19
// * technical work of the GEANT4 collaboration. *
20
// * By using, copying, modifying or distributing the software (or *
21
// * any work based on the software) you agree to acknowledge its *
22
// * use in resulting scientific publications, and indicate your *
23
// * acceptance of all terms of the Geant4 Software license. *
24
// ********************************************************************
25
//
26
//
27
//---------------------------------------------------------------------------
28
//
29
// ClassName: HadronPhysicsCRMC_FTFP_BERT
30
//
31
// Authors: 2018 Alberto Ribon
32
//
33
// Modified:
34
//----------------------------------------------------------------------------
35
//
36
#ifdef G4_USE_CRMC
37
38
#include <iomanip>
39
#include "
HadronPhysicsCRMC_FTFP_BERT.hh
"
40
#include "
globals.hh
"
41
#include "
G4ios.hh
"
42
#include "
G4SystemOfUnits.hh
"
43
#include "
G4ParticleDefinition.hh
"
44
#include "
G4ParticleTable.hh
"
45
#include "
G4PionBuilder.hh
"
46
#include "
G4FTFPPionBuilder.hh
"
47
#include "
CRMCPionBuilder.hh
"
48
#include "
G4BertiniPionBuilder.hh
"
49
#include "
G4KaonBuilder.hh
"
50
#include "
G4FTFPKaonBuilder.hh
"
51
#include "
CRMCKaonBuilder.hh
"
52
#include "
G4BertiniKaonBuilder.hh
"
53
#include "
G4ProtonBuilder.hh
"
54
#include "
G4FTFPProtonBuilder.hh
"
55
#include "
CRMCProtonBuilder.hh
"
56
#include "
G4BertiniProtonBuilder.hh
"
57
#include "
G4NeutronBuilder.hh
"
58
#include "
G4FTFPNeutronBuilder.hh
"
59
#include "
CRMCNeutronBuilder.hh
"
60
#include "
G4BertiniNeutronBuilder.hh
"
61
#include "
G4HyperonFTFPBuilder.hh
"
62
#include "
G4AntiBarionBuilder.hh
"
63
#include "
G4FTFPAntiBarionBuilder.hh
"
64
#include "
G4MesonConstructor.hh
"
65
#include "
G4BaryonConstructor.hh
"
66
#include "
G4ShortLivedConstructor.hh
"
67
#include "
G4IonConstructor.hh
"
68
#include "
G4ComponentGGHadronNucleusXsc.hh
"
69
#include "
G4HadronCaptureProcess.hh
"
70
#include "
G4NeutronRadCapture.hh
"
71
#include "
G4NeutronInelasticXS.hh
"
72
#include "
G4NeutronCaptureXS.hh
"
73
#include "
G4CrossSectionInelastic.hh
"
74
#include "
G4CrossSectionDataSetRegistry.hh
"
75
#include "
G4PhysListUtil.hh
"
76
#include "
G4ProcessManager.hh
"
77
#include "
G4HadronicParameters.hh
"
78
#include "
G4PhysicsConstructorFactory.hh
"
79
//
80
G4_DECLARE_PHYSCONSTR_FACTORY
(
HadronPhysicsCRMC_FTFP_BERT
);
81
82
83
HadronPhysicsCRMC_FTFP_BERT::HadronPhysicsCRMC_FTFP_BERT
(
G4int
) :
84
HadronPhysicsCRMC_FTFP_BERT
(
"hInelastic CRMC_FTFP_BERT"
) {}
85
86
87
HadronPhysicsCRMC_FTFP_BERT::HadronPhysicsCRMC_FTFP_BERT
(
const
G4String
&
name
) :
88
G4VPhysicsConstructor
( name ) {
89
minCRMC = 100.0*
GeV
;
90
maxFTFP = 110.0*
GeV
;
91
minFTFP =
G4HadronicParameters::Instance
()->
GetMinEnergyTransitionFTF_Cascade
();
92
maxBERT =
G4HadronicParameters::Instance
()->
GetMaxEnergyTransitionFTF_Cascade
();
93
minBERT = 0.0*
GeV
;
94
}
95
96
97
HadronPhysicsCRMC_FTFP_BERT::~HadronPhysicsCRMC_FTFP_BERT
() {
98
}
99
100
101
void
HadronPhysicsCRMC_FTFP_BERT::ConstructParticle
() {
102
G4MesonConstructor
pMesonConstructor;
103
pMesonConstructor.
ConstructParticle
();
104
G4BaryonConstructor
pBaryonConstructor;
105
pBaryonConstructor.
ConstructParticle
();
106
G4ShortLivedConstructor
pShortLivedConstructor;
107
pShortLivedConstructor.
ConstructParticle
();
108
}
109
110
111
void
HadronPhysicsCRMC_FTFP_BERT::DumpBanner
() {
112
G4cout
<<
G4endl
113
<<
" CRMC_FTFP_BERT : thresholds for pions, kaons, protons & neutrons "
<<
G4endl
114
<<
"\t BERT : "
<<
minBERT
/
GeV
<<
" to "
<<
maxBERT
/
GeV
<<
" GeV"
<<
G4endl
115
<<
"\t FTFP : "
<<
minFTFP
/
GeV
<<
" to "
<<
maxFTFP
/
GeV
<<
" GeV"
<<
G4endl
116
<<
"\t CRMC : above "
<<
minCRMC
/
GeV
<<
" GeV"
<<
G4endl
117
<<
G4endl
;
118
}
119
120
121
void
HadronPhysicsCRMC_FTFP_BERT::CreateModels
() {
122
Neutron
();
123
Proton
();
124
Pion
();
125
Kaon
();
126
Others
();
127
}
128
129
130
void
HadronPhysicsCRMC_FTFP_BERT::Neutron
() {
131
// General schema:
132
// 1) Create a builder
133
// 2) Call AddBuilder
134
// 3) Configure the builder, possibly with sub-builders
135
// 4) Call builder->Build()
136
auto
neu
=
new
G4NeutronBuilder
;
137
AddBuilder
(
neu
);
138
auto
epos_n =
new
CRMCNeutronBuilder
;
139
AddBuilder
( epos_n );
140
epos_n->SetMinEnergy(
minCRMC
);
141
neu
->RegisterMe( epos_n );
142
auto
ftfp_n =
new
G4FTFPNeutronBuilder
(
true
);
143
AddBuilder
( ftfp_n );
144
ftfp_n->SetMinEnergy(
minFTFP
);
145
ftfp_n->SetMaxEnergy(
maxFTFP
);
146
neu
->RegisterMe( ftfp_n );
147
auto
bert_n =
new
G4BertiniNeutronBuilder
;
148
AddBuilder
( bert_n );
149
bert_n->SetMinEnergy(
minBERT
);
150
bert_n->SetMaxEnergy(
maxBERT
);
151
neu
->RegisterMe( bert_n );
152
neu
->Build();
153
}
154
155
156
void
HadronPhysicsCRMC_FTFP_BERT::Proton
() {
157
auto
pro
=
new
G4ProtonBuilder
;
158
AddBuilder
(
pro
);
159
auto
epos_p =
new
CRMCProtonBuilder
;
160
AddBuilder
( epos_p );
161
epos_p->SetMinEnergy(
minCRMC
);
162
pro
->RegisterMe( epos_p );
163
auto
ftfp_p =
new
G4FTFPProtonBuilder
(
true
);
164
AddBuilder
( ftfp_p );
165
ftfp_p->SetMinEnergy(
minFTFP
);
166
ftfp_p->SetMaxEnergy(
maxFTFP
);
167
pro
->RegisterMe( ftfp_p );
168
auto
bert_p =
new
G4BertiniProtonBuilder
;
169
AddBuilder
( bert_p );
170
bert_p->SetMinEnergy(
minBERT
);
171
bert_p->SetMaxEnergy(
maxBERT
);
172
pro
->RegisterMe( bert_p );
173
pro
->Build();
174
}
175
176
177
void
HadronPhysicsCRMC_FTFP_BERT::Pion
() {
178
auto
pi
=
new
G4PionBuilder
;
179
AddBuilder
(
pi
);
180
auto
epos_pi =
new
CRMCPionBuilder
;
181
AddBuilder
( epos_pi );
182
epos_pi->SetMinEnergy(
minCRMC
);
183
pi
->RegisterMe( epos_pi );
184
auto
ftfp_pi =
new
G4FTFPPionBuilder
(
true
);
185
AddBuilder
( ftfp_pi );
186
pi
->RegisterMe( ftfp_pi );
187
ftfp_pi->SetMinEnergy(
minFTFP
);
188
ftfp_pi->SetMaxEnergy(
maxFTFP
);
189
auto
bert_pi =
new
G4BertiniPionBuilder
;
190
AddBuilder
( bert_pi );
191
pi
->RegisterMe( bert_pi );
192
bert_pi->SetMinEnergy(
minBERT
);
193
bert_pi->SetMaxEnergy(
maxBERT
);
194
pi
->Build();
195
}
196
197
198
void
HadronPhysicsCRMC_FTFP_BERT::Kaon
() {
199
auto
k
=
new
G4KaonBuilder
;
200
AddBuilder
(
k
);
201
auto
epos_k =
new
CRMCKaonBuilder
;
202
AddBuilder
( epos_k );
203
epos_k->SetMinEnergy(
minCRMC
);
204
k
->RegisterMe( epos_k );
205
auto
ftfp_k =
new
G4FTFPKaonBuilder
(
true
);
206
AddBuilder
( ftfp_k );
207
k
->RegisterMe( ftfp_k );
208
ftfp_k->SetMinEnergy(
minFTFP
);
209
ftfp_k->SetMaxEnergy(
maxFTFP
);
210
auto
bert_k =
new
G4BertiniKaonBuilder
;
211
AddBuilder
( bert_k );
212
k
->RegisterMe( bert_k );
213
bert_k->SetMinEnergy(
minBERT
);
214
bert_k->SetMaxEnergy(
maxBERT
);
215
k
->Build();
216
}
217
218
219
void
HadronPhysicsCRMC_FTFP_BERT::Others
() {
220
// Hyperons
221
auto
ftfp_hyp =
new
G4HyperonFTFPBuilder
;
222
AddBuilder
( ftfp_hyp );
223
ftfp_hyp->Build();
224
// Anti-baryons
225
auto
abar =
new
G4AntiBarionBuilder
;
226
AddBuilder
( abar );
227
auto
ftfp_abar =
new
G4FTFPAntiBarionBuilder
(
true
);
228
AddBuilder
( ftfp_abar );
229
abar->RegisterMe( ftfp_abar );
230
abar->Build();
231
}
232
233
234
void
HadronPhysicsCRMC_FTFP_BERT::ExtraConfiguration
() {
235
// Modify cross sections for kaons
236
auto
xsk =
new
G4ComponentGGHadronNucleusXsc
;
237
xs_k
.
Put
( xsk );
238
G4VCrossSectionDataSet
* kaonxs =
new
G4CrossSectionInelastic
( xsk );
239
xs_ds
.
Push_back
( kaonxs );
240
G4PhysListUtil::FindInelasticProcess
(
G4KaonMinus::KaonMinus
() )->
AddDataSet
( kaonxs );
241
G4PhysListUtil::FindInelasticProcess
(
G4KaonPlus::KaonPlus
() )->
AddDataSet
( kaonxs );
242
G4PhysListUtil::FindInelasticProcess
(
G4KaonZeroShort::KaonZeroShort
() )->
AddDataSet
( kaonxs );
243
G4PhysListUtil::FindInelasticProcess
(
G4KaonZeroLong::KaonZeroLong
() )->
AddDataSet
( kaonxs );
244
// Modify Neutrons
245
const
G4ParticleDefinition
*
neutron
=
G4Neutron::Neutron
();
246
G4HadronicProcess
* inel =
G4PhysListUtil::FindInelasticProcess
( neutron );
247
if
( inel ) inel->
AddDataSet
(
new
G4NeutronInelasticXS
);
248
G4HadronicProcess
* capture =
G4PhysListUtil::FindCaptureProcess
( neutron );
249
if
( capture ) capture->
RegisterMe
(
new
G4NeutronRadCapture
);
250
}
251
252
253
void
HadronPhysicsCRMC_FTFP_BERT::ConstructProcess
() {
254
if
(
G4Threading::IsMasterThread
() ) {
255
DumpBanner
();
256
}
257
CreateModels
();
258
ExtraConfiguration
();
259
}
260
261
#endif //G4_USE_CRMC
262
263
geant4
tree
geant4-10.6-release
examples
extended
hadronic
Hadr02
src
HadronPhysicsCRMC_FTFP_BERT.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:07
using
1.8.2 with
ECCE GitHub integration