61 fGlauberEnergy = 91.*
GeV;
63 fSAIDHighEnergyLimit = 2.6*
GeV;
67 for (
G4int i = 0; i < 93; i++) {
68 theGlauberFac[i] = 0.0;
69 theCoulombFac[i] = 0.0;
80 isInitialized =
false;
108 return (1 == Z && 2 >= A);
125 if(Z > 92) { Z = 92; }
127 if(ekin <= fLowEnergy && !isPiplus) {
128 cross = theCoulombFac[
Z];
129 }
else if(ekin <= 2*
MeV && isPiplus) {
130 cross = theCoulombFac[
Z]*CoulombFactor(ekin, Z);
131 }
else if(ekin > fGlauberEnergy) {
138 G4cout <<
"G4BGGPionInelasticXS::GetCrossSection for "
141 <<
" in nucleus Z= " << Z <<
" A= " << theA[
Z]
142 <<
" XS(b)= " << cross/
barn
162 if(ekin <= fSAIDHighEnergyLimit) {
191 G4cout <<
"G4BGGPionInelasticXS::GetCrossSection for "
194 <<
" in nucleus Z= " << Z <<
" A= " << A
195 <<
" XS(b)= " << cross/
barn
208 G4cout <<
"### G4BGGPionInelasticXS WARNING: is not applicable to "
212 "G4BGGPionInelasticXS::BuildPhysicsTable is used for wrong particle");
216 if(isInitialized) {
return; }
217 isInitialized =
true;
239 G4cout <<
"### G4BGGPionInelasticXS::Initialise for "
241 <<
" isPiplus: " << isPiplus
253 theGlauberFac[
iz] = csdn/csup;
255 G4cout <<
"Z= " << iz <<
" A= " << A
256 <<
" factor= " << theGlauberFac[
iz] <<
G4endl;
261 theCoulombFac[1] = fSAIDHighEnergyLimit*
283 /CoulombFactor(2*
MeV,iz);
302 if(kinEnergy <=
DBL_MIN) {
return res; }
303 else if(A < 2) {
return kinEnergy*kinEnergy; }
311 G4double ff3 = 0.8 + 18/aa - 0.002*aa;
312 res = 1.0 + ff3*(1.0 - (1.0/(1+std::exp(-8*ff1*(elog + 1.37*ff2)))));
314 ff1 = 1. - 1./aa - 0.001*aa;
315 ff2 = 1.17 - 2.7/aa-0.0014*aa;
316 res /= (1 + std::exp(-8.*ff1*(elog + 2*ff2)));
335 outFile <<
"The Barashenkov-Glauber-Gribov cross section handles inelastic\n"
336 <<
"pion scattering from nuclei at all energies. The Barashenkov\n"
337 <<
"parameterization is used below 91 GeV and the Glauber-Gribov\n"
338 <<
"parameterization is used above 91 GeV.\n";