53G4double G4BGGNucleonElasticXS::theGlauberFacP[93] = {0.0};
54G4double G4BGGNucleonElasticXS::theCoulombFacP[93] = {0.0};
55G4double G4BGGNucleonElasticXS::theGlauberFacN[93] = {0.0};
56G4double G4BGGNucleonElasticXS::theCoulombFacN[93] = {0.0};
57G4int G4BGGNucleonElasticXS::theA[93] = {0};
67 fGlauberEnergy = 91.*GeV;
68 fLowEnergy = 14.0*MeV;
74 isProton = (theProton == p);
114 G4int Z = std::min(ZZ, 92);
119 if(ekin <= fLowEnergy) {
120 cross = (isProton) ? theCoulombFacP[Z] : theCoulombFacN[Z];
121 cross *= CoulombFactor(ekin, Z);
122 }
else if(ekin > fGlauberEnergy) {
123 cross = (isProton) ? theGlauberFacP[Z] : theGlauberFacN[Z];
130 G4cout <<
"G4BGGNucleonElasticXS::GetElementCrossSection for "
133 <<
" in nucleus Z= " << Z <<
" A= " << theA[Z]
134 <<
" XS(b)= " << cross/barn
155 G4cout <<
"G4BGGNucleonElasticXS::GetIsoCrossSection for "
158 <<
" in nucleus Z= " << Z <<
" A= " <<
A
159 <<
" XS(b)= " << cross/barn
169 if(fNucleon) {
return; }
171 isProton = (theProton == &p);
175 ed <<
"This BGG cross section is applicable only to nucleons and not to "
177 G4Exception(
"G4BGGNucleonElasticXS::BuildPhysicsTable",
"had001",
189#ifdef G4MULTITHREADED
194#ifdef G4MULTITHREADED
202 if(isMaster && 0 == theA[0]) {
204 theA[0] = theA[1] = 1;
212 G4cout <<
"### G4BGGNucleonElasticXS::Initialise for "
216 for(
G4int iz=2; iz<93; ++iz) {
222 theGlauberFacP[iz] = csdn/csup;
226 for(
G4int iz=2; iz<93; ++iz) {
229 theGlauberFacN[iz] = csdn/csup;
232 G4cout <<
"Z= " << iz <<
" A= " << theA[iz]
233 <<
" GFactorP= " << theGlauberFacP[iz]
234 <<
" GFactorN= " << theGlauberFacN[iz] <<
G4endl;
238 theCoulombFacP[0] = theCoulombFacP[1] =
239 theCoulombFacN[0] = theCoulombFacN[1] = 1.0;
242 for(
G4int iz=2; iz<93; ++iz) {
244 /CoulombFactor(fLowEnergy, iz);
247 for(
G4int iz=2; iz<93; ++iz) {
249 /CoulombFactor(fLowEnergy, iz);
252 G4cout <<
"Z= " << iz <<
" A= " << theA[iz]
253 <<
" CFactorP= " << theCoulombFacP[iz]
254 <<
" CFactorN= " << theCoulombFacN[iz] <<
G4endl;
275 outFile <<
"The Barashenkov-Glauber-Gribov cross section handles elastic\n"
276 <<
"scattering of protons and neutrons from nuclei using the\n"
277 <<
"Barashenkov parameterization below 91 GeV and the Glauber-Gribov\n"
278 <<
"parameterization above 91 GeV. n";
double A(double temperature)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
#define G4MUTEX_INITIALIZER
#define G4MUTEXLOCK(mutex)
#define G4MUTEXUNLOCK(mutex)
G4GLOB_DLL std::ostream G4cout
~G4BGGNucleonElasticXS() final
void CrossSectionDescription(std::ostream &) const final
G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=nullptr, const G4Element *elm=nullptr, const G4Material *mat=nullptr) final
G4double GetElementCrossSection(const G4DynamicParticle *, G4int Z, const G4Material *mat) final
G4BGGNucleonElasticXS(const G4ParticleDefinition *)
void BuildPhysicsTable(const G4ParticleDefinition &) final
G4bool IsIsoApplicable(const G4DynamicParticle *, G4int Z, G4int A, const G4Element *elm, const G4Material *mat) final
G4bool IsElementApplicable(const G4DynamicParticle *, G4int Z, const G4Material *mat) final
G4double GetElasticGlauberGribov(const G4DynamicParticle *, G4int Z, G4int A)
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
void SetKineticEnergy(G4double aEnergy)
G4double GetElasticHadronNucleonXsc() const
G4double HadronNucleonXscNS(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
static G4Neutron * Neutron()
static G4NistManager * Instance()
G4double GetAtomicMassAmu(const G4String &symb) const
static G4double CoulombFactor(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
void BuildPhysicsTable(const G4ParticleDefinition &) final
G4double GetElasticCrossSection(const G4DynamicParticle *aParticle, G4int Z)
const G4String & GetParticleName() const
static G4Proton * Proton()
void SetForAllAtomsAndEnergies(G4bool val)