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

#include <G4ParticleHPElastic.hh>

Inheritance diagram for G4ParticleHPElastic:

Public Member Functions

 G4ParticleHPElastic ()
 ~G4ParticleHPElastic () override
G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus) override
G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus, G4bool isFromTSL)
const std::pair< G4double, G4doubleGetFatalEnergyCheckLevels () const override
G4int GetNiso ()
void DoNotSuspend ()
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 G4ParticleHPElastic.hh.

Constructor & Destructor Documentation

◆ G4ParticleHPElastic()

G4ParticleHPElastic::G4ParticleHPElastic ( )

Definition at line 43 of file G4ParticleHPElastic.cc.

43 : G4HadronicInteraction("NeutronHPElastic")
44{
45 overrideSuspension = false;
46 SetMinEnergy(0. * eV);
47 SetMaxEnergy(20. * MeV);
48}
void SetMinEnergy(G4double anEnergy)
G4HadronicInteraction(const G4String &modelName="HadronicModel")
void SetMaxEnergy(const G4double anEnergy)

◆ ~G4ParticleHPElastic()

G4ParticleHPElastic::~G4ParticleHPElastic ( )
override

Definition at line 50 of file G4ParticleHPElastic.cc.

51{
52 // the vectror is shared among threads, only master deletes
54 if (theElastic != nullptr) {
55 for (auto it = theElastic->cbegin(); it != theElastic->cend(); ++it) {
56 delete *it;
57 }
58 theElastic->clear();
59 }
60 }
61}
G4bool IsWorkerThread()

Member Function Documentation

◆ ApplyYourself() [1/2]

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

Reimplemented from G4HadronicInteraction.

Definition at line 63 of file G4ParticleHPElastic.cc.

65{
66 return this->ApplyYourself(aTrack, aNucleus, false);
67}
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus) override

Referenced by ApplyYourself(), and ApplyYourself().

◆ ApplyYourself() [2/2]

G4HadFinalState * G4ParticleHPElastic::ApplyYourself ( const G4HadProjectile & aTrack,
G4Nucleus & aTargetNucleus,
G4bool isFromTSL )

Definition at line 72 of file G4ParticleHPElastic.cc.

