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: G4HadronPhysicsQGSP_BIC_HP 30 // 31 // Author: 2006 G.Folger 32 // 33 // Based on G4HadronPhysicsQGSP_BIC 34 // 35 // Modified: 36 // 25.04.2007 G.Folger: Add code for quasielastic 37 // 31.10.2012 A.Ribon: Use G4MiscBuilder 38 // 19.03.2013 A.Ribon: Replace LEP with FTFP and BERT 39 // 05.05.2020 A.Ribon: Use QGSP for antibaryons at high energies 40 // 07.05.2020 A.Ribon: Use QGSP for hyperons (and anti-hyperons) at high energies 41 // 20.05.2020 A.Ribon: Refactoring of the class (keeping same functionalities) 42 // 43 //---------------------------------------------------------------------------- 44 45 #include <iomanip> 46 #include "G4HadronPhysicsQGSP_BIC_HP.hh" 47 #include "globals.hh" 48 #include "G4ios.hh" 49 #include "G4SystemOfUnits.hh" 50 #include "G4ParticleDefinition.hh" 51 #include "G4ParticleTable.hh" 52 #include "G4NeutronBuilder.hh" 53 #include "G4FTFPNeutronBuilder.hh" 54 #include "G4QGSPNeutronBuilder.hh" 55 #include "G4BinaryNeutronBuilder.hh" 56 #include "G4NeutronPHPBuilder.hh" 57 #include "G4NeutronRadCapture.hh" 58 #include "G4NeutronCaptureXS.hh" 59 #include "G4ParticleHPCaptureData.hh" 60 #include "G4LFission.hh" 61 #include "G4ProcessVector.hh" 62 #include "G4ProcessManager.hh" 63 #include "G4CrossSectionDataSetRegistry.hh" 64 #include "G4PhysListUtil.hh" 65 #include "G4HadronicParameters.hh" 66 // factory 67 #include "G4PhysicsConstructorFactory.hh" 68 // 69 G4_DECLARE_PHYSCONSTR_FACTORY( G4HadronPhysicsQGSP_BIC_HP ); 70 71 72 G4HadronPhysicsQGSP_BIC_HP::G4HadronPhysicsQGSP_BIC_HP(G4int verb) 73 : G4HadronPhysicsQGSP_BIC_HP( "hInelastic QGSP_BIC_HP" ) 74 { 75 G4HadronicParameters::Instance()->SetVerboseLevel(verb); 76 } 77 78 G4HadronPhysicsQGSP_BIC_HP::G4HadronPhysicsQGSP_BIC_HP( const G4String& name, G4bool quasiElastic ) 79 : G4HadronPhysicsQGSP_BIC( name, quasiElastic ) 80 { 81 minBIC_neutron = 19.9*MeV; 82 } 83 84 void G4HadronPhysicsQGSP_BIC_HP::Neutron() { 85 G4HadronicParameters* param = G4HadronicParameters::Instance(); 86 G4bool useFactorXS = param->ApplyFactorXS(); 87 88 auto neu = new G4NeutronBuilder( true ); // Fission on 89 AddBuilder( neu ); 90 auto qgs = new G4QGSPNeutronBuilder( QuasiElasticQGS ); 91 AddBuilder( qgs ); 92 qgs->SetMinEnergy( minQGSP_neutron ); 93 neu->RegisterMe( qgs ); 94 auto ftf = new G4FTFPNeutronBuilder( QuasiElasticFTF ); 95 AddBuilder( ftf ); 96 ftf->SetMinEnergy( minFTFP_neutron ); 97 ftf->SetMaxEnergy( maxFTFP_neutron ); 98 neu->RegisterMe( ftf ); 99 auto bic = new G4BinaryNeutronBuilder; 100 AddBuilder( bic ); 101 bic->SetMinEnergy( minBIC_neutron ); 102 bic->SetMaxEnergy( maxBIC_neutron ); 103 neu->RegisterMe( bic ); 104 auto hp = new G4NeutronPHPBuilder; 105 AddBuilder( hp ); 106 neu->RegisterMe( hp ); 107 neu->Build(); 108 109 const G4ParticleDefinition* neutron = G4Neutron::Neutron(); 110 G4HadronicProcess* inel = G4PhysListUtil::FindInelasticProcess( neutron ); 111 if(inel) { 112 if( useFactorXS ) inel->MultiplyCrossSectionBy( param->XSFactorNucleonInelastic() ); 113 } 114 G4HadronicProcess* capture = G4PhysListUtil::FindCaptureProcess( neutron ); 115 if ( capture ) { 116 G4NeutronRadCapture* theNeutronRadCapture = new G4NeutronRadCapture; 117 theNeutronRadCapture->SetMinEnergy( minBIC_neutron ); 118 capture->RegisterMe( theNeutronRadCapture ); 119 } 120 G4HadronicProcess* fission = G4PhysListUtil::FindFissionProcess( neutron ); 121 if ( fission ) { 122 G4LFission* theNeutronLEPFission = new G4LFission; 123 theNeutronLEPFission->SetMinEnergy( minBIC_neutron ); 124 theNeutronLEPFission->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() ); 125 fission->RegisterMe( theNeutronLEPFission ); 126 } 127 } 128