45G4double G4ComponentBarNucleonNucleusXsc::theA[93] = {0.0};
46G4double G4ComponentBarNucleonNucleusXsc::A75[93] = {0.0};
47G4int G4ComponentBarNucleonNucleusXsc::theZ[] =
48{2,4,6,7,8,11,13,14,20,26,29,42,48,50,74,82,92};
49std::vector<G4PiData*>* G4ComponentBarNucleonNucleusXsc::thePData =
nullptr;
50std::vector<G4PiData*>* G4ComponentBarNucleonNucleusXsc::theNData =
nullptr;
58 fTotalXsc(0.0), fInelasticXsc(0.0), fElasticXsc(0.0), isMaster(false)
68 if(isMaster && thePData && theNData) {
69 for(
G4int i=0; i<NZ; ++i) {
70 delete (*thePData)[i];
71 delete (*theNData)[i];
107 return fInelasticXsc;
117 return fInelasticXsc;
145 G4int Z = std::min(ZZ, 92);
147 for(; it<NZ; ++it) {
if(Z <= theZ[it]) {
break; } }
148 if( it >= NZ ) { it = NZ-1; }
150 std::vector<G4PiData*>* theData = (aParticle == theNeutron) ? theNData : thePData;
152 if( theZ[it] == Z ) {
153 fInelasticXsc = (*theData)[it]->ReactionXSection(kineticEnergy);
154 fTotalXsc = (*theData)[it]->TotalXSection(kineticEnergy);
156 if(0 == it) { it = 1; }
157 G4double x1 = (*theData)[it-1]->ReactionXSection(kineticEnergy);
158 G4double xt1 = (*theData)[it-1]->TotalXSection(kineticEnergy);
159 G4double x2 = (*theData)[it]->ReactionXSection(kineticEnergy);
160 G4double xt2 = (*theData)[it]->TotalXSection(kineticEnergy);
161 G4int Z1 = theZ[it-1];
164 fInelasticXsc = Interpolate(Z1, Z2, Z, x1, x2);
165 fTotalXsc = Interpolate(Z1, Z2, Z, xt1, xt2);
168 fElasticXsc = std::max(fTotalXsc - fInelasticXsc, 0.0);
173G4double G4ComponentBarNucleonNucleusXsc::
179 G4double alp1 = (theA[Z] - theA[Z1]);
180 G4double alp2 = (theA[Z2] - theA[Z]);
181 G4double result = (r1*alp2 + r2*alp1)/(alp1 + alp2);
191 outFile <<
"G4ComponentBarNucleonNucleusXsc is a variant of the Barashenkov\n"
192 <<
"cross section parameterization to be used of protons and\n"
193 <<
"neutrons on targets heavier than hydrogen. It is intended for\n"
194 <<
"use as a cross section component and is currently used by\n"
195 <<
"G4BGGNucleonInelasticXS. It is valid for incident energies up\n"
204 if(theNData) {
return; }
206#ifdef G4MULTITHREADED
211#ifdef G4MULTITHREADED
215 if(isMaster) { LoadData(); }
220void G4ComponentBarNucleonNucleusXsc::LoadData()
222 theNData =
new std::vector<G4PiData*>;
223 thePData =
new std::vector<G4PiData*>;
224 theNData->resize(NZ,
nullptr);
225 thePData->resize(NZ,
nullptr);
228 (*theNData)[0] =
new G4PiData(he_m_t, he_m_in, e1, 44);
229 (*thePData)[0] =
new G4PiData(he_m_t, he_p_in, e1, 44);
231 (*theNData)[1] =
new G4PiData(be_m_t, be_m_in, e1, 44);
232 (*thePData)[1] =
new G4PiData(be_m_t, be_p_in, e1, 44);
234 (*theNData)[2] =
new G4PiData(c_m_t, c_m_in, e1, 44);
235 (*thePData)[2] =
new G4PiData(c_m_t, c_p_in, e1, 44);
238 (*theNData)[3] =
new G4PiData(n_m_t, n_m_in, e2, 44);
239 (*thePData)[3] =
new G4PiData(n_m_t, n_p_in, e2, 44);
241 (*theNData)[4] =
new G4PiData(o_m_t, o_m_in, e2, 44);
242 (*thePData)[4] =
new G4PiData(o_m_t, o_p_in, e2, 44);
244 (*theNData)[5] =
new G4PiData(na_m_t, na_m_in, e2, 44);
245 (*thePData)[5] =
new G4PiData(na_m_t, na_p_in, e2, 44);
248 (*theNData)[6] =
new G4PiData(al_m_t, al_m_in, e3, 45);
249 (*thePData)[6] =
new G4PiData(al_m_t, al_p_in, e3, 45);
251 (*theNData)[7] =
new G4PiData(si_m_t, si_m_in, e3, 45);
252 (*thePData)[7] =
new G4PiData(si_m_t, si_p_in, e3, 45);
254 (*theNData)[8] =
new G4PiData(ca_m_t, ca_m_in, e3, 45);
255 (*thePData)[8] =
new G4PiData(ca_m_t, ca_p_in, e3, 45);
258 (*theNData)[9] =
new G4PiData(fe_m_t, fe_m_in, e4, 47);
259 (*thePData)[9] =
new G4PiData(fe_m_t, fe_p_in, e4, 47);
261 (*theNData)[10] =
new G4PiData(cu_m_t, cu_m_in, e4, 47);
262 (*thePData)[10] =
new G4PiData(cu_m_t, cu_p_in, e4, 47);
264 (*theNData)[11] =
new G4PiData(mo_m_t, mo_m_in, e4, 47);
265 (*thePData)[11] =
new G4PiData(mo_m_t, mo_p_in, e4, 47);
268 (*theNData)[12] =
new G4PiData(cd_m_t, cd_m_in, e5, 48);
269 (*thePData)[12] =
new G4PiData(cd_m_t, cd_p_in, e5, 48);
271 (*theNData)[13] =
new G4PiData(sn_m_t, sn_m_in, e5, 48);
272 (*thePData)[13] =
new G4PiData(sn_m_t, sn_p_in, e5, 48);
274 (*theNData)[14] =
new G4PiData(w_m_t, w_m_in, e5, 48);
275 (*thePData)[14] =
new G4PiData(w_m_t, w_p_in, e5, 48);
278 (*theNData)[15] =
new G4PiData(pb_m_t, pb_m_in, e6, 46);
279 (*thePData)[15] =
new G4PiData(pb_m_t, pb_p_in, e6, 46);
281 (*theNData)[16] =
new G4PiData(u_m_t, u_m_in, e6, 46);
282 (*thePData)[16] =
new G4PiData(u_m_t, u_p_in, e6, 46);
285 A75[0] = theA[0] = 1.0;
287 for(
G4int i=1; i<93; ++i) {
289 A75[i] = g4pow->
A23(theA[i]);
#define G4MUTEX_INITIALIZER
#define G4MUTEXLOCK(mutex)
#define G4MUTEXUNLOCK(mutex)
G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int) final
void BuildPhysicsTable(const G4ParticleDefinition &) final
G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int) final
G4double GetInelasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double) final
G4double GetTotalElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double) final
G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int) final
G4double GetElasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double) final
void Description(std::ostream &) const final
void ComputeCrossSections(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z)
G4ComponentBarNucleonNucleusXsc()
~G4ComponentBarNucleonNucleusXsc() override
static G4Neutron * Neutron()
static G4NistManager * Instance()
G4double GetAtomicMassAmu(const G4String &symb) const
static G4Pow * GetInstance()
G4double A23(G4double A) const
static G4Proton * Proton()