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

#include <G4NeutronHPCapture.hh>

Inheritance diagram for G4NeutronHPCapture:

Public Member Functions

 G4NeutronHPCapture ()
 ~G4NeutronHPCapture () override
G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus) override
const std::pair< G4double, G4doubleGetFatalEnergyCheckLevels () const override
G4int GetVerboseLevel () const
void SetVerboseLevel (G4int)
void BuildPhysicsTable (const G4ParticleDefinition &) override
void ModelDescription (std::ostream &outFile) const override
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 48 of file G4NeutronHPCapture.hh.

Constructor & Destructor Documentation

◆ G4NeutronHPCapture()

G4NeutronHPCapture::G4NeutronHPCapture ( )

Definition at line 46 of file G4NeutronHPCapture.cc.

46 : G4HadronicInteraction("NeutronHPCapture")
47{
48 SetMinEnergy(0.0);
49 SetMaxEnergy(20. * MeV);
50}
void SetMinEnergy(G4double anEnergy)
G4HadronicInteraction(const G4String &modelName="HadronicModel")
void SetMaxEnergy(const G4double anEnergy)

◆ ~G4NeutronHPCapture()

G4NeutronHPCapture::~G4NeutronHPCapture ( )
override

Definition at line 52 of file G4NeutronHPCapture.cc.

53{
55 if (theCapture != nullptr) {
56 for (auto& ite : *theCapture) {
57 delete ite;
58 }
59 theCapture->clear();
60 }
61 }
62}
G4bool IsWorkerThread()

Member Function Documentation

◆ ApplyYourself()

G4HadFinalState * G4NeutronHPCapture::ApplyYourself ( const G4HadProjectile & aTrack,
G4Nucleus & aTargetNucleus )
overridevirtual

Reimplemented from G4HadronicInteraction.

Definition at line 65 of file G4NeutronHPCapture.cc.

67{
69 const G4Material* theMaterial = aTrack.GetMaterial();
70 auto n = (G4int)theMaterial->GetNumberOfElements();
71 std::size_t index = theMaterial->GetElement(0)->GetIndex();
72 if (n != 1) {
73 auto xSec = new G4double[n];
74 G4double sum = 0;
75 G4int i;
76 const G4double* NumAtomsPerVolume = theMaterial->GetVecNbOfAtomsPerVolume();
77 G4double rWeight;
78 G4ParticleHPThermalBoost aThermalE;
79 for (i = 0; i < n; ++i) {
80 index = theMaterial->GetElement(i)->GetIndex();
81 rWeight = NumAtomsPerVolume[i];
82 xSec[i] = ((*theCapture)[index])->GetXsec(
83 aThermalE.GetThermalEnergy(aTrack, theMaterial->GetElement(i),
84 theMaterial->GetTemperature()));
85 xSec[i] *= rWeight;
86 sum += xSec[i];
87 }
88 G4double random = G4UniformRand();
89 G4double running = 0;
90 for (i = 0; i < n; ++i) {
91 running += xSec[i];
92 index = theMaterial->GetElement(i)->GetIndex();
93 // if(random<=running/sum) break;
94 if (sum == 0 || random <= running / sum) break;
95 }
96 if (i == n) i = std::max(0, n - 1);
97 delete[] xSec;
98 }
99
100 G4HadFinalState* result = ((*theCapture)[index])->ApplyYourself(aTrack);
101
102 // Overwrite target parameters
103 aNucleus.SetParameters(G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA(),
104 G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargZ());
105 const G4Element* target_element = (*G4Element::GetElementTable())[index];
106 const G4Isotope* target_isotope = nullptr;
107 auto iele = (G4int)target_element->GetNumberOfIsotopes();
108 for (G4int j = 0; j != iele; ++j) {
109 target_isotope = target_element->GetIsotope(j);
110 if (target_isotope->GetN()
112 break;
113 }
114 // G4cout << "Target Material of this reaction is " << theMaterial->GetName() << G4endl;
115 // G4cout << "Target Element of this reaction is " << target_element->GetName() << G4endl;
116 // G4cout << "Target Isotope of this reaction is " << target_isotope->GetName() << G4endl;
117 aNucleus.SetIsotope(target_isotope);
118
120 return result;
121}
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
#define G4UniformRand()
Definition Randomize.hh:52
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
const G4Material * GetMaterial() const
G4int GetN() const
Definition G4Isotope.hh:83
G4double GetTemperature() const
const G4Element * GetElement(G4int iel) const
const G4double * GetVecNbOfAtomsPerVolume() const
std::size_t GetNumberOfElements() const
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus) override
static G4ParticleHPManager * GetInstance()
G4ParticleHPReactionWhiteBoard * GetReactionWhiteBoard()
G4double GetThermalEnergy(const G4HadProjectile &aP, const G4Element *anE, G4double aT)

