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

#include <G4ParticleHPElementData.hh>

Public Member Functions

 G4ParticleHPElementData ()
 
 ~G4ParticleHPElementData ()
 
void Init (G4Element *theElement, G4ParticleDefinition *projectile, const char *dataDirVariable)
 
void UpdateData (G4int A, G4int Z, G4int index, G4double abundance, G4ParticleDefinition *projectile, const char *dataDirVariable)
 
void UpdateData (G4int A, G4int Z, G4int M, G4int index, G4double abundance, G4ParticleDefinition *projectile, const char *dataDirVariable)
 
void Harmonise (G4ParticleHPVector *&theStore, G4ParticleHPVector *theNew)
 
G4ParticleHPVectorGetData (G4ParticleHPFissionData *)
 
G4ParticleHPVectorGetData (G4NeutronHPCaptureData *)
 
G4ParticleHPVectorGetData (G4ParticleHPElasticData *)
 
G4ParticleHPVectorGetData (G4ParticleHPInelasticData *)
 
G4ParticleHPVectorMakePhysicsVector (G4Element *theElement, G4ParticleDefinition *projectile, G4ParticleHPFissionData *theSet, char *dataDirVariable)
 
G4ParticleHPVectorMakePhysicsVector (G4Element *theElement, G4ParticleDefinition *projectile, G4NeutronHPCaptureData *theSet, char *dataDirVariable)
 
G4ParticleHPVectorMakePhysicsVector (G4Element *theElement, G4ParticleDefinition *projectile, G4ParticleHPElasticData *theSet, char *dataDirVariable)
 
G4ParticleHPVectorMakePhysicsVector (G4Element *theElement, G4ParticleDefinition *projectile, G4ParticleHPInelasticData *theSet, char *dataDirVariable)
 

Detailed Description

Definition at line 51 of file G4ParticleHPElementData.hh.

Constructor & Destructor Documentation

◆ G4ParticleHPElementData()

G4ParticleHPElementData::G4ParticleHPElementData ( )

Definition at line 37 of file G4ParticleHPElementData.cc.

38{
39 precision = 0.02;
40 theFissionData = new G4ParticleHPVector;
41 theCaptureData = new G4ParticleHPVector;
42 theElasticData = new G4ParticleHPVector;
43 theInelasticData = new G4ParticleHPVector;
44 theIsotopeWiseData = nullptr;
45 theBuffer = nullptr;
46}

◆ ~G4ParticleHPElementData()

G4ParticleHPElementData::~G4ParticleHPElementData ( )

Definition at line 48 of file G4ParticleHPElementData.cc.

49{
50 delete theFissionData;
51 delete theCaptureData;
52 delete theElasticData;
53 delete theInelasticData;
54 delete[] theIsotopeWiseData;
55}

Member Function Documentation

◆ GetData() [1/4]

G4ParticleHPVector * G4ParticleHPElementData::GetData ( G4NeutronHPCaptureData * )
inline

Definition at line 75 of file G4ParticleHPElementData.hh.

75{ return theCaptureData; }

◆ GetData() [2/4]

G4ParticleHPVector * G4ParticleHPElementData::GetData ( G4ParticleHPElasticData * )
inline

Definition at line 76 of file G4ParticleHPElementData.hh.

76{ return theElasticData; }

◆ GetData() [3/4]

G4ParticleHPVector * G4ParticleHPElementData::GetData ( G4ParticleHPFissionData * )
inline

Definition at line 74 of file G4ParticleHPElementData.hh.

74{ return theFissionData; }

Referenced by MakePhysicsVector(), MakePhysicsVector(), MakePhysicsVector(), and MakePhysicsVector().

◆ GetData() [4/4]

G4ParticleHPVector * G4ParticleHPElementData::GetData ( G4ParticleHPInelasticData * )
inline

Definition at line 77 of file G4ParticleHPElementData.hh.

77{ return theInelasticData; }

◆ Harmonise()

void G4ParticleHPElementData::Harmonise ( G4ParticleHPVector *& theStore,
G4ParticleHPVector * theNew )

