105 G4double Mproj = particle->GetPDGMass();
115 if(
Z == 1 &&
A == 1) theDef = theProton;
116 else if (
Z == 1 &&
A == 2) theDef = theDeuteron;
119 else if (
Z == 2 &&
A == 4) theDef = theAlpha;
138 fTmax = 4.0*ptot*ptot;
140 if(Plab/std::abs(particle->GetBaryonNumber()) < 100.*
MeV)
143 G4double Z1 = particle->GetPDGCharge();
152 G4double XsCoulomb =
sqr(n/fWaveVector)*
pi*(1+ctet1)/(1.+Am)/(1.+2.*Am-ctet1);
153 XsCoulomb=XsCoulomb*0.38938e+6;
163 G4double CoulombProb = XsCoulomb/(XsCoulomb+XsElastHad);
175 G4double par1 = 2.*(1.+Am)/(1.+ctet1);
179 G4double cosThetaCMS = (par1*ctet1- Ksi*(1.+2.*Am))/(par1-Ksi);
183 G4double PtProjCMS = ptot*std::sqrt(1.0 - cosThetaCMS*cosThetaCMS);
184 G4double PtX= PtProjCMS * std::cos(phi);
185 G4double PtY= PtProjCMS * std::sin(phi);
188 Fproj.setE(std::sqrt(PtX*PtX+PtY*PtY+PtZ*PtZ+Mproj*Mproj));
189 T = -(Pproj-Fproj).mag2();
207 if((A>=12.) && (A<27) ) fRa=fRa*0.85;
208 if((A>=27.) && (A<48) ) fRa=fRa*0.90;
209 if((A>=48.) && (A<65) ) fRa=fRa*0.95;
214 if ((theParticle == theAProton) || (theParticle == theANeutron))
216 if(theDef == theProton)
223 { rho = 1.3347-10.342*Plab/1000.+22.277*Plab/1000.*Plab/1000.-
224 13.634*Plab/1000.*Plab/1000.*Plab/1000. ;}
225 if((Plab < 5500.)&&(Plab >= 610.) )
227 if((Plab >= 5500.)&&(Plab < 12300.) )
230 { rho = 0.135-2.26/(std::sqrt(S)) ;}
232 Ref2 = 0.35 + 0.9/std::sqrt(std::sqrt(S-4.*0.88))+0.04*
G4Log(S) ;
233 ceff2 = 0.375 - 2./S + 0.44/(
sqr(S-4.)+1.5) ;
250 { Ref2 = fRa*fRa +2.48*0.01*sig_pbarp*fRa - 2.23e-6*sig_pbarp*sig_pbarp*fRa*fRa;
251 ceff2 = 0.16+3.3e-4*sig_pbarp+0.35*
G4Exp(-0.03*sig_pbarp);
254 { Ref2 = fRa*fRa -0.46 +0.03*sig_pbarp - 2.98e-6*sig_pbarp*sig_pbarp;
255 ceff2= 0.078 + 6.657e-4*sig_pbarp + 0.3359*
G4Exp(-0.03*sig_pbarp);
258 { Ref2 = fRa*fRa - 1.36 + 0.025 * sig_pbarp - 3.69e-7 * sig_pbarp*sig_pbarp;
259 ceff2 = 0.149 + 7.091e-04*sig_pbarp + 0.3743*
G4Exp(-0.03*sig_pbarp);
262 { Ref2 = fRa*fRa - 1.36 + 0.025 * sig_pbarp - 3.69e-7 * sig_pbarp*sig_pbarp;
263 ceff2 = 0.149 + 7.091e-04*sig_pbarp + 0.3743*
G4Exp(-0.03*sig_pbarp);
267 Ref2 = fRa*fRa - 0.28 + 0.019 * sig_pbarp + 2.06e-6 * sig_pbarp*sig_pbarp;
268 ceff2 = 0.297 + 7.853e-04*sig_pbarp + 0.2899*
G4Exp(-0.03*sig_pbarp);
272 if (theParticle == theADeuteron)
275 Ref2 = XstotalHad/10./2./
pi ;
278 ceff2 = 0.38 + 2.0e-4 *sig_pbarp + 0.5 *
G4Exp(-0.03*sig_pbarp);
280 if(theDef == theProton)
282 ceff2 = 0.297 + 7.853e-04*sig_pbarp + 0.2899*
G4Exp(-0.03*sig_pbarp);
284 if(theDef == theDeuteron)
286 ceff2 = 0.65 + 3.0e-4*sig_pbarp + 0.55 *
G4Exp(-0.03*sig_pbarp);
290 ceff2 = 0.57 + 2.5e-4*sig_pbarp + 0.65 *
G4Exp(-0.02*sig_pbarp);
292 if(theDef == theAlpha)
294 ceff2 = 0.40 + 3.5e-4 *sig_pbarp + 0.45 *
G4Exp(-0.02*sig_pbarp);
298 if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
301 Ref2 = XstotalHad/10./2./
pi ;
304 ceff2 = 0.26 + 2.2e-4*sig_pbarp + 0.33*
G4Exp(-0.03*sig_pbarp);
306 if(theDef == theProton)
308 ceff2 = 0.149 + 7.091e-04*sig_pbarp + 0.3743*
G4Exp(-0.03*sig_pbarp);
310 if(theDef == theDeuteron)
312 ceff2 = 0.57 + 2.5e-4*sig_pbarp + 0.65 *
G4Exp(-0.02*sig_pbarp);
316 ceff2 = 0.39 + 2.7e-4*sig_pbarp + 0.7 *
G4Exp(-0.02*sig_pbarp);
318 if(theDef == theAlpha)
320 ceff2 = 0.24 + 3.5e-4*sig_pbarp + 0.75 *
G4Exp(-0.03*sig_pbarp);
325 if (theParticle == theAAlpha)
328 Ref2 = XstotalHad/10./2./
pi ;
331 ceff2 = 0.22 + 2.0e-4*sig_pbarp + 0.2 *
G4Exp(-0.03*sig_pbarp);
333 if(theDef == theProton)
335 ceff2= 0.078 + 6.657e-4*sig_pbarp + 0.3359*
G4Exp(-0.03*sig_pbarp);
337 if(theDef == theDeuteron)
339 ceff2 = 0.40 + 3.5e-4 *sig_pbarp + 0.45 *
G4Exp(-0.02*sig_pbarp);
343 ceff2 = 0.24 + 3.5e-4*sig_pbarp + 0.75 *
G4Exp(-0.03*sig_pbarp);
345 if(theDef == theAlpha)
347 ceff2 = 0.17 + 3.5e-4*sig_pbarp + 0.45 *
G4Exp(-0.03*sig_pbarp);
351 fRef=std::sqrt(Ref2);
352 fceff = std::sqrt(ceff2);
358 const G4int maxNumberOfLoops = 10000;
359 G4int loopCounter = 0;
367 BracFunct = BracFunct * Q *
sqr(
sqr(fRef));
370 ++loopCounter < maxNumberOfLoops );
371 if ( loopCounter >= maxNumberOfLoops ) {
380 G4double cosTet=1.0-T/(2.*ptot*ptot);
381 if(cosTet > 1.0 ) cosTet= 1.;
382 if(cosTet < -1.0 ) cosTet=-1.;
383 fTetaCMS=std::acos(cosTet);
static G4Pow * GetInstance()
static G4double GetNuclearMass(const G4double A, const G4double Z)
virtual G4double GetElasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
G4double BesselOneByArg(G4double z)
static constexpr double twopi
G4double CalculateParticleBeta(const G4ParticleDefinition *particle, G4double momentum)
G4double GetAntiHadronNucleonTotCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
G4double Z13(G4int Z) const
double A(double temperature)
static G4Triton * Triton()
virtual G4double GetTotalElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double BesselJzero(G4double z)
G4double CalculateAm(G4double momentum, G4double n, G4double Z)
G4double DampFactor(G4double z)
G4double energy(const ThreeVector &p, const G4double m)
static constexpr double GeV
static constexpr double MeV
static constexpr double pi
G4double CalculateZommerfeld(G4double beta, G4double Z1, G4double Z2)
G4double GetcosTeta1(G4double plab, G4int A)
static constexpr double millibarn