Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ParticleHPFissionURR Class Reference

#include <G4ParticleHPFissionURR.hh>

Inheritance diagram for G4ParticleHPFissionURR:

Public Member Functions

 G4ParticleHPFissionURR ()
 ~G4ParticleHPFissionURR ()
G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus)
virtual const std::pair< G4double, G4doubleGetFatalEnergyCheckLevels () const
G4int GetVerboseLevel () const
void SetVerboseLevel (G4int)
void BuildPhysicsTable (const G4ParticleDefinition &)
virtual void ModelDescription (std::ostream &outFile) const
Public Member Functions inherited from G4HadronicInteraction
 G4HadronicInteraction (const G4String &modelName="HadronicModel")
virtual ~G4HadronicInteraction ()
virtual G4double SampleInvariantT (const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
virtual G4bool IsApplicable (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
G4double GetMinEnergy () const
G4double GetMinEnergy (const G4Material *aMaterial, const G4Element *anElement) const
void SetMinEnergy (G4double anEnergy)
void SetMinEnergy (G4double anEnergy, const G4Element *anElement)
void SetMinEnergy (G4double anEnergy, const G4Material *aMaterial)
G4double GetMaxEnergy () const
G4double GetMaxEnergy (const G4Material *aMaterial, const G4Element *anElement) const
void SetMaxEnergy (const G4double anEnergy)
void SetMaxEnergy (G4double anEnergy, const G4Element *anElement)
void SetMaxEnergy (G4double anEnergy, const G4Material *aMaterial)
G4int GetVerboseLevel () const
void SetVerboseLevel (G4int value)
const G4StringGetModelName () const
void DeActivateFor (const G4Material *aMaterial)
void ActivateFor (const G4Material *aMaterial)
void DeActivateFor (const G4Element *anElement)
void ActivateFor (const G4Element *anElement)
G4bool IsBlocked (const G4Material *aMaterial) const
G4bool IsBlocked (const G4Element *anElement) const
void SetRecoilEnergyThreshold (G4double val)
G4double GetRecoilEnergyThreshold () const
virtual std::pair< G4double, G4doubleGetEnergyMomentumCheckLevels () const
void SetEnergyMomentumCheckLevels (G4double relativeLevel, G4double absoluteLevel)
virtual void InitialiseModel ()
 G4HadronicInteraction (const G4HadronicInteraction &right)=delete
const G4HadronicInteractionoperator= (const G4HadronicInteraction &right)=delete
G4bool operator== (const G4HadronicInteraction &right) const =delete
G4bool operator!= (const G4HadronicInteraction &right) const =delete

Additional Inherited Members

Protected Member Functions inherited from G4HadronicInteraction
void SetModelName (const G4String &nam)
G4bool IsBlocked () const
void Block ()
Protected Attributes inherited from G4HadronicInteraction
G4HadFinalState theParticleChange
G4int verboseLevel
G4double theMinEnergy
G4double theMaxEnergy
G4bool isBlocked

Detailed Description

Definition at line 61 of file G4ParticleHPFissionURR.hh.

Constructor & Destructor Documentation

◆ G4ParticleHPFissionURR()

G4ParticleHPFissionURR::G4ParticleHPFissionURR ( )

Definition at line 57 of file G4ParticleHPFissionURR.cc.

57 : G4HadronicInteraction( "NeutronHPFissionURR" ) {
58 SetMinEnergy( 0.0 * CLHEP::eV );
59 SetMaxEnergy( 20.0 * CLHEP::MeV );
60 particleHPfission = new G4ParticleHPFission;
61}
void SetMinEnergy(G4double anEnergy)
G4HadronicInteraction(const G4String &modelName="HadronicModel")
void SetMaxEnergy(const G4double anEnergy)

◆ ~G4ParticleHPFissionURR()

G4ParticleHPFissionURR::~G4ParticleHPFissionURR ( )

Definition at line 64 of file G4ParticleHPFissionURR.cc.

64{}

Member Function Documentation

◆ ApplyYourself()

G4HadFinalState * G4ParticleHPFissionURR::ApplyYourself ( const G4HadProjectile & aTrack,
G4Nucleus & aTargetNucleus )
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 67 of file G4ParticleHPFissionURR.cc.

67 {
68 const G4Material* theMaterial = aTrack.GetMaterial();
69 G4double kineticEnergy = aTrack.GetKineticEnergy();
70 G4HadFinalState* theFinalState = nullptr;
71 if ( kineticEnergy < (*URRlimits).back().first || kineticEnergy > (*URRlimits).back().second ) {
72 return particleHPfission->ApplyYourself( aTrack, aNucleus );
73 }
74 G4int elementI = -1;
75 G4int isotopeJ = -1;
76 G4int A = aNucleus.GetA_asInt();
77 G4int Z = aNucleus.GetZ_asInt();
78 // finds the element and isotope of the selected target aNucleus
79 for ( G4int i = 0; i < (G4int)theMaterial->GetNumberOfElements(); ++i ) {
80 if ( Z == theMaterial->GetElement(i)->GetZasInt() ) {
81 for ( G4int j = 0; j < (G4int)theMaterial->GetElement(i)->GetNumberOfIsotopes(); ++j ) {
82 if ( A == theMaterial->GetElement(i)->GetIsotope(j)->GetN() ) {
83 isotopeJ = j;
84 break;
85 }
86 }
87 // the loop cannot be ended here because the material can have two elements with same Z but different isotopic composition
88 if ( isotopeJ != -1 ) {
89 // isotope was found and for loop is ended
90 elementI = (G4int)theMaterial->GetElement(i)->GetIndex();
91 break;
92 }
93 } // end if find element
94 } // end element loop
95 // if element or isotope are not selected no further computations
96 if (elementI == -1 || isotopeJ == -1) { return theFinalState; }
97
98 // Check whether the energy is out of the URR limits for the given element
99 if ( kineticEnergy < (*URRlimits).at(elementI).first || kineticEnergy > (*URRlimits).at(elementI).second ) {
100 // Call fission final state in G4ParicleHPChannel and SELECT ISOTOPE (to be improved in the future)
102 theFinalState = (*G4ParticleHPManager::GetInstance()->GetFissionFinalStates())[elementI]->ApplyYourself( aTrack, -2 );
103 // Update target nucleus information according to the selected isotope
105 aNucleus.SetParameters( selectedIsotope_A, Z );
106 const G4Element* target_element = (*G4Element::GetElementTable())[elementI];
107 const G4Isotope* target_isotope = nullptr;
108 // Find the selected isotope among in the element
109 for ( G4int j = 0; j < (G4int)target_element->GetNumberOfIsotopes(); ++j ) {
110 target_isotope = target_element->GetIsotope(j);
111 if ( target_isotope->GetN() == selectedIsotope_A ) break;
112 }
113 aNucleus.SetIsotope( target_isotope );
115 } else {
116 // the energy is inside the limits of the URR, part copied from G4ParticleHPChannel::ApplyYourself
117 if ( G4ParticleHPManager::GetInstance()->GetUseWendtFissionModel() ) {
118 if ( (*G4ParticleHPManager::GetInstance()->GetFissionFinalStates())[elementI]->GetWendtFissionGenerator() ) {
119 theFinalState = (*G4ParticleHPManager::GetInstance()->GetFissionFinalStates())[elementI]->GetWendtFissionGenerator()->ApplyYourself( aTrack, Z, A );
120 }
121 }
122 if ( ! theFinalState ) {
123 G4int icounter = 0;
124 G4int icounter_max = 1024;
125 while ( theFinalState == nullptr ) {
126 icounter++;
127 if ( icounter > icounter_max ) {
128 G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl;
129 break;
130 }
131 // calls the final state for the found element and isotope
132 theFinalState = ((*G4ParticleHPManager::GetInstance()->GetFissionFinalStates())[elementI]->GetFinalStates())[isotopeJ]->ApplyYourself( aTrack );
133 }
134 }
135 }
136 return theFinalState;
137}
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
const G4double A[17]
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
std::size_t GetNumberOfIsotopes() const
Definition G4Element.hh:143
std::size_t GetIndex() const
Definition G4Element.hh:159
const G4Isotope * GetIsotope(G4int iso) const
Definition G4Element.hh:151
static const G4ElementTable * GetElementTable()
Definition G4Element.cc:401
G4int GetZasInt() const
Definition G4Element.hh:120
const G4Material * GetMaterial() const
G4double GetKineticEnergy() const
G4int GetN() const
Definition G4Isotope.hh:83
const G4Element * GetElement(G4int iel) const
std::size_t GetNumberOfElements() const
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus)
std::vector< G4ParticleHPChannel * > * GetFissionFinalStates() const
static G4ParticleHPManager * GetInstance()
G4ParticleHPReactionWhiteBoard * GetReactionWhiteBoard()

Referenced by ApplyYourself().

◆ BuildPhysicsTable()

void G4ParticleHPFissionURR::BuildPhysicsTable ( const G4ParticleDefinition & )
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 140 of file G4ParticleHPFissionURR.cc.

140 {
141 particleHPfission->BuildPhysicsTable( *(G4Neutron::Neutron()) );
143 if ( URRlimits == nullptr ) {
147 }
148}
static G4Neutron * Neutron()
Definition G4Neutron.cc:101
std::vector< std::pair< G4double, G4double > > * GetURRlimits() const
void RegisterURRlimits(std::vector< std::pair< G4double, G4double > > *val)
static G4ParticleHPProbabilityTablesStore * GetInstance()
std::vector< std::pair< G4double, G4double > > * GetURRlimits()

◆ GetFatalEnergyCheckLevels()

const std::pair< G4double, G4double > G4ParticleHPFissionURR::GetFatalEnergyCheckLevels ( ) const
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 151 of file G4ParticleHPFissionURR.cc.

151 {
152 // max energy non-conservation is mass of heavy nucleus
153 return std::pair< G4double, G4double >( 10.0 * perCent, 350.0 * CLHEP::GeV );
154}

◆ GetVerboseLevel()

G4int G4ParticleHPFissionURR::GetVerboseLevel ( ) const

Definition at line 157 of file G4ParticleHPFissionURR.cc.

157 {
159}

◆ ModelDescription()

void G4ParticleHPFissionURR::ModelDescription ( std::ostream & outFile) const
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 167 of file G4ParticleHPFissionURR.cc.

167 {
168 outFile << "High Precision model based on Evaluated Nuclear Data Files (ENDF) for fission reaction of neutrons in the unresolved resonance region.";
169}

◆ SetVerboseLevel()

void G4ParticleHPFissionURR::SetVerboseLevel ( G4int newValue)

Definition at line 162 of file G4ParticleHPFissionURR.cc.

162 {
164}

The documentation for this class was generated from the following files: