7 #include "G4SystemOfUnits.hh"
8 #include "G4ParticleDefinition.hh"
9 #include "G4ParticleTable.hh"
10 #include "G4PionBuilder.hh"
11 #include "G4BertiniPionBuilder.hh"
12 #include "G4FTFPPionBuilder.hh"
14 #include "G4KaonBuilder.hh"
15 #include "G4BertiniKaonBuilder.hh"
16 #include "G4FTFPKaonBuilder.hh"
18 #include "G4ProtonBuilder.hh"
19 #include "G4BertiniProtonBuilder.hh"
20 #include "G4FTFPNeutronBuilder.hh"
21 #include "G4FTFPProtonBuilder.hh"
23 #include "G4NeutronBuilder.hh"
24 #include "G4BertiniNeutronBuilder.hh"
25 #include "G4FTFPNeutronBuilder.hh"
27 #include "G4HyperonFTFPBuilder.hh"
28 #include "G4AntiBarionBuilder.hh"
29 #include "G4FTFPAntiBarionBuilder.hh"
31 #include "G4MesonConstructor.hh"
32 #include "G4BaryonConstructor.hh"
33 #include "G4ShortLivedConstructor.hh"
35 #include "G4HadronCaptureProcess.hh"
36 #include "G4NeutronRadCapture.hh"
37 #include "G4NeutronInelasticXS.hh"
38 #include "G4NeutronCaptureXS.hh"
40 #include "G4PhysListUtil.hh"
41 #include "G4Threading.hh"
43 #include "G4DeexPrecoParameters.hh"
44 #include "G4NuclearLevelData.hh"
46 #include "G4ProcessManager.hh"
52 : G4VPhysicsConstructor(
"hInelastic FTFP_BERT") {
61 G4MesonConstructor pMesonConstructor;
62 pMesonConstructor.ConstructParticle();
64 G4BaryonConstructor pBaryonConstructor;
65 pBaryonConstructor.ConstructParticle();
67 G4ShortLivedConstructor pShortLivedConstructor;
68 pShortLivedConstructor.ConstructParticle();
72 G4cout <<
"### FTFP_BERT : transition between BERT and FTFP is over the interval " <<
minFTFP_ /
CLHEP::GeV <<
" to "
91 auto neu =
new G4NeutronBuilder;
93 auto ftfpn =
new G4FTFPNeutronBuilder(
false);
95 neu->RegisterMe(ftfpn);
97 auto bertn =
new G4BertiniNeutronBuilder;
99 neu->RegisterMe(bertn);
100 bertn->SetMinEnergy(0.0);
106 auto pro =
new G4ProtonBuilder;
108 auto ftfpp =
new G4FTFPProtonBuilder(
false);
110 pro->RegisterMe(ftfpp);
112 auto bertp =
new G4BertiniProtonBuilder;
114 pro->RegisterMe(bertp);
120 auto pi =
new G4PionBuilder;
122 auto ftfppi =
new G4FTFPPionBuilder(
false);
124 pi->RegisterMe(ftfppi);
126 auto bertpi =
new G4BertiniPionBuilder;
128 pi->RegisterMe(bertpi);
134 auto k =
new G4KaonBuilder;
136 auto ftfpk =
new G4FTFPKaonBuilder(
false);
138 k->RegisterMe(ftfpk);
140 auto bertk =
new G4BertiniKaonBuilder;
142 k->RegisterMe(bertk);
149 auto hyp =
new G4HyperonFTFPBuilder;
154 auto abar =
new G4AntiBarionBuilder;
156 auto ftfpabar =
new G4FTFPAntiBarionBuilder(
false);
157 AddBuilder(ftfpabar);
158 abar->RegisterMe(ftfpabar);
163 if (G4Threading::IsMasterThread()) {
171 const G4ParticleDefinition* neutron = G4Neutron::Neutron();
172 G4HadronicProcess* inel = G4PhysListUtil::FindInelasticProcess(neutron);
174 inel->AddDataSet(
new G4NeutronInelasticXS());
177 G4HadronicProcess*
capture =
nullptr;
178 G4ProcessVector* pvec = neutron->GetProcessManager()->GetProcessList();
179 size_t n = pvec->size();
180 for (
size_t i = 0;
i <
n; ++
i) {
181 if (fCapture == ((*pvec)[
i])->GetProcessSubType()) {
182 capture = static_cast<G4HadronicProcess*>((*pvec)[
i]);
187 capture->RegisterMe(
new G4NeutronRadCapture());
188 capture->AddDataSet(
new G4NeutronCaptureXS());