41static const G4double inve = 1./CLHEP::eplus;
45 fTotalXsc(0.0), fElasticXsc(0.0), fInelasticXsc(0.0), fProductionXsc(0.0),
46 fDiffractionXsc(0.0), fEnergy(0.0), fParticle(nullptr), fZ(0), fA(0)
65 ComputeCrossSections(aParticle, kinEnergy, Z,
G4lrint(
A));
75 ComputeCrossSections(aParticle, kinEnergy, Z,
A);
85 ComputeCrossSections(aParticle, kinEnergy, Z,
G4lrint(
A));
95 ComputeCrossSections(aParticle, kinEnergy, Z,
A);
105 ComputeCrossSections(aParticle, kinEnergy, Z,
G4lrint(
A));
115 ComputeCrossSections(aParticle, kinEnergy, Z,
A);
125 ComputeCrossSections(aParticle, kinEnergy, Z,
A);
126 return (fInelasticXsc > fProductionXsc)
127 ? (fInelasticXsc - fProductionXsc)/fInelasticXsc : 0.0;
139 G4cout <<
"G4ComponentGGNuclNuclXsc: uses Glauber-Gribov formula" <<
G4endl;
146 outFile <<
"G4ComponentGGNuclNuclXsc calculates total, inelastic and\n"
147 <<
"elastic cross sections for nucleus-nucleus collisions using\n"
148 <<
"the Glauber model with Gribov corrections. It is valid for\n"
149 <<
"all incident energies above 100 keV./n"
150 <<
"For the hydrogen target G4HadronNucleonXsc class is used.\n";
161void G4ComponentGGNuclNuclXsc::ComputeCrossSections(
166 if(aParticle == fParticle && fZ == Z && fA == A && kinEnergy == fEnergy)
168 fParticle = aParticle;
177 if(1 == Z && 1 == A) {
187 static const G4double cofInelastic = 2.4;
188 static const G4double cofTotal = 2.0;
212 G4double nucleusSquare = cofTotal*CLHEP::pi*( pR*pR + tR*tR );
214 G4double ratio= sigma/nucleusSquare;
215 fTotalXsc = nucleusSquare*
G4Log( 1. + ratio )*cB;
216 fInelasticXsc = nucleusSquare*
G4Log( 1. + cofInelastic*ratio )*cB/cofInelastic;
217 fElasticXsc = std::max(fTotalXsc - fInelasticXsc, 0.0);
219 G4double difratio = ratio/(1.+ratio);
220 fDiffractionXsc = 0.5*nucleusSquare*( difratio -
G4Log( 1. + difratio ) );
222 G4double xratio= ((pZ*Z+pN*tN)*ppInXsc + (pZ*tN+pN*Z)*npInXsc)/nucleusSquare;
223 fProductionXsc = nucleusSquare*
G4Log( 1. + cofInelastic*xratio)*cB/cofInelastic;
224 fProductionXsc = std::min(fProductionXsc, fInelasticXsc);
247 G4double totEcm = std::sqrt(pM*pM + tM*tM + 2.*pElab*tM);
250 static const G4double qfact = CLHEP::fine_structure_const*CLHEP::hbarc;
251 G4double bC = qfact*pZ*Z*0.5/(pR + tR);
253 G4double ratio = (totTcm <= bC ) ? 0. : 1. - bC/totTcm;
272 return (fInelasticXsc > 0.0) ? fDiffractionXsc/fInelasticXsc : 0.0;
286 return (fInelasticXsc > 0.0) ? 1.0 - fProductionXsc/fInelasticXsc : 0.0;
double A(double temperature)
G4double G4Log(G4double x)
G4GLOB_DLL std::ostream G4cout
void ComputeCrossSections(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A)
G4double GetElasticGlauberGribovXsc() const
G4double GetDiffractionGlauberGribovXsc() const
G4double GetInelasticGlauberGribovXsc() const
G4double GetProductionGlauberGribovXsc() const
G4double GetTotalGlauberGribovXsc() const
G4double GetTotalElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A) final
G4double ComputeQuasiElasticRatio(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A) final
virtual ~G4ComponentGGNuclNuclXsc()
G4double GetRatioQE(const G4DynamicParticle *, G4double At, G4double Zt)
G4double GetElasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A) final
G4double GetRatioSD(const G4DynamicParticle *, G4double At, G4double Zt)
void DumpPhysicsTable(const G4ParticleDefinition &) final
G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A) final
G4ComponentGGNuclNuclXsc()
G4double ComputeCoulombBarier(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A, G4double pR, G4double tR)
G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A) final
void Description(std::ostream &) const final
G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A) final
void BuildPhysicsTable(const G4ParticleDefinition &) final
G4double GetInelasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A) final
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
G4double GetInelasticHadronNucleonXsc() const
G4double HadronNucleonXscNS(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
static G4Neutron * Neutron()
static G4double Radius(G4int Z, G4int A)
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double GetPDGMass() const
G4double GetPDGCharge() const
G4int GetBaryonNumber() const
static G4Proton * Proton()