Referenced by ApplyYourself().

◆ BuildPhysicsTable()

void G4NeutronHPCapture::BuildPhysicsTable ( const G4ParticleDefinition & )
overridevirtual

Reimplemented from G4HadronicInteraction.

Definition at line 140 of file G4NeutronHPCapture.cc.

141{
142 G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance();
143
144 theCapture = hpmanager->GetCaptureFinalStates();
145
147 if (theCapture == nullptr)
148 theCapture = new std::vector<G4ParticleHPChannel*>;
149
150 if (numEle == (G4int)G4Element::GetNumberOfElements()) return;
151
152 if (theCapture->size() == G4Element::GetNumberOfElements()) {
154 return;
155 }
156
157 if (G4FindDataDir("G4NEUTRONHPDATA") == nullptr)
158 throw G4HadronicException(
159 __FILE__, __LINE__,
160 "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files.");
161 dirName = G4FindDataDir("G4NEUTRONHPDATA");
162 G4String tString = "/Capture";
163 dirName = dirName + tString;
164
165 auto theFS = new G4NeutronHPCaptureFS;
166 for (G4int i = numEle; i < (G4int)G4Element::GetNumberOfElements(); ++i) {
167 theCapture->push_back(new G4ParticleHPChannel);
168 ((*theCapture)[i])->Init((*(G4Element::GetElementTable()))[i], dirName);
169 ((*theCapture)[i])->Register(theFS);
170 }
171 delete theFS;
172 hpmanager->RegisterCaptureFinalStates(theCapture);
173 }
175}
const char * G4FindDataDir(const char *)
static std::size_t GetNumberOfElements()
Definition G4Element.cc:408
std::vector< G4ParticleHPChannel * > * GetCaptureFinalStates() const
void RegisterCaptureFinalStates(std::vector< G4ParticleHPChannel * > *val)
void Register(T *inst)
G4bool IsMasterThread()
void Init()
Definition G4IonTable.cc:75

◆ GetFatalEnergyCheckLevels()

const std::pair< G4double, G4double > G4NeutronHPCapture::GetFatalEnergyCheckLevels ( ) const
overridevirtual

Reimplemented from G4HadronicInteraction.

Definition at line 124 of file G4NeutronHPCapture.cc.

125{
126 // max energy non-conservation is mass of heavy nucleus
127 return std::pair<G4double, G4double>(10.0 * perCent, 350.0 * CLHEP::GeV);
128}

◆ GetVerboseLevel()

G4int G4NeutronHPCapture::GetVerboseLevel ( ) const

Definition at line 130 of file G4NeutronHPCapture.cc.

◆ ModelDescription()

void G4NeutronHPCapture::ModelDescription ( std::ostream & outFile) const
overridevirtual

Reimplemented from G4HadronicInteraction.

Definition at line 177 of file G4NeutronHPCapture.cc.

178{
179 outFile << "High Precision model based on Evaluated Nuclear Data Files (ENDF)"
180 << " for radiative capture reaction of neutrons below 20 MeV";
181}

◆ SetVerboseLevel()

void G4NeutronHPCapture::SetVerboseLevel ( G4int newValue)

Definition at line 135 of file G4NeutronHPCapture.cc.


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