115 if(Z == 1 && A == 1) theDef = theProton;
116 else if (Z == 1 && A == 2) theDef = theDeuteron;
118 else if (Z == 2 && A == 3) theDef =
G4He3::He3();
119 else if (Z == 2 && A == 4) theDef = theAlpha;
138 fTmax = 4.0*ptot*ptot;
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);
397 if(!(T < 0.0 || T >= 0.0))
401 G4cout <<
"G4DiffuseElastic:WARNING: A = " << A
402 <<
" mom(GeV)= " << plab/
GeV
403 <<
" S-wave will be sampled"
412 G4double cosTet=1.0-T/(2.*fptot*fptot);
413 if(cosTet > 1.0 ) cosTet= 1.;
414 if(cosTet < -1.0 ) cosTet=-1.;
415 fTetaCMS=std::acos(cosTet);
433 if(!(T < 0.0 || T >= 0.0))
437 G4cout <<
"G4DiffuseElastic:WARNING: A = " << A
438 <<
" mom(GeV)= " << plab/
GeV
439 <<
" S-wave will be sampled"
448 if(fTmax > 0.) {cost = 1. - 2.0*T/fTmax;}
456 else if( cost <= -1.0)
463 sint = std::sqrt((1.0-cost)*(1.0+cost));
487 if( std::fabs(x) < 0.01 )
507 fBeta = a/std::sqrt(1+a*a);
543 G4double modvalue, value2, fact1, fact2, arg, shift, bessel;
545 modvalue = std::fabs(value);
549 value2 = value*
value;
551 fact1 = 57568490574.0 + value2*(-13362590354.0
552 + value2*( 651619640.7
553 + value2*(-11214424.18
554 + value2*( 77392.33017
555 + value2*(-184.9052456 ) ) ) ) );
557 fact2 = 57568490411.0 + value2*( 1029532985.0
558 + value2*( 9494680.718
559 + value2*(59272.64853
560 + value2*(267.8532712
561 + value2*1.0 ) ) ) );
563 bessel = fact1/fact2;
571 shift = modvalue-0.785398164;
573 fact1 = 1.0 + value2*(-0.1098628627e-2
574 + value2*(0.2734510407e-4
575 + value2*(-0.2073370639e-5
576 + value2*0.2093887211e-6 ) ) );
577 fact2 = -0.1562499995e-1 + value2*(0.1430488765e-3
578 + value2*(-0.6911147651e-5
579 + value2*(0.7621095161e-6
580 - value2*0.934945152e-7 ) ) );
582 bessel = std::sqrt(0.636619772/modvalue)*(std::cos(shift)*fact1 - arg*std::sin(shift)*fact2);
594 G4double modvalue, value2, fact1, fact2, arg, shift, bessel;
596 modvalue = std::fabs(value);
598 if ( modvalue < 8.0 )
600 value2 = value*
value;
601 fact1 = value*(72362614232.0 + value2*(-7895059235.0
602 + value2*( 242396853.1
603 + value2*(-2972611.439
604 + value2*( 15704.48260
605 + value2*(-30.16036606 ) ) ) ) ) );
607 fact2 = 144725228442.0 + value2*(2300535178.0
608 + value2*(18583304.74
609 + value2*(99447.43394
610 + value2*(376.9991397
611 + value2*1.0 ) ) ) );
612 bessel = fact1/fact2;
619 shift = modvalue - 2.356194491;
621 fact1 = 1.0 + value2*( 0.183105e-2
622 + value2*(-0.3516396496e-4
623 + value2*(0.2457520174e-5
624 + value2*(-0.240337019e-6 ) ) ) );
626 fact2 = 0.04687499995 + value2*(-0.2002690873e-3
627 + value2*( 0.8449199096e-5
628 + value2*(-0.88228987e-6
629 + value2*0.105787412e-6 ) ) );
631 bessel = std::sqrt( 0.636619772/modvalue)*(std::cos(shift)*fact1 - arg*std::sin(shift)*fact2);
632 if (value < 0.0) bessel = -bessel;
643 if( std::fabs(x) < 0.01 )
647 result = (2.- x2 + x2*x2/6.)/4.;
666 if(cteta1 < -1.) cteta1 = -1.0;
G4double G4ParticleHPJENDLHEData::G4double result
static G4Pow * GetInstance()
static G4AntiHe3 * AntiHe3()
Hep3Vector boostVector() const
virtual ~G4AntiNuclElastic()
static G4double GetNuclearMass(const G4double A, const G4double Z)
virtual G4double SampleInvariantT(const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
virtual G4double GetElasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
static constexpr double Bohr_radius
static G4AntiDeuteron * AntiDeuteron()
static constexpr double hbarc
G4double BesselOneByArg(G4double z)
static G4AntiAlpha * AntiAlpha()
static constexpr double twopi
G4double CalculateParticleBeta(const G4ParticleDefinition *particle, G4double momentum)
G4double GetAntiHadronNucleonTotCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
G4GLOB_DLL std::ostream G4cout
G4double Z13(G4int Z) const
double A(double temperature)
const XML_Char int const XML_Char * value
static G4AntiProton * AntiProton()
HepLorentzVector & boost(double, double, double)
static G4Triton * Triton()
static G4Proton * Proton()
static G4Neutron * Neutron()
static G4Deuteron * Deuteron()
G4double SampleThetaLab(const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
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 GetPDGMass() const
G4double SampleThetaCMS(const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
G4double A13(G4double A) const
G4double DampFactor(G4double z)
G4double energy(const ThreeVector &p, const G4double m)
G4double BesselJone(G4double z)
static constexpr double GeV
G4double Z23(G4int Z) const
static constexpr double MeV
static constexpr double pi
G4double CalculateZommerfeld(G4double beta, G4double Z1, G4double Z2)
static G4AntiTriton * AntiTriton()
static constexpr double fine_structure_const
static constexpr double fermi
G4double GetPDGCharge() const
G4double GetcosTeta1(G4double plab, G4int A)
static G4AntiNeutron * AntiNeutron()
static constexpr double millibarn
G4int GetBaryonNumber() const