File indexing completed on 2025-04-04 08:05:12
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042 #ifdef G4_USE_CRMC
0043
0044 # include "HadronPhysicsCRMC_FTFP_BERT.hh"
0045
0046 # include "CRMCKaonBuilder.hh"
0047 # include "CRMCNeutronBuilder.hh"
0048 # include "CRMCPionBuilder.hh"
0049 # include "CRMCProtonBuilder.hh"
0050
0051 # include "G4BertiniKaonBuilder.hh"
0052 # include "G4BertiniNeutronBuilder.hh"
0053 # include "G4BertiniPionBuilder.hh"
0054 # include "G4BertiniProtonBuilder.hh"
0055 # include "G4FTFPKaonBuilder.hh"
0056 # include "G4FTFPNeutronBuilder.hh"
0057 # include "G4FTFPPionBuilder.hh"
0058 # include "G4FTFPProtonBuilder.hh"
0059 # include "G4HadParticles.hh"
0060 # include "G4KaonBuilder.hh"
0061 # include "G4NeutronBuilder.hh"
0062 # include "G4NeutronCaptureXS.hh"
0063 # include "G4NeutronInelasticXS.hh"
0064 # include "G4NeutronRadCapture.hh"
0065 # include "G4ParticleDefinition.hh"
0066 # include "G4ParticleTable.hh"
0067 # include "G4PhysListUtil.hh"
0068 # include "G4PhysicsConstructorFactory.hh"
0069 # include "G4PionBuilder.hh"
0070 # include "G4ProcessManager.hh"
0071 # include "G4ProcessVector.hh"
0072 # include "G4ProtonBuilder.hh"
0073 # include "G4SystemOfUnits.hh"
0074 # include "G4ios.hh"
0075 # include "globals.hh"
0076
0077 # include <iomanip>
0078
0079
0080
0081 G4_DECLARE_PHYSCONSTR_FACTORY(HadronPhysicsCRMC_FTFP_BERT);
0082
0083 const std::array<std::string, 13> HadronPhysicsCRMC_FTFP_BERT::fModelNames = {
0084 "EPOS-LHC", "EPOS-1.99", "QGSJET-01", "", "", "", "SIBYLL-2.3", "QGSJETII-04", "",
0085 "", "", "QGSJETII-03", "DPMJET-3.06"};
0086
0087
0088
0089 HadronPhysicsCRMC_FTFP_BERT::HadronPhysicsCRMC_FTFP_BERT(G4int)
0090 : HadronPhysicsCRMC_FTFP_BERT("hInelastic CRMC_FTFP_BERT", false)
0091 {}
0092
0093
0094
0095 HadronPhysicsCRMC_FTFP_BERT::HadronPhysicsCRMC_FTFP_BERT(const G4String& name, G4bool qe)
0096 : G4HadronPhysicsFTFP_BERT(name, qe)
0097 {
0098 fModel = 0;
0099
0100 fMinCRMC =
0101 100.0 * GeV;
0102 fMaxFTFP =
0103 110.0 * GeV;
0104 }
0105
0106
0107
0108 HadronPhysicsCRMC_FTFP_BERT::~HadronPhysicsCRMC_FTFP_BERT() {}
0109
0110
0111
0112 void HadronPhysicsCRMC_FTFP_BERT::Neutron()
0113 {
0114 auto neutronBuilder = new G4NeutronBuilder;
0115 AddBuilder(neutronBuilder);
0116 auto ftfpnBuilder = new G4FTFPNeutronBuilder(QuasiElastic);
0117 ftfpnBuilder->SetMinEnergy(minFTFP_neutron);
0118 ftfpnBuilder->SetMaxEnergy(fMaxFTFP);
0119 AddBuilder(ftfpnBuilder);
0120 neutronBuilder->RegisterMe(ftfpnBuilder);
0121 auto bertnBuilder = new G4BertiniNeutronBuilder;
0122 bertnBuilder->SetMaxEnergy(maxBERT_neutron);
0123 AddBuilder(bertnBuilder);
0124 neutronBuilder->RegisterMe(bertnBuilder);
0125 auto crmcnBuilder = new CRMCNeutronBuilder(fModel, fModelNames[fModel]);
0126 crmcnBuilder->SetMinEnergy(fMinCRMC);
0127 AddBuilder(crmcnBuilder);
0128 neutronBuilder->RegisterMe(crmcnBuilder);
0129 neutronBuilder->Build();
0130 const G4ParticleDefinition* neutron = G4Neutron::Neutron();
0131 G4HadronicProcess* inel = G4PhysListUtil::FindInelasticProcess(neutron);
0132 if (inel) inel->AddDataSet(new G4NeutronInelasticXS);
0133 G4HadronicProcess* capture = G4PhysListUtil::FindCaptureProcess(neutron);
0134 if (capture) capture->RegisterMe(new G4NeutronRadCapture);
0135 }
0136
0137
0138
0139 void HadronPhysicsCRMC_FTFP_BERT::Proton()
0140 {
0141 auto protonBuilder = new G4ProtonBuilder;
0142 AddBuilder(protonBuilder);
0143 auto ftfppBuilder = new G4FTFPProtonBuilder(QuasiElastic);
0144 ftfppBuilder->SetMinEnergy(minFTFP_proton);
0145 ftfppBuilder->SetMaxEnergy(fMaxFTFP);
0146 AddBuilder(ftfppBuilder);
0147 protonBuilder->RegisterMe(ftfppBuilder);
0148 auto bertpBuilder = new G4BertiniProtonBuilder;
0149 bertpBuilder->SetMaxEnergy(maxBERT_proton);
0150 AddBuilder(bertpBuilder);
0151 protonBuilder->RegisterMe(bertpBuilder);
0152 auto crmcpBuilder = new CRMCProtonBuilder(fModel, fModelNames[fModel]);
0153 crmcpBuilder->SetMinEnergy(fMinCRMC);
0154 AddBuilder(crmcpBuilder);
0155 protonBuilder->RegisterMe(crmcpBuilder);
0156 protonBuilder->Build();
0157 }
0158
0159
0160
0161 void HadronPhysicsCRMC_FTFP_BERT::Pion()
0162 {
0163 auto pionBuilder = new G4PionBuilder;
0164 AddBuilder(pionBuilder);
0165 auto ftfppiBuilder = new G4FTFPPionBuilder(QuasiElastic);
0166 ftfppiBuilder->SetMinEnergy(minFTFP_pion);
0167 ftfppiBuilder->SetMaxEnergy(fMaxFTFP);
0168 AddBuilder(ftfppiBuilder);
0169 pionBuilder->RegisterMe(ftfppiBuilder);
0170 auto bertpiBuilder = new G4BertiniPionBuilder;
0171 bertpiBuilder->SetMaxEnergy(maxBERT_pion);
0172 AddBuilder(bertpiBuilder);
0173 pionBuilder->RegisterMe(bertpiBuilder);
0174 auto crmcpiBuilder = new CRMCPionBuilder(fModel, fModelNames[fModel]);
0175 crmcpiBuilder->SetMinEnergy(fMinCRMC);
0176 AddBuilder(crmcpiBuilder);
0177 pionBuilder->RegisterMe(crmcpiBuilder);
0178 pionBuilder->Build();
0179 }
0180
0181
0182
0183 void HadronPhysicsCRMC_FTFP_BERT::Kaon()
0184 {
0185 auto kaonBuilder = new G4KaonBuilder;
0186 AddBuilder(kaonBuilder);
0187 auto ftfpkBuilder = new G4FTFPKaonBuilder(QuasiElastic);
0188 ftfpkBuilder->SetMinEnergy(minFTFP_kaon);
0189 ftfpkBuilder->SetMaxEnergy(fMaxFTFP);
0190 AddBuilder(ftfpkBuilder);
0191 kaonBuilder->RegisterMe(ftfpkBuilder);
0192 auto bertkBuilder = new G4BertiniKaonBuilder;
0193 bertkBuilder->SetMaxEnergy(maxBERT_kaon);
0194 AddBuilder(bertkBuilder);
0195 kaonBuilder->RegisterMe(bertkBuilder);
0196 auto crmckBuilder = new CRMCKaonBuilder(fModel, fModelNames[fModel]);
0197 crmckBuilder->SetMinEnergy(fMinCRMC);
0198 AddBuilder(crmckBuilder);
0199 kaonBuilder->RegisterMe(crmckBuilder);
0200 kaonBuilder->Build();
0201 }
0202
0203 #endif