Definition at line 104 of file G4ParticleHPElementData.cc.

105{
106 if (theNew == nullptr) {
107 return;
108 }
109 G4int s_tmp = 0, n = 0, m_tmp = 0;
110 auto theMerge = new G4ParticleHPVector(theStore->GetVectorLength());
111 while (theStore->GetEnergy(s_tmp) < theNew->GetEnergy(0)
112 && s_tmp < theStore->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi
113 {
114 theMerge->SetData(m_tmp++, theStore->GetEnergy(s_tmp), theStore->GetXsec(s_tmp));
115 ++s_tmp;
116 }
117 G4ParticleHPVector* active = theStore;
118 G4ParticleHPVector* passive = theNew;
120 G4int a = s_tmp, p = n, t;
121 while (a < active->GetVectorLength()
122 && p < passive->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi
123 {
124 if (active->GetEnergy(a) <= passive->GetEnergy(p)) {
125 theMerge->SetData(m_tmp, active->GetEnergy(a), active->GetXsec(a));
126 G4double x = theMerge->GetEnergy(m_tmp);
127 G4double y = std::max(0., passive->GetXsec(x));
128 theMerge->SetData(m_tmp, x, theMerge->GetXsec(m_tmp) + y);
129 ++m_tmp;
130 ++a;
131 }
132 else {
133 tmp = active;
134 t = a;
135 active = passive;
136 a = p;
137 passive = tmp;
138 p = t;
139 }
140 }
141 while (a != active->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi
142 {
143 theMerge->SetData(m_tmp++, active->GetEnergy(a), active->GetXsec(a));
144 ++a;
145 }
146 while (p != passive->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi
147 {
148 G4double x = passive->GetEnergy(p);
149 G4double y = std::max(0., active->GetXsec(x));
150 theMerge->SetData(m_tmp++, x, passive->GetXsec(p) + y);
151 ++p;
152 }
153 delete theStore;
154 theStore = theMerge;
155}
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
G4double GetXsec(G4int i)
G4double GetEnergy(G4int i) const
G4int GetVectorLength() const

Referenced by UpdateData().

◆ Init()

void G4ParticleHPElementData::Init ( G4Element * theElement,
G4ParticleDefinition * projectile,
const char * dataDirVariable )

Definition at line 57 of file G4ParticleHPElementData.cc.

60{
61 auto nIso = (G4int)theElement->GetNumberOfIsotopes();
62 auto Z = theElement->GetZasInt();
63 const std::size_t dsize = nIso > 0 ? nIso : 1;
64 theIsotopeWiseData = new G4ParticleHPIsoData[dsize];
65
66 for (G4int i1 = 0; i1 < nIso; ++i1) {
67 G4int A = theElement->GetIsotope(i1)->GetN();
68 G4int M = theElement->GetIsotope(i1)->Getm();
69 G4double frac = theElement->GetRelativeAbundanceVector()[i1] / CLHEP::perCent;
70 UpdateData(A, Z, M, i1, frac, projectile, dataDirVariable);
71 }
72 theElasticData->ThinOut(precision);
73 if (projectile == G4Neutron::Neutron()) theInelasticData->ThinOut(precision);
74
75 theCaptureData->ThinOut(precision);
76 theFissionData->ThinOut(precision);
77}
#define M(row, col)
const G4double A[17]
G4double * GetRelativeAbundanceVector() const
Definition G4Element.hh:149
const G4Isotope * GetIsotope(G4int iso) const
Definition G4Element.hh:151
size_t GetNumberOfIsotopes() const
Definition G4Element.hh:143
G4int GetZasInt() const
Definition G4Element.hh:120
G4int Getm() const
Definition G4Isotope.hh:89
G4int GetN() const
Definition G4Isotope.hh:83
static G4Neutron * Neutron()
Definition G4Neutron.cc:101
void UpdateData(G4int A, G4int Z, G4int index, G4double abundance, G4ParticleDefinition *projectile, const char *dataDirVariable)
void ThinOut(G4double precision)

Referenced by MakePhysicsVector(), MakePhysicsVector(), MakePhysicsVector(), and MakePhysicsVector().

◆ MakePhysicsVector() [1/4]

G4ParticleHPVector * G4ParticleHPElementData::MakePhysicsVector ( G4Element * theElement,
G4ParticleDefinition * projectile,
G4NeutronHPCaptureData * theSet,
char * dataDirVariable )

Definition at line 168 of file G4ParticleHPElementData.cc.

172{
173 Init(theElement, projectile, dataDirVariable);
174 return GetData(theSet);
175}
G4ParticleHPVector * GetData(G4ParticleHPFissionData *)
void Init(G4Element *theElement, G4ParticleDefinition *projectile, const char *dataDirVariable)

◆ MakePhysicsVector() [2/4]

G4ParticleHPVector * G4ParticleHPElementData::MakePhysicsVector ( G4Element * theElement,
G4ParticleDefinition * projectile,
G4ParticleHPElasticData * theSet,
char * dataDirVariable )

Definition at line 178 of file G4ParticleHPElementData.cc.

182{
183 Init(theElement, projectile, dataDirVariable);
184 return GetData(theSet);
185}

◆ MakePhysicsVector() [3/4]

G4ParticleHPVector * G4ParticleHPElementData::MakePhysicsVector ( G4Element * theElement,
G4ParticleDefinition * projectile,
G4ParticleHPFissionData * theSet,
char * dataDirVariable )

Definition at line 158 of file G4ParticleHPElementData.cc.

162{
163 Init(theElement, projectile, dataDirVariable);
164 return GetData(theSet);
165}

◆ MakePhysicsVector() [4/4]

G4ParticleHPVector * G4ParticleHPElementData::MakePhysicsVector ( G4Element * theElement,
G4ParticleDefinition * projectile,
G4ParticleHPInelasticData * theSet,
char * dataDirVariable )

Definition at line 187 of file G4ParticleHPElementData.cc.

191{
192 Init(theElement, projectile, dataDirVariable);
193 return GetData(theSet);
194}

◆ UpdateData() [1/2]

void G4ParticleHPElementData::UpdateData ( G4int A,
G4int Z,
G4int index,
G4double abundance,
G4ParticleDefinition * projectile,
const char * dataDirVariable )
inline

Definition at line 61 of file G4ParticleHPElementData.hh.

64 {
65 UpdateData(A, Z, 0, index, abundance, projectile, dataDirVariable);
66 };

Referenced by Init(), and UpdateData().

◆ UpdateData() [2/2]

void G4ParticleHPElementData::UpdateData ( G4int A,
G4int Z,
G4int M,
G4int index,
G4double abundance,
G4ParticleDefinition * projectile,
const char * dataDirVariable )

Definition at line 79 of file G4ParticleHPElementData.cc.

83{
84 // Reads in the Data, using G4ParticleHPIsoData[], and its Init
85 theIsotopeWiseData[index].Init(A, Z, M, abundance, projectile, dataDirVariable);
86
87 theBuffer = theIsotopeWiseData[index].MakeElasticData();
88 Harmonise(theElasticData, theBuffer);
89 delete theBuffer;
90
91 theBuffer = theIsotopeWiseData[index].MakeInelasticData();
92 Harmonise(theInelasticData, theBuffer);
93 delete theBuffer;
94
95 theBuffer = theIsotopeWiseData[index].MakeCaptureData();
96 Harmonise(theCaptureData, theBuffer);
97 delete theBuffer;
98
99 theBuffer = theIsotopeWiseData[index].MakeFissionData();
100 Harmonise(theFissionData, theBuffer);
101 delete theBuffer;
102}
void Harmonise(G4ParticleHPVector *&theStore, G4ParticleHPVector *theNew)
G4ParticleHPVector * MakeFissionData()
G4bool Init(G4int A, G4int Z, G4double abun, G4String dirName, G4String aFSType)
G4ParticleHPVector * MakeCaptureData()
G4ParticleHPVector * MakeInelasticData()
G4ParticleHPVector * MakeElasticData()

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