66 fGlauberEnergy = 91.*GeV;
69 fSAIDHighEnergyLimit = 1.3*GeV;
70 for (
G4int i = 0; i < 93; ++i) {
71 theGlauberFac[i] = 0.0;
72 theCoulombFac[i] = 0.0;
83 isInitialized =
false;
109 return (1 == Z && 2 >= A);
126 if(ekin > fGlauberEnergy) {
133 if(Z > 92) { Z = 92; }
135 if(ekin <= fLowEnergy) {
136 cross = theCoulombFac[Z]*CoulombFactor(ekin, Z);
137 }
else if(ekin > fGlauberEnergy) {
145 G4cout <<
"G4BGGNucleonInelasticXS::GetCrossSection for "
148 <<
" in nucleus Z= " << Z <<
" A= " << theA[Z]
149 <<
" XS(b)= " << cross/barn
169 if(ekin <= fSAIDHighEnergyLimit) {
171 }
else if(ekin < fHighEnergy) {
181 G4cout <<
"G4BGGNucleonInelasticXS::GetCrossSection for "
184 <<
" in nucleus Z= " << Z <<
" A= " << A
185 <<
" XS(b)= " << cross/barn
198 G4cout <<
"### G4BGGNucleonInelasticXS WARNING: is not applicable to "
202 "G4BGGNucleonElasticXS::BuildPhysicsTable is used for wrong particle");
206 if(isInitialized) {
return; }
207 isInitialized =
true;
219 if(particle == theProton) {
221 fSAIDHighEnergyLimit = 2*GeV;
235 G4cout <<
"### G4BGGNucleonInelasticXS::Initialise for "
238 for(
G4int iz=2; iz<93; iz++) {
246 theGlauberFac[iz] = csdn/csup;
248 G4cout <<
"Z= " << iz <<
" A= " << A
249 <<
" GlauberFactor= " << theGlauberFac[iz] <<
G4endl;
256 theCoulombFac[0] = fSAIDHighEnergyLimit*
274 theCoulombFac[1] = fHighEnergy*((theCoulombFac[0]/fHighEnergy + 1)
281 G4cout <<
"Z=1 A=1" <<
" CoulombFactor[0]= " << theCoulombFac[0]
282 <<
" CoulombFactor[1]= " << theCoulombFac[1] <<
G4endl;
284 theCoulombFac[2] = 1.0;
287 for(
G4int iz=3; iz<93; iz++) {
292 G4cout <<
"Z= " << iz <<
" A= " << theA[iz]
293 <<
" CoulombFactor= " << theCoulombFac[iz] <<
G4endl;
303 if(kinEnergy <= 0.0) {
return res; }
304 else if (Z <= 1) {
return kinEnergy*kinEnergy; }
306 G4double elog = std::log10(kinEnergy/GeV);
314 G4double ff3 = 0.8 + 18/aa - 0.002*aa;
315 res = 1.0 + ff3*(1.0 - (1.0/(1+std::exp(-8*ff1*(elog + 1.37*ff2)))));
317 ff1 = 1. - 1./aa - 0.001*aa;
318 ff2 = 1.17 - 2.7/aa-0.0014*aa;
319 res /= (1 + std::exp(-8.*ff1*(elog + 2*ff2)));
324 G4double p3 = 0.6 + 13./aa - 0.0005*aa;
326 G4double p5 = 1.36 + 1.8/aa + 0.0005*aa;
327 G4double p6 = 1. + 200./aa + 0.02*aa;
328 G4double p7 = 3.0 - (aa-70.)*(aa-200.)/11000.;
330 G4double firstexp = std::exp(-p4*(elog + p5));
331 G4double secondexp = std::exp(-p6*(elog + p7));
333 res = (1.+p3*firstexp/(1. + firstexp))/(1. + secondexp);
343 outFile <<
"The Barashenkov-Glauber-Gribov cross section calculates inelastic\n"
344 <<
"scattering of protons and neutrons from nuclei using the\n"
345 <<
"Barashenkov parameterization below 91 GeV and the Glauber-Gribov\n"
346 <<
"parameterization above 91 GeV. It uses the G4HadronNucleonXsc\n"
347 <<
"cross section component for hydrogen targets, and the\n"
348 <<
"G4GlauberGribovCrossSection component for other targets.\n";
G4DLLIMPORT std::ostream G4cout
virtual G4double GetElementCrossSection(const G4DynamicParticle *, G4int Z, const G4Material *mat=0)
virtual G4bool IsIsoApplicable(const G4DynamicParticle *, G4int Z, G4int A, const G4Element *elm=0, const G4Material *mat=0)
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
virtual G4bool IsElementApplicable(const G4DynamicParticle *, G4int Z, const G4Material *mat=0)
virtual ~G4BGGNucleonInelasticXS()
virtual void CrossSectionDescription(std::ostream &) const
G4BGGNucleonInelasticXS(const G4ParticleDefinition *)
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
virtual G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition *, G4double kinEnergy, G4int, G4int)
G4VCrossSectionDataSet * GetCrossSectionDataSet(const G4String &name, G4bool warning=true)
static G4CrossSectionDataSetRegistry * Instance()
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
void SetKineticEnergy(G4double aEnergy)
static const char * Default_Name()
G4double GetInelasticGlauberGribov(const G4DynamicParticle *, G4int Z, G4int A)
G4double GetHadronNucleonXscNS(const G4DynamicParticle *, const G4ParticleDefinition *)
G4double GetHadronNucleonXscPDG(const G4DynamicParticle *, const G4ParticleDefinition *)
G4double GetInelasticHadronNucleonXsc()
static G4Neutron * Neutron()
static G4NistManager * Instance()
G4double GetAtomicMassAmu(const G4String &symb) const
virtual G4double GetElementCrossSection(const G4DynamicParticle *aParticle, G4int Z, const G4Material *mat=0)
static const char * Default_Name()
const G4String & GetParticleName() const
static G4Proton * Proton()
virtual void BuildPhysicsTable(const G4ParticleDefinition &)