60 fGlauberEnergy = 91.*
GeV;
62 fSAIDHighEnergyLimit = 2.6*
GeV;
66 for (
G4int i = 0; i < 93; i++) {
67 theGlauberFac[i] = 0.0;
68 theCoulombFac[i] = 0.0;
81 isInitialized =
false;
109 return (1 == Z && 2 >= A);
126 if(Z > 92) { Z = 92; }
128 if(ekin <= fLowEnergy && !isPiplus) {
129 cross = theCoulombFac[Z];
130 }
else if(ekin <= 2*
MeV && isPiplus) {
131 cross = theCoulombFac[Z]*CoulombFactor(ekin, Z);
132 }
else if(ekin > fGlauberEnergy) {
139 G4cout <<
"G4BGGPionInelasticXS::GetCrossSection for "
142 <<
" in nucleus Z= " << Z <<
" A= " << theA[Z]
143 <<
" XS(b)= " << cross/
barn
163 if(ekin <= fSAIDHighEnergyLimit) {
172 G4cout <<
"G4BGGPionInelasticXS::GetCrossSection for "
175 <<
" in nucleus Z= " << Z <<
" A= " << A
176 <<
" XS(b)= " << cross/
barn
189 G4cout <<
"### G4BGGPionInelasticXS WARNING: is not applicable to "
193 "G4BGGPionInelasticXS::BuildPhysicsTable is used for wrong particle");
197 if(isInitialized) {
return; }
198 isInitialized =
true;
219 G4cout <<
"### G4BGGPionInelasticXS::Initialise for "
221 <<
" isPiplus: " << isPiplus
233 theGlauberFac[
iz] = csdn/csup;
235 G4cout <<
"Z= " << iz <<
" A= " << A
236 <<
" factor= " << theGlauberFac[
iz] <<
G4endl;
241 theCoulombFac[1] = fSAIDHighEnergyLimit*
249 /CoulombFactor(2*
MeV,iz);
268 if(kinEnergy <=
DBL_MIN) {
return res; }
269 else if(A < 2) {
return kinEnergy*kinEnergy; }
277 G4double ff3 = 0.8 + 18/aa - 0.002*aa;
278 res = 1.0 + ff3*(1.0 - (1.0/(1+fG4pow->
expA(-8*ff1*(elog + 1.37*ff2)))));
280 ff1 = 1. - 1./aa - 0.001*aa;
281 ff2 = 1.17 - 2.7/aa-0.0014*aa;
282 res /= (1 + fG4pow->
expA(-8.*ff1*(elog + 2*ff2)));
291 outFile <<
"The Barashenkov-Glauber-Gribov cross section handles inelastic\n"
292 <<
"pion scattering from nuclei at all energies. The Barashenkov\n"
293 <<
"parameterization is used below 91 GeV and the Glauber-Gribov\n"
294 <<
"parameterization is used above 91 GeV.\n";
static G4Pow * GetInstance()
virtual G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition *, G4double kinEnergy, G4int, G4int)
virtual ~G4BGGPionInelasticXS()
G4double GetKineticEnergy() const
G4double expA(G4double A) const
G4double log10A(G4double A) const
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
G4double GetInelasticCrossSection(const G4DynamicParticle *aParticle, G4int Z, G4int A)
virtual void CrossSectionDescription(std::ostream &) const
G4ParticleDefinition * GetDefinition() const
virtual G4double GetElementCrossSection(const G4DynamicParticle *, G4int Z, const G4Material *mat=0)
static G4NistManager * Instance()
const G4String & GetParticleName() const
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
G4GLOB_DLL std::ostream G4cout
virtual G4bool IsIsoApplicable(const G4DynamicParticle *, G4int Z, G4int A, const G4Element *elm=0, const G4Material *mat=0)
void SetMinKinEnergy(G4double value)
virtual G4bool IsElementApplicable(const G4DynamicParticle *, G4int Z, const G4Material *mat=0)
G4BGGPionInelasticXS(const G4ParticleDefinition *)
static G4Proton * Proton()
static G4PionPlus * PionPlus()
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
void SetKineticEnergy(G4double aEnergy)
G4double GetInelasticGlauberGribov(const G4DynamicParticle *, G4int Z, G4int A)
void SetMaxKinEnergy(G4double value)
static G4PionMinus * PionMinus()
G4double GetAtomicMassAmu(const G4String &symb) const
G4double GetHadronNucleonXscPDG(const G4DynamicParticle *, const G4ParticleDefinition *)
void BuildPhysicsTable(const G4ParticleDefinition &)
G4double GetInelasticHadronNucleonXsc()