Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 //--------------------------------------------------------------------------- 28 // 29 // ClassName: 30 // 31 // Author: 2010 Tatsumi Koi, Gunter Folger 32 // created from G4HadronPhysicsFTFP_BERT 33 // 34 // Modified: 35 // 36 // 2020.05.07 A.Ribon used the newly introduced G4HyperonBuilder 37 // 2019.08.01 A.Ribon replaced explicit numbers for the energy transition 38 // region with values taken from G4HadronicParameters 39 // 2014.08.05 K.L.Genser added provisions for modifing the Bertini to 40 // FTF transition energy region 41 // 42 //---------------------------------------------------------------------------- 43 // 44 #include <iomanip> 45 46 #include "G4HadronPhysicsShielding.hh" 47 48 #include "globals.hh" 49 #include "G4ios.hh" 50 #include "G4SystemOfUnits.hh" 51 #include "G4ParticleDefinition.hh" 52 #include "G4ParticleTable.hh" 53 54 #include "G4MesonConstructor.hh" 55 #include "G4BaryonConstructor.hh" 56 #include "G4ShortLivedConstructor.hh" 57 #include "G4IonConstructor.hh" 58 59 #include "G4PionBuilder.hh" 60 #include "G4BertiniPionBuilder.hh" 61 #include "G4FTFPPionBuilder.hh" 62 63 #include "G4KaonBuilder.hh" 64 #include "G4BertiniKaonBuilder.hh" 65 #include "G4FTFPKaonBuilder.hh" 66 67 #include "G4ProtonBuilder.hh" 68 #include "G4BertiniProtonBuilder.hh" 69 #include "G4FTFPNeutronBuilder.hh" 70 #include "G4FTFPProtonBuilder.hh" 71 72 #include "G4NeutronBuilder.hh" 73 #include "G4BertiniNeutronBuilder.hh" 74 #include "G4FTFPNeutronBuilder.hh" 75 #include "G4NeutronPHPBuilder.hh" 76 77 #include "G4HyperonBuilder.hh" 78 #include "G4HyperonFTFPBuilder.hh" 79 #include "G4AntiBarionBuilder.hh" 80 #include "G4FTFPAntiBarionBuilder.hh" 81 82 #include "G4ParticleHPBGGNucleonInelasticXS.hh" 83 #include "G4ParticleHPJENDLHEInelasticData.hh" 84 #include "G4ParticleHPInelasticData.hh" 85 #include "G4NeutronLENDBuilder.hh" 86 87 #include "G4BGGNucleonInelasticXS.hh" 88 #include "G4CrossSectionDataSetRegistry.hh" 89 #include "G4PhysListUtil.hh" 90 91 #include "G4ComponentGGHadronNucleusXsc.hh" 92 #include "G4CrossSectionInelastic.hh" 93 #include "G4NeutronRadCapture.hh" 94 #include "G4NeutronCaptureXS.hh" 95 #include "G4ParticleHPCaptureData.hh" 96 #include "G4LFission.hh" 97 98 #include "G4CrossSectionDataSetRegistry.hh" 99 #include "G4PhysListUtil.hh" 100 #include "G4HadronicParameters.hh" 101 #include "G4ProcessManager.hh" 102 103 // factory 104 #include "G4PhysicsConstructorFactory.hh" 105 // 106 G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronPhysicsShielding); 107 108 109 G4HadronPhysicsShielding::G4HadronPhysicsShielding(G4int verb) 110 : G4HadronPhysicsShielding() 111 { 112 G4HadronicParameters::Instance()->SetVerboseLevel(verb); 113 } 114 115 G4HadronPhysicsShielding::G4HadronPhysicsShielding(const G4String& name) 116 : G4HadronPhysicsShielding(name, false) 117 {} 118 119 G4HadronPhysicsShielding::G4HadronPhysicsShielding(const G4String& name, G4bool qe) 120 : G4HadronPhysicsFTFP_BERT(name, qe), useLEND_(false), evaluation_("") 121 { 122 minBERT_neutron = 19.9*CLHEP::MeV; 123 } 124 125 G4HadronPhysicsShielding::G4HadronPhysicsShielding(const G4String& name, G4int verb) 126 : G4HadronPhysicsShielding(name, false) 127 { 128 G4HadronicParameters::Instance()->SetVerboseLevel(verb); 129 } 130 131 G4HadronPhysicsShielding::G4HadronPhysicsShielding(const G4String& name, G4int verb, 132 G4double minFTFPEnergy, G4double maxBertiniEnergy) 133 : G4HadronPhysicsShielding(name, false) 134 { 135 G4HadronicParameters::Instance()->SetVerboseLevel(verb); 136 minFTFP_pion = minFTFPEnergy; 137 maxBERT_pion = maxBertiniEnergy; 138 minFTFP_kaon = minFTFPEnergy; 139 maxBERT_kaon = maxBertiniEnergy; 140 minFTFP_proton = minFTFPEnergy; 141 maxBERT_proton = maxBertiniEnergy; 142 minFTFP_neutron = minFTFPEnergy; 143 maxBERT_neutron = maxBertiniEnergy; 144 } 145 146 G4HadronPhysicsShielding::~G4HadronPhysicsShielding() 147 {} 148 149 void G4HadronPhysicsShielding::Neutron() 150 { 151 G4HadronicParameters* param = G4HadronicParameters::Instance(); 152 G4bool useFactorXS = param->ApplyFactorXS(); 153 154 auto neu = new G4NeutronBuilder( true ); // Fission on 155 AddBuilder(neu); 156 auto ftfpneu = new G4FTFPNeutronBuilder(QuasiElastic); 157 AddBuilder(ftfpneu); 158 ftfpneu->SetMinEnergy(minFTFP_neutron); 159 neu->RegisterMe(ftfpneu); 160 auto bertneu = new G4BertiniNeutronBuilder; 161 AddBuilder(bertneu); 162 bertneu->SetMaxEnergy(maxBERT_neutron); 163 bertneu->SetMinEnergy(minBERT_neutron); 164 neu->RegisterMe(bertneu); 165 if(useLEND_) { 166 auto hpneu = new G4NeutronLENDBuilder(evaluation_); 167 AddBuilder(hpneu); 168 neu->RegisterMe(hpneu); 169 } else { 170 auto hpneu = new G4NeutronPHPBuilder; 171 AddBuilder(hpneu); 172 neu->RegisterMe(hpneu); 173 } 174 neu->Build(); 175 176 const G4ParticleDefinition* neutron = G4Neutron::Neutron(); 177 G4HadronicProcess* inel = G4PhysListUtil::FindInelasticProcess(neutron); 178 if(inel) { 179 // Register the G4ParticleHPJENDLHEInelasticData as the 2nd priority. 180 inel->GetCrossSectionDataStore()->AddDataSet( new G4ParticleHPJENDLHEInelasticData, 1 ); 181 if( useFactorXS ) inel->MultiplyCrossSectionBy( param->XSFactorNucleonInelastic() ); 182 } 183 184 G4HadronicProcess* capture = G4PhysListUtil::FindCaptureProcess(neutron); 185 if (capture) { 186 G4NeutronRadCapture* theNeutronRadCapture = new G4NeutronRadCapture(); 187 theNeutronRadCapture->SetMinEnergy( minBERT_neutron ); 188 capture->RegisterMe( theNeutronRadCapture ); 189 } 190 G4HadronicProcess* fission = G4PhysListUtil::FindFissionProcess(neutron); 191 if (fission) { 192 G4LFission* theNeutronLEPFission = new G4LFission(); 193 theNeutronLEPFission->SetMinEnergy( minBERT_neutron ); 194 theNeutronLEPFission->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() ); 195 fission->RegisterMe( theNeutronLEPFission ); 196 } 197 } 198 199 void G4HadronPhysicsShielding::ConstructProcess() 200 { 201 if ( G4Threading::IsMasterThread() && 202 G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { 203 DumpBanner(); 204 } 205 CreateModels(); 206 } 207 208 209