Geant4 11.2.2
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(), ApplyYourself(), and G4ParticleHPThermalScattering::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;
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
static G4ElementTable * GetElementTable()
Definition G4Element.cc:389
G4double GetZ() const
Definition G4Element.hh:119
const G4Isotope * GetIsotope(G4int iso) const
Definition G4Element.hh:151
size_t GetIndex() const
Definition G4Element.hh:159
size_t GetNumberOfIsotopes() const
Definition G4Element.hh:143
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{
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)
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 size_t GetNumberOfElements()
Definition G4Element.cc:393
void RegisterElasticFinalStates(std::vector< G4ParticleHPChannel * > *val)
std::vector< G4ParticleHPChannel * > * GetElasticFinalStates() const
void Register(T *inst)
G4bool IsMasterThread()
void Init()
Definition G4IonTable.cc:75

Referenced by G4ParticleHPThermalScattering::BuildPhysicsTable().

◆ 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: