9 #include "G4SystemOfUnits.hh"
10 #include "G4ParticleDefinition.hh"
11 #include "G4ParticleTable.hh"
12 #include "G4PionBuilder.hh"
13 #include "G4BertiniPionBuilder.hh"
14 #include "G4FTFPPionBuilder.hh"
16 #include "G4KaonBuilder.hh"
17 #include "G4BertiniKaonBuilder.hh"
18 #include "G4FTFPKaonBuilder.hh"
20 #include "G4ProtonBuilder.hh"
21 #include "G4BertiniProtonBuilder.hh"
22 #include "G4FTFPNeutronBuilder.hh"
23 #include "G4FTFPProtonBuilder.hh"
25 #include "G4NeutronBuilder.hh"
26 #include "G4BertiniNeutronBuilder.hh"
27 #include "G4FTFPNeutronBuilder.hh"
29 #include "G4HyperonFTFPBuilder.hh"
30 #include "G4AntiBarionBuilder.hh"
31 #include "G4FTFPAntiBarionBuilder.hh"
33 #include "G4MesonConstructor.hh"
34 #include "G4BaryonConstructor.hh"
35 #include "G4ShortLivedConstructor.hh"
37 #include "G4HadronCaptureProcess.hh"
38 #include "G4NeutronRadCapture.hh"
39 #include "G4NeutronInelasticXS.hh"
40 #include "G4NeutronCaptureXS.hh"
42 #include "G4PhysListUtil.hh"
43 #include "G4Threading.hh"
45 #include "G4DeexPrecoParameters.hh"
46 #include "G4NuclearLevelData.hh"
48 #include "G4ProcessManager.hh"
54 : G4VPhysicsConstructor(
"hInelastic FTFP_BERT") {
63 G4MesonConstructor pMesonConstructor;
64 pMesonConstructor.ConstructParticle();
66 G4BaryonConstructor pBaryonConstructor;
67 pBaryonConstructor.ConstructParticle();
69 G4ShortLivedConstructor pShortLivedConstructor;
70 pShortLivedConstructor.ConstructParticle();
74 G4cout <<
"### FTFP_BERT : transition between BERT and FTFP is over the interval " <<
minFTFP_ /
CLHEP::GeV <<
" to "
93 auto neu =
new G4NeutronBuilder;
95 auto ftfpn =
new G4FTFPNeutronBuilder(
false);
97 neu->RegisterMe(ftfpn);
99 auto bertn =
new G4BertiniNeutronBuilder;
101 neu->RegisterMe(bertn);
102 bertn->SetMinEnergy(0.0);
108 auto pro =
new G4ProtonBuilder;
110 auto ftfpp =
new G4FTFPProtonBuilder(
false);
112 pro->RegisterMe(ftfpp);
114 auto bertp =
new G4BertiniProtonBuilder;
116 pro->RegisterMe(bertp);
122 auto pi =
new G4PionBuilder;
124 auto ftfppi =
new G4FTFPPionBuilder(
false);
126 pi->RegisterMe(ftfppi);
128 auto bertpi =
new G4BertiniPionBuilder;
130 pi->RegisterMe(bertpi);
136 auto k =
new G4KaonBuilder;
138 auto ftfpk =
new G4FTFPKaonBuilder(
false);
140 k->RegisterMe(ftfpk);
142 auto bertk =
new G4BertiniKaonBuilder;
144 k->RegisterMe(bertk);
156 auto abar =
new G4AntiBarionBuilder;
158 auto ftfpabar =
new G4FTFPAntiBarionBuilder(
false);
159 AddBuilder(ftfpabar);
160 abar->RegisterMe(ftfpabar);
165 if (G4Threading::IsMasterThread()) {
173 const G4ParticleDefinition* neutron = G4Neutron::Neutron();
174 G4HadronicProcess* inel = G4PhysListUtil::FindInelasticProcess(neutron);
176 inel->AddDataSet(
new G4NeutronInelasticXS());
179 G4HadronicProcess*
capture =
nullptr;
180 G4ProcessVector* pvec = neutron->GetProcessManager()->GetProcessList();
181 size_t n = pvec->size();
182 for (
size_t i = 0;
i <
n; ++
i) {
183 if (fCapture == ((*pvec)[
i])->GetProcessSubType()) {
184 capture = static_cast<G4HadronicProcess*>((*pvec)[
i]);
189 capture->RegisterMe(
new G4NeutronRadCapture());
190 capture->AddDataSet(
new G4NeutronCaptureXS());