44 const G4double inve = 1./CLHEP::eplus;
68 ComputeCrossSections(aParticle, kinEnergy, Z,
G4lrint(
A));
78 ComputeCrossSections(aParticle, kinEnergy, Z,
A);
88 ComputeCrossSections(aParticle, kinEnergy, Z,
G4lrint(
A));
98 ComputeCrossSections(aParticle, kinEnergy, Z,
A);
108 ComputeCrossSections(aParticle, kinEnergy, Z,
G4lrint(
A));
118 ComputeCrossSections(aParticle, kinEnergy, Z,
A);
128 ComputeCrossSections(aParticle, kinEnergy, Z,
A);
129 return (fInelasticXsc > fProductionXsc)
130 ? (fInelasticXsc - fProductionXsc)/fInelasticXsc : 0.0;
142 G4cout <<
"G4ComponentGGNuclNuclXsc: uses Glauber-Gribov formula" <<
G4endl;
149 outFile <<
"G4ComponentGGNuclNuclXsc calculates total, inelastic and\n"
150 <<
"elastic cross sections for nucleus-nucleus collisions using\n"
151 <<
"the Glauber model with Gribov corrections. It is valid for\n"
152 <<
"all incident energies above 100 keV./n"
153 <<
"For the hydrogen target G4HadronNucleonXsc class is used.\n";
164void G4ComponentGGNuclNuclXsc::ComputeCrossSections(
169 if(aParticle == fParticle && fZ == Z && fA ==
A && kinEnergy == fEnergy)
171 fParticle = aParticle;
184 if(1 == Z && 1 ==
A) {
186 fHadrNucl->ComputeCrossSections( theProton, e, pZ, pA, pL );
187 fTotalXsc = fHadrNucl->GetTotalGlauberGribovXsc();
188 fElasticXsc = fHadrNucl->GetElasticGlauberGribovXsc();
189 fInelasticXsc = fHadrNucl->GetInelasticGlauberGribovXsc();
190 fProductionXsc = fHadrNucl->GetProductionGlauberGribovXsc();
191 fDiffractionXsc = fHadrNucl->GetDiffractionGlauberGribovXsc();
194 static const G4double cofInelastic = 2.4;
195 static const G4double cofTotal = 2.0;
206 pR *= std::sqrt( pG4Pow->
Z23( pA - pL ) + cHN*pG4Pow->
Z23( pL ) )/pG4Pow->
Z13(pA);
212 G4double sigma = (pZ*Z+pN*tN)*fHNXsc->HadronNucleonXscNS(theProton, theProton, pTkin);
213 if(pHN) sigma += pL*
A*fHNXsc->HadronNucleonXsc(theLambda, theProton, pTkin);
214 G4double ppInXsc = fHNXsc->GetInelasticHadronNucleonXsc();
216 sigma += (pZ*tN+pN*Z)*fHNXsc->HadronNucleonXscNS(theNeutron, theProton, pTkin);
217 G4double npInXsc = fHNXsc->GetInelasticHadronNucleonXsc();
219 G4double nucleusSquare = cofTotal*CLHEP::pi*( pR*pR + tR*tR );
221 G4double ratio= sigma/nucleusSquare;
222 fTotalXsc = nucleusSquare*
G4Log( 1. + ratio )*cB;
223 fInelasticXsc = nucleusSquare*
G4Log( 1. + cofInelastic*ratio )*cB/cofInelastic;
224 fElasticXsc = std::max(fTotalXsc - fInelasticXsc, 0.0);
226 G4double difratio = ratio/(1.+ratio);
227 fDiffractionXsc = 0.5*nucleusSquare*( difratio -
G4Log( 1. + difratio ) );
229 G4double xratio= ((pZ*Z+pN*tN)*ppInXsc + (pZ*tN+pN*Z)*npInXsc)/nucleusSquare;
230 fProductionXsc = nucleusSquare*
G4Log( 1. + cofInelastic*xratio)*cB/cofInelastic;
231 fProductionXsc = std::min(fProductionXsc, fInelasticXsc);
235 fInelasticXsc = fTotalXsc = fElasticXsc = fProductionXsc = fDiffractionXsc = 0.;
250 G4double totEcm = std::sqrt(pM*pM + tM*tM + 2.*pElab*tM);
255 static const G4double qfact = 0.5*CLHEP::elm_coupling;
258 G4double ratio = (totTcm <= bC) ? 0. : 1. - bC/totTcm;
262 G4cout <<
"G4ComponentGGNuclNuclXsc::ComputeCoulombBarier(..)=" <<ratio
263 <<
"; pTkin(GeV)=" << pTkin/CLHEP::MeV
264 <<
" totTcm= " << totTcm/CLHEP::MeV<<
"; bC=" << bC/CLHEP::MeV
282 return (fInelasticXsc > 0.0) ? fDiffractionXsc/fInelasticXsc : 0.0;
296 return (fInelasticXsc > 0.0) ? 1.0 - fProductionXsc/fInelasticXsc : 0.0;
G4double G4Log(G4double x)
G4GLOB_DLL std::ostream G4cout
G4double GetTotalElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A) final
G4double ComputeQuasiElasticRatio(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A) final
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
~G4ComponentGGNuclNuclXsc() override
void BuildPhysicsTable(const G4ParticleDefinition &) final
G4double GetInelasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A) final
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
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()
G4int GetVerboseLevel() const
G4VComponentCrossSection(const G4String &nam="")