56G4double G4BGGPionInelasticXS::theGlauberFacPiPlus[93] = {0.0};
57G4double G4BGGPionInelasticXS::theGlauberFacPiMinus[93] = {0.0};
58G4double G4BGGPionInelasticXS::theLowEPiPlus[93] = {0.0};
59G4double G4BGGPionInelasticXS::theLowEPiMinus[93] = {0.0};
60G4int G4BGGPionInelasticXS::theA[93] = {0};
70 fGlauberEnergy = 91.*CLHEP::GeV;
71 fLowEnergy = 20.*CLHEP::MeV;
72 fLowestEnergy = 1.*CLHEP::MeV;
84 isPiplus = (p == thePiPlus);
125 G4int Z = std::min(ZZ, 92);
129 }
else if(ekin < fLowEnergy) {
130 cross = (isPiplus) ? theLowEPiPlus[Z]*CoulombFactorPiPlus(ekin, Z)
131 : theLowEPiMinus[Z]*FactorPiMinus(ekin);
132 }
else if(ekin > fGlauberEnergy) {
133 cross = (isPiplus) ? theGlauberFacPiPlus[Z] : theGlauberFacPiMinus[Z];
139 G4cout <<
"G4BGGPionInelasticXS::GetCrossSection for "
142 <<
" in nucleus Z= " << Z <<
" A= " << theA[Z]
143 <<
" XS(b)= " << cross/barn
164 G4cout <<
"G4BGGPionInelasticXS::GetCrossSection for "
167 <<
" in nucleus Z= " << Z <<
" A= " <<
A
168 <<
" XS(b)= " << cross/barn
178 if(fPion) {
return; }
180 G4cout <<
"G4BGGPionInelasticXS::BuildPhysicsTable for "
187 ed <<
"This BGG cross section is applicable only to pions and not to "
189 G4Exception(
"G4BGGPionInelasticXS::BuildPhysicsTable",
"had001",
201#ifdef G4MULTITHREADED
206#ifdef G4MULTITHREADED
214 if(isMaster && 0 == theA[0]) {
216 theA[0] = theA[1] = 1;
224 G4cout <<
"### G4BGGPionInelasticXS::Initialise for "
226 <<
" isPiplus: " << isPiplus
229 for(
G4int iz=2; iz<93; ++iz) {
235 theGlauberFacPiPlus[iz] = csdn/csup;
239 for(
G4int iz=2; iz<93; ++iz) {
242 theGlauberFacPiMinus[iz] = csdn/csup;
245 G4cout <<
"Z= " << iz <<
" A= " << theA[iz]
246 <<
" factorPiPlus= " << theGlauberFacPiPlus[iz]
247 <<
" factorPiMinus= " << theGlauberFacPiMinus[iz]
252 theLowEPiPlus[1] = theLowEPiMinus[1]= 1.0;
255 for(
G4int iz=2; iz<93; ++iz) {
257 /CoulombFactorPiPlus(fLowEnergy, iz);
261 for(
G4int iz=2; iz<93; ++iz) {
263 /FactorPiMinus(fLowEnergy);
266 G4cout <<
"Z= " << iz <<
" A= " << theA[iz]
267 <<
" LowEtorPiPlus= " << theLowEPiPlus[iz]
268 <<
" LowEtorPiMinus= " << theLowEPiMinus[iz]
279 return (kinEnergy > 0.0) ?
287 return 1.0/std::sqrt(kinEnergy);
295 outFile <<
"The Barashenkov-Glauber-Gribov cross section handles inelastic\n"
296 <<
"pion scattering from nuclei at all energies. The Barashenkov\n"
297 <<
"parameterization is used below 91 GeV and the Glauber-Gribov\n"
298 <<
"parameterization is used 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
void CrossSectionDescription(std::ostream &) const final
void BuildPhysicsTable(const G4ParticleDefinition &) final
G4bool IsElementApplicable(const G4DynamicParticle *, G4int Z, const G4Material *mat) final
G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=nullptr, const G4Element *elm=nullptr, const G4Material *mat=nullptr) final
G4BGGPionInelasticXS(const G4ParticleDefinition *)
G4bool IsIsoApplicable(const G4DynamicParticle *, G4int Z, G4int A, const G4Element *elm, const G4Material *mat) final
~G4BGGPionInelasticXS() final
G4double GetElementCrossSection(const G4DynamicParticle *, G4int Z, const G4Material *mat) final
G4double GetInelasticGlauberGribov(const G4DynamicParticle *, G4int Z, G4int A)
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
void SetKineticEnergy(G4double aEnergy)
G4double GetInelasticHadronNucleonXsc() const
G4double HadronNucleonXscNS(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
static G4HadronicParameters * Instance()
static G4NistManager * Instance()
G4double GetAtomicMassAmu(const G4String &symb) const
static G4double CoulombFactor(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
const G4String & GetParticleName() const
static G4PionMinus * PionMinus()
static G4PionPlus * PionPlus()
static G4Pow * GetInstance()
static G4Proton * Proton()
void BuildPhysicsTable(const G4ParticleDefinition &) final
G4double GetInelasticCrossSection(const G4DynamicParticle *aParticle, G4int Z, G4int A) const
void SetMaxKinEnergy(G4double value)
void SetMinKinEnergy(G4double value)
void SetForAllAtomsAndEnergies(G4bool val)