42static const G4double inve = 1./CLHEP::eplus;
46 fTotalXsc(0.0), fElasticXsc(0.0), fInelasticXsc(0.0), fProductionXsc(0.0),
47 fDiffractionXsc(0.0), fEnergy(0.0), fParticle(nullptr), fZ(0), fA(0)
67 ComputeCrossSections(aParticle, kinEnergy,
Z,
G4lrint(
A));
77 ComputeCrossSections(aParticle, kinEnergy,
Z,
A);
87 ComputeCrossSections(aParticle, kinEnergy,
Z,
G4lrint(
A));
97 ComputeCrossSections(aParticle, kinEnergy,
Z,
A);
107 ComputeCrossSections(aParticle, kinEnergy,
Z,
G4lrint(
A));
117 ComputeCrossSections(aParticle, kinEnergy,
Z,
A);
127 ComputeCrossSections(aParticle, kinEnergy,
Z,
A);
128 return (fInelasticXsc > fProductionXsc)
129 ? (fInelasticXsc - fProductionXsc)/fInelasticXsc : 0.0;
141 G4cout <<
"G4ComponentGGNuclNuclXsc: uses Glauber-Gribov formula" <<
G4endl;
148 outFile <<
"G4ComponentGGNuclNuclXsc calculates total, inelastic and\n"
149 <<
"elastic cross sections for nucleus-nucleus collisions using\n"
150 <<
"the Glauber model with Gribov corrections. It is valid for\n"
151 <<
"all incident energies above 100 keV./n"
152 <<
"For the hydrogen target G4HadronNucleonXsc class is used.\n";
163void G4ComponentGGNuclNuclXsc::ComputeCrossSections(
168 if(aParticle == fParticle && fZ ==
Z && fA ==
A && kinEnergy == fEnergy)
170 fParticle = aParticle;
183 if(1 ==
Z && 1 ==
A) {
193 static const G4double cofInelastic = 2.4;
194 static const G4double cofTotal = 2.0;
204 if(pHN) pR *= std::sqrt( pG4Pow->
Z23( pA - pL ) + cHN*pG4Pow->
Z23( pL ) )/pG4Pow->
Z13(pA);
221 G4double nucleusSquare = cofTotal*CLHEP::pi*( pR*pR + tR*tR );
223 G4double ratio= sigma/nucleusSquare;
224 fTotalXsc = nucleusSquare*
G4Log( 1. + ratio )*cB;
225 fInelasticXsc = nucleusSquare*
G4Log( 1. + cofInelastic*ratio )*cB/cofInelastic;
226 fElasticXsc = std::max(fTotalXsc - fInelasticXsc, 0.0);
228 G4double difratio = ratio/(1.+ratio);
229 fDiffractionXsc = 0.5*nucleusSquare*( difratio -
G4Log( 1. + difratio ) );
231 G4double xratio= ((pZ*
Z+pN*tN)*ppInXsc + (pZ*tN+pN*
Z)*npInXsc)/nucleusSquare;
232 fProductionXsc = nucleusSquare*
G4Log( 1. + cofInelastic*xratio)*cB/cofInelastic;
233 fProductionXsc = std::min(fProductionXsc, fInelasticXsc);
256 G4double totEcm = std::sqrt(pM*pM + tM*tM + 2.*pElab*tM);
259 static const G4double qfact = CLHEP::fine_structure_const*CLHEP::hbarc;
262 G4double ratio = (totTcm <= bC ) ? 0. : 1. - bC/totTcm;
281 return (fInelasticXsc > 0.0) ? fDiffractionXsc/fInelasticXsc : 0.0;
295 return (fInelasticXsc > 0.0) ? 1.0 - fProductionXsc/fInelasticXsc : 0.0;
G4double G4Log(G4double x)
G4GLOB_DLL std::ostream G4cout
G4double GetElasticGlauberGribovXsc() const
G4double GetDiffractionGlauberGribovXsc() const
G4double GetInelasticGlauberGribovXsc() const
G4double GetProductionGlauberGribovXsc() const
void ComputeCrossSections(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A, G4int nL=0)
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 HadronNucleonXsc(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
G4double GetInelasticHadronNucleonXsc() const
G4double HadronNucleonXscNS(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
static G4Lambda * Lambda()
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 GetNumberOfLambdasInHypernucleus() const
G4bool IsHypernucleus() const
G4int GetBaryonNumber() const
static G4Pow * GetInstance()
G4double Z13(G4int Z) const
G4double Z23(G4int Z) const
static G4Proton * Proton()