69 if(kineticEnergy <= 0.0) {
return 0.0; }
72 if (kineticEnergy > thEnergy) { kineticEnergy = thEnergy; }
75 G4double a13 = std::pow(a,-0.3333333333);
78 G4double alog10E = std::log10(kineticEnergy);
80 const G4double nuleonRadius=1.36E-15;
81 const G4double fac=CLHEP::pi*nuleonRadius*nuleonRadius;
86 if(nOfNeutrons > 1) { fac2=std::log((
G4double(nOfNeutrons))); }
87 G4double crossSection = 1.0E31*fac*fac2*(1. + 1./a13 - fac1);
90 crossSection *= (1 - 0.15*std::exp(-kineticEnergy))/(1.0 - 0.0007*a);
97 G4double ff4= 1.0 - (1.0/(1+std::exp(-8*ff1*(alog10E + 1.37*ff2))));
99 crossSection *= (1 + ff3*ff4);
103 ff1=1. - 1./a - 0.001*a;
104 ff2=1.17 - 2.7/a - 0.0014*a;
106 ff4=-8.*ff1*(alog10E + 2.0*ff2);
108 crossSection *= millibarn/(1. + std::exp(ff4));
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
static G4NistManager * Instance()
G4double GetAtomicMassAmu(const G4String &symb) const
virtual G4bool IsElementApplicable(const G4DynamicParticle *aPart, G4int Z, const G4Material *)
~G4ProtonInelasticCrossSection()
virtual G4double GetElementCrossSection(const G4DynamicParticle *, G4int Z, const G4Material *)
G4ProtonInelasticCrossSection()
G4double GetProtonCrossSection(G4double kineticEnergy, G4int Z)
static G4Proton * Proton()