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 // Geant4 source file 30 // 31 // File name: G4ParticleHPFissionDataPT.cc 32 // 33 // Authors: Marek Zmeskal (CTU, Czech Technical University in Prague, Czech Republic) 34 // Loic Thulliez (CEA France) 35 // 36 // Creation date: 4 June 2024 37 // 38 // Description: Class for utilization of cross-sections from 39 // probability tables in the unresolved resonance region 40 // for fission channel. 41 // 42 // Modifications: 43 // 44 // ------------------------------------------------------------------- 45 // 46 // 47 48 #include "G4ParticleHPFissionDataPT.hh" 49 #include "G4DynamicParticle.hh" 50 #include "G4ParticleDefinition.hh" 51 #include "G4Neutron.hh" 52 #include "G4Element.hh" 53 #include "G4ParticleHPManager.hh" 54 #include "G4ParticleHPProbabilityTablesStore.hh" 55 #include "G4HadronicException.hh" 56 57 58 G4ParticleHPFissionDataPT::G4ParticleHPFissionDataPT() : G4VCrossSectionDataSet( "NeutronHPFissionXSPT" ) { 59 // minimum and maximum energy limit for URR in ENDF/B-VII.1, it is overwritten in BuildPhysicsTable 60 SetMinKinEnergy( 1.0 * CLHEP::eV ); 61 SetMaxKinEnergy( 1.2 * CLHEP::MeV ); 62 URRlimits = nullptr; 63 } 64 65 66 G4ParticleHPFissionDataPT::~G4ParticleHPFissionDataPT() {} 67 68 69 G4bool G4ParticleHPFissionDataPT::IsIsoApplicable( const G4DynamicParticle* dp, G4int /*Z*/ , G4int /*A*/ , 70 const G4Element* elm, const G4Material* /*mat*/ ) { 71 // checks applicability for the element 72 if ( dp->GetDefinition() != G4Neutron::Neutron() ) { 73 return false; 74 } else { 75 std::size_t elementI = elm->GetIndex(); 76 G4double eKin = dp->GetKineticEnergy(); 77 if ( eKin < (*URRlimits).at(elementI).first ) { // kinetic energy below the URR energy range for this element = minURR(isotopes in element) 78 return false; 79 } else if ( eKin > (*URRlimits).at(elementI).second ) { // kinetic energy above the URR energy range for this element = maxURR(isotopes in element) 80 return false; 81 } 82 } 83 return true; 84 } 85 86 87 G4double G4ParticleHPFissionDataPT::GetIsoCrossSection( const G4DynamicParticle* dp, G4int /*Z*/ , G4int /*A*/ , 88 const G4Isotope* iso, const G4Element* element, const G4Material* material ) { 89 return G4ParticleHPProbabilityTablesStore::GetInstance()->GetIsoCrossSectionPT( dp, 18, iso, element, material ); 90 } 91 92 93 void G4ParticleHPFissionDataPT::BuildPhysicsTable( const G4ParticleDefinition& aP ) { 94 G4cout << "BuildPhysicsTable in G4ParticleHPFissionDataPT." << G4endl; 95 if ( &aP != G4Neutron::Neutron() ) { 96 throw G4HadronicException( __FILE__, __LINE__, "Attempt to use NeutronHP data for particles other than neutrons!" ); 97 } 98 URRlimits = G4ParticleHPManager::GetInstance()->GetURRlimits(); 99 if ( G4Threading::IsWorkerThread() ) { 100 // sets the overall limits of the URR, which are stored at the last position of URRlimits - min and max URR(all elements) 101 // defines URR model energy range 102 SetMinKinEnergy( (*URRlimits).back().first ); 103 SetMaxKinEnergy( (*URRlimits).back().second ); 104 } else { 105 if ( G4ParticleHPManager::GetInstance()->GetProbabilityTables() == nullptr ) { 106 G4ParticleHPProbabilityTablesStore::GetInstance()->Init(); 107 G4ParticleHPManager::GetInstance()->RegisterProbabilityTables( G4ParticleHPProbabilityTablesStore::GetInstance()->GetProbabilityTables() ); 108 } 109 if ( URRlimits == nullptr ) { 110 G4ParticleHPProbabilityTablesStore::GetInstance()->InitURRlimits(); 111 URRlimits = G4ParticleHPProbabilityTablesStore::GetInstance()->GetURRlimits(); 112 G4ParticleHPManager::GetInstance()->RegisterURRlimits( URRlimits ); 113 } 114 // sets the overall limits of the URR, which are stored at the last position of URRlimits - min and max URR(all elements) 115 // defines URR model energy range 116 SetMinKinEnergy( (*URRlimits).back().first ); 117 SetMaxKinEnergy( (*URRlimits).back().second ); 118 } 119 } 120 121 122 G4int G4ParticleHPFissionDataPT::GetVerboseLevel() const { 123 return G4ParticleHPManager::GetInstance()->GetVerboseLevel(); 124 } 125 126 127 void G4ParticleHPFissionDataPT::SetVerboseLevel( G4int newValue ) { 128 G4ParticleHPManager::GetInstance()->SetVerboseLevel( newValue ); 129 } 130 131 132 void G4ParticleHPFissionDataPT::CrossSectionDescription( std::ostream& outFile ) const { 133 outFile << "Fission probability tables." ; 134 } 135