74{
76 const G4Material* theMaterial = aTrack.GetMaterial();
77 auto n = (G4int)theMaterial->GetNumberOfElements();
78 std::size_t index = theMaterial->GetElement(0)->GetIndex();
79
80 if (!isFromTSL) {
81 if (n != 1) {
82 G4int i;
83 auto xSec = new G4double[n];
84 G4double sum = 0;
85 const G4double* NumAtomsPerVolume = theMaterial->GetVecNbOfAtomsPerVolume();
86 G4double rWeight;
87 G4ParticleHPThermalBoost aThermalE;
88 for (i = 0; i < n; ++i) {
89 index = theMaterial->GetElement(i)->GetIndex();
90 rWeight = NumAtomsPerVolume[i];
91 xSec[i] = ((*theElastic)[index])
92 ->GetXsec(aThermalE.GetThermalEnergy(aTrack, theMaterial->GetElement(i),
93 theMaterial->GetTemperature()));
94 xSec[i] *= rWeight;
95 sum += xSec[i];
96 }
97 G4double random = G4UniformRand();
98 G4double running = 0;
99 for (i = 0; i < n; ++i) {
100 running += xSec[i];
101 index = theMaterial->GetElement(i)->GetIndex();
102 if (sum == 0 || random <= running / sum) break;
103 }
104 delete[] xSec;
105 }
106 }
107 else {
108 G4int i;
109 if (n != 1) {
110 for (i = 0; i < n; ++i) {
111 if (aNucleus.GetZ_asInt() == (G4int)(theMaterial->GetElement(i)->GetZ())) {
112 index = theMaterial->GetElement(i)->GetIndex();
113 }
114 }
115 }
116 }
117
118 // The boolean "true", as last argument, specifies to G4ParticleHPChannel::ApplyYourself
119 // that it is an elastic channel: this is needed for the special DBRC treatment.
120 G4HadFinalState* finalState = ((*theElastic)[index])->ApplyYourself(aTrack, -1, true);
121
122 if (overrideSuspension) finalState->SetStatusChange(isAlive);
123
124 // Overwrite target parameters
125 aNucleus.SetParameters(G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA(),
126 G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargZ());
127 const G4Element* target_element = (*G4Element::GetElementTable())[index];
128 const G4Isotope* target_isotope = nullptr;
129 auto iele = (G4int)target_element->GetNumberOfIsotopes();
130 for (G4int j = 0; j != iele; ++j) {
131 target_isotope = target_element->GetIsotope(j);
132 if (target_isotope->GetN()
134 break;
135 }
136 aNucleus.SetIsotope(target_isotope);
137
139 return finalState;
140}
@ isAlive
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
#define G4UniformRand()
Definition Randomize.hh:52
G4double GetZ() const
Definition G4Element.hh:119
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
void SetStatusChange(G4HadFinalStateStatus aS)
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
static G4ParticleHPManager * GetInstance()
G4ParticleHPReactionWhiteBoard * GetReactionWhiteBoard()
G4double GetThermalEnergy(const G4HadProjectile &aP, const G4Element *anE, G4double aT)

◆ BuildPhysicsTable()

void G4ParticleHPElastic::BuildPhysicsTable ( const G4ParticleDefinition & )
overridevirtual

Reimplemented from G4HadronicInteraction.

Definition at line 158 of file G4ParticleHPElastic.cc.

159{
160 G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance();
161
162 theElastic = hpmanager->GetElasticFinalStates();
163
165 if (theElastic == nullptr) theElastic = new std::vector<G4ParticleHPChannel*>;
166
167 if (numEle == (G4int)G4Element::GetNumberOfElements()) return;
168
169 if (theElastic->size() == G4Element::GetNumberOfElements()) {
171 return;
172 }
173
174 auto theFS = new G4ParticleHPElasticFS;
175 if (G4FindDataDir("G4NEUTRONHPDATA") == nullptr)
176 throw G4HadronicException(
177 __FILE__, __LINE__,
178 "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files.");
179 dirName = G4FindDataDir("G4NEUTRONHPDATA");
180 G4String tString = "/Elastic";
181 dirName = dirName + tString;
182 for (G4int i = numEle; i < (G4int)G4Element::GetNumberOfElements(); ++i) {
183 theElastic->push_back(new G4ParticleHPChannel);
184 ((*theElastic)[i])->Init((*(G4Element::GetElementTable()))[i], dirName);
185 // while(!((*theElastic)[i])->Register(theFS)) ;
186 ((*theElastic)[i])->Register(theFS);
187 }
188 delete theFS;
189 hpmanager->RegisterElasticFinalStates(theElastic);
190 }
192}
const char * G4FindDataDir(const char *)
static std::size_t GetNumberOfElements()
Definition G4Element.cc:408
void RegisterElasticFinalStates(std::vector< G4ParticleHPChannel * > *val)
std::vector< G4ParticleHPChannel * > * GetElasticFinalStates() const
void Register(T *inst)
G4bool IsMasterThread()
void Init()
Definition G4IonTable.cc:75

◆ DoNotSuspend()

void G4ParticleHPElastic::DoNotSuspend ( )
inline

Definition at line 65 of file G4ParticleHPElastic.hh.

65{ overrideSuspension = true; }

◆ GetFatalEnergyCheckLevels()

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

Reimplemented from G4HadronicInteraction.

Definition at line 142 of file G4ParticleHPElastic.cc.

143{
144 // max energy non-conservation is mass of heavy nucleus
145 return std::pair<G4double, G4double>(10.0 * perCent, 350.0 * CLHEP::GeV);
146}

◆ GetNiso()

G4int G4ParticleHPElastic::GetNiso ( )
inline

Definition at line 63 of file G4ParticleHPElastic.hh.

63{ return ((*theElastic)[0])->GetNiso(); };

◆ GetVerboseLevel()

G4int G4ParticleHPElastic::GetVerboseLevel ( ) const

Definition at line 148 of file G4ParticleHPElastic.cc.

◆ ModelDescription()

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

Reimplemented from G4HadronicInteraction.

Definition at line 194 of file G4ParticleHPElastic.cc.

195{
196 outFile << "High Precision model based on Evaluated Nuclear Data Files (ENDF) for inelastic "
197 "reaction of neutrons below 20MeV\n";
198}

◆ SetVerboseLevel()

void G4ParticleHPElastic::SetVerboseLevel ( G4int newValue)

Definition at line 153 of file G4ParticleHPElastic.cc.


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