8 #include "G4SystemOfUnits.hh" 9 #include "G4ParticleDefinition.hh" 10 #include "G4ParticleTable.hh" 11 #include "G4PionBuilder.hh" 12 #include "G4BertiniPionBuilder.hh" 13 #include "G4FTFPPionBuilder.hh" 15 #include "G4KaonBuilder.hh" 16 #include "G4BertiniKaonBuilder.hh" 17 #include "G4FTFPKaonBuilder.hh" 19 #include "G4ProtonBuilder.hh" 20 #include "G4BertiniProtonBuilder.hh" 21 #include "G4FTFPNeutronBuilder.hh" 22 #include "G4FTFPProtonBuilder.hh" 24 #include "G4NeutronBuilder.hh" 25 #include "G4BertiniNeutronBuilder.hh" 26 #include "G4FTFPNeutronBuilder.hh" 28 #include "G4HyperonFTFPBuilder.hh" 29 #include "G4AntiBarionBuilder.hh" 30 #include "G4FTFPAntiBarionBuilder.hh" 32 #include "G4MesonConstructor.hh" 33 #include "G4BaryonConstructor.hh" 34 #include "G4ShortLivedConstructor.hh" 36 #include "G4ComponentGGHadronNucleusXsc.hh" 37 #include "G4CrossSectionInelastic.hh" 38 #include "G4HadronCaptureProcess.hh" 39 #include "G4NeutronRadCapture.hh" 40 #include "G4NeutronInelasticXS.hh" 41 #include "G4NeutronCaptureXS.hh" 43 #include "G4CrossSectionDataSetRegistry.hh" 45 #include "G4PhysListUtil.hh" 46 #include "G4ProcessManager.hh" 47 #include "G4Threading.hh" 50 : G4VPhysicsConstructor(
"hInelastic CMS FTFP_BERT"), QuasiElastic(
false) {
64 std::for_each(
xs_ds.Begin(),
xs_ds.End(), [](G4VCrossSectionDataSet* el) {
delete el; });
68 G4MesonConstructor pMesonConstructor;
69 pMesonConstructor.ConstructParticle();
71 G4BaryonConstructor pBaryonConstructor;
72 pBaryonConstructor.ConstructParticle();
74 G4ShortLivedConstructor pShortLivedConstructor;
75 pShortLivedConstructor.ConstructParticle();
80 std::for_each(
xs_ds.Begin(),
xs_ds.End(), [](G4VCrossSectionDataSet* el) {
delete el; });
82 G4VPhysicsConstructor::TerminateWorker();
86 G4cout << G4endl <<
" FTFP_BERT : new threshold between BERT and FTFP is over the interval " << G4endl
107 auto neu =
new G4NeutronBuilder;
111 neu->RegisterMe(ftfpn);
113 auto bertn =
new G4BertiniNeutronBuilder;
115 neu->RegisterMe(bertn);
116 bertn->SetMinEnergy(0. *
GeV);
122 auto pro =
new G4ProtonBuilder;
126 pro->RegisterMe(ftfpp);
128 auto bertp =
new G4BertiniProtonBuilder;
130 pro->RegisterMe(bertp);
136 auto pi =
new G4PionBuilder;
140 pi->RegisterMe(ftfppi);
142 auto bertpi =
new G4BertiniPionBuilder;
144 pi->RegisterMe(bertpi);
150 auto k =
new G4KaonBuilder;
154 k->RegisterMe(ftfpk);
156 auto bertk =
new G4BertiniKaonBuilder;
158 k->RegisterMe(bertk);
165 auto hyp =
new G4HyperonFTFPBuilder;
170 auto abar =
new G4AntiBarionBuilder;
172 auto ftfpabar =
new G4FTFPAntiBarionBuilder(
QuasiElastic);
173 AddBuilder(ftfpabar);
174 abar->RegisterMe(ftfpabar);
179 if (G4Threading::IsMasterThread()) {
188 auto xsk =
new G4ComponentGGHadronNucleusXsc();
190 G4VCrossSectionDataSet* kaonxs =
new G4CrossSectionInelastic(xsk);
191 xs_ds.Push_back(kaonxs);
192 G4PhysListUtil::FindInelasticProcess(G4KaonMinus::KaonMinus())->AddDataSet(kaonxs);
193 G4PhysListUtil::FindInelasticProcess(G4KaonPlus::KaonPlus())->AddDataSet(kaonxs);
194 G4PhysListUtil::FindInelasticProcess(G4KaonZeroShort::KaonZeroShort())->AddDataSet(kaonxs);
195 G4PhysListUtil::FindInelasticProcess(G4KaonZeroLong::KaonZeroLong())->AddDataSet(kaonxs);
198 auto xs_n_in = (G4NeutronInelasticXS*)G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(
199 G4NeutronInelasticXS::Default_Name());
200 xs_ds.Push_back(xs_n_in);
201 G4PhysListUtil::FindInelasticProcess(G4Neutron::Neutron())->AddDataSet(xs_n_in);
202 G4HadronicProcess*
capture =
nullptr;
203 G4ProcessManager* pmanager = G4Neutron::Neutron()->GetProcessManager();
204 G4ProcessVector*
pv = pmanager->GetProcessList();
205 for (
size_t i = 0; i < static_cast<size_t>(pv->size()); ++
i) {
206 if (fCapture == ((*pv)[
i])->GetProcessSubType()) {
207 capture =
static_cast<G4HadronicProcess*
>((*pv)[
i]);
211 capture =
new G4HadronCaptureProcess(
"nCapture");
212 pmanager->AddDiscreteProcess(capture);
214 auto xs_n_c = (G4NeutronCaptureXS*)G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(
215 G4NeutronCaptureXS::Default_Name());
216 xs_ds.Push_back(xs_n_c);
217 capture->AddDataSet(xs_n_c);
218 capture->RegisterMe(
new G4NeutronRadCapture());
~CMSHadronPhysicsFTFP_BERT() override
G4Cache< G4ComponentGGHadronNucleusXsc * > xs_k
CMSHadronPhysicsFTFP_BERT(G4int verbose=1)
void ConstructProcess() override
virtual void DumpBanner()
void TerminateWorker() override
virtual void ExtraConfiguration()
G4VectorCache< G4VCrossSectionDataSet * > xs_ds
virtual void CreateModels()
void ConstructParticle() override