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")
67 std::for_each(
xs_ds.Begin(),
xs_ds.End(),[](G4VCrossSectionDataSet* el){
delete el;});
72 G4MesonConstructor pMesonConstructor;
73 pMesonConstructor.ConstructParticle();
75 G4BaryonConstructor pBaryonConstructor;
76 pBaryonConstructor.ConstructParticle();
78 G4ShortLivedConstructor pShortLivedConstructor;
79 pShortLivedConstructor.ConstructParticle();
85 std::for_each(
xs_ds.Begin(),
xs_ds.End(),[](G4VCrossSectionDataSet* el){
delete el;});
87 G4VPhysicsConstructor::TerminateWorker();
93 <<
" FTFP_BERT : new threshold between BERT and FTFP is over the interval " << G4endl
117 auto neu =
new G4NeutronBuilder;
121 neu->RegisterMe(ftfpn);
123 auto bertn =
new G4BertiniNeutronBuilder;
125 neu->RegisterMe(bertn);
126 bertn->SetMinEnergy(0.*
GeV);
133 auto pro =
new G4ProtonBuilder;
137 pro->RegisterMe(ftfpp);
139 auto bertp =
new G4BertiniProtonBuilder;
141 pro->RegisterMe(bertp);
148 auto pi =
new G4PionBuilder;
152 pi->RegisterMe(ftfppi);
154 auto bertpi =
new G4BertiniPionBuilder;
156 pi->RegisterMe(bertpi);
163 auto k =
new G4KaonBuilder;
167 k->RegisterMe(ftfpk);
169 auto bertk =
new G4BertiniKaonBuilder;
171 k->RegisterMe(bertk);
179 auto hyp =
new G4HyperonFTFPBuilder;
184 auto abar =
new G4AntiBarionBuilder;
186 auto ftfpabar =
new G4FTFPAntiBarionBuilder(
QuasiElastic);
187 AddBuilder(ftfpabar);
188 abar->RegisterMe(ftfpabar);
194 if(G4Threading::IsMasterThread()) {
204 auto xsk =
new G4ComponentGGHadronNucleusXsc();
206 G4VCrossSectionDataSet * kaonxs =
new G4CrossSectionInelastic(xsk);
207 xs_ds.Push_back(kaonxs);
208 G4PhysListUtil::FindInelasticProcess(G4KaonMinus::KaonMinus())->AddDataSet(kaonxs);
209 G4PhysListUtil::FindInelasticProcess(G4KaonPlus::KaonPlus())->AddDataSet(kaonxs);
210 G4PhysListUtil::FindInelasticProcess(G4KaonZeroShort::KaonZeroShort())->AddDataSet(kaonxs);
211 G4PhysListUtil::FindInelasticProcess(G4KaonZeroLong::KaonZeroLong())->AddDataSet(kaonxs);
214 auto xs_n_in = (G4NeutronInelasticXS*)G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4NeutronInelasticXS::Default_Name());
215 xs_ds.Push_back(xs_n_in);
216 G4PhysListUtil::FindInelasticProcess(G4Neutron::Neutron())->AddDataSet( xs_n_in );
217 G4HadronicProcess*
capture =
nullptr;
218 G4ProcessManager* pmanager = G4Neutron::Neutron()->GetProcessManager();
219 G4ProcessVector*
pv = pmanager->GetProcessList();
220 for (
size_t i=0; i < static_cast<size_t>(pv->size()); ++
i ) {
221 if ( fCapture == ((*pv)[
i])->GetProcessSubType() ) {
222 capture =
static_cast<G4HadronicProcess*
>((*pv)[
i]);
226 capture =
new G4HadronCaptureProcess(
"nCapture");
227 pmanager->AddDiscreteProcess(capture);
229 auto xs_n_c = (G4NeutronCaptureXS*)G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4NeutronCaptureXS::Default_Name());
230 xs_ds.Push_back(xs_n_c);
231 capture->AddDataSet( xs_n_c );
232 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