74 lowEnergyRecoilLimit = 100.*
keV;
75 lowEnergyLimitQ = 0.0*
GeV;
76 lowEnergyLimitHE = 0.0*
GeV;
77 lowestEnergyLimit= 0.0*
keV;
78 plabLowLimit = 20.0*
MeV;
107 fCofAlphaCoulomb = 0.5;
116 fNuclearRadius1 = fNuclearRadius2 = fNuclearRadiusSquare
117 = fRutherfordRatio = fCoulombPhase0 = fHalfRutThetaTg = fHalfRutThetaTg2
118 = fRutherfordTheta = fProfileLambda = fCofPhase = fCofFar = fCofAlphaMax
119 = fCofAlphaCoulomb = fSumSigma = fEtaRatio = fReZ = 0.0;
122 fNuclearRadiusCof = 1.0;
131 if ( fEnergyVector ) {
132 delete fEnergyVector;
136 for ( std::vector<G4PhysicsTable*>::iterator it = fAngleBank.begin();
137 it != fAngleBank.end(); ++it ) {
138 if ( (*it) ) (*it)->clearAndDestroy();
162 for(jEl = 0 ; jEl < numOfEl; ++jEl)
164 fAtomicNumber = (*theElementTable)[jEl]->GetZ();
168 fNuclearRadius += R1;
172 G4cout<<
"G4NuclNuclDiffuseElastic::Initialise() the element: "
173 <<(*theElementTable)[jEl]->GetName()<<
G4endl;
175 fElementNumberVector.push_back(fAtomicNumber);
176 fElementNameVector.push_back((*theElementTable)[jEl]->GetName());
179 fAngleBank.push_back(fAngleTable);
194 fParticle = particle;
195 fWaveVector = momentum/
hbarc;
222 if (iZ == 1 && iA == 1) theDef = theProton;
223 else if (iZ == 1 && iA == 2) theDef = theDeuteron;
225 else if (iZ == 2 && iA == 3) theDef =
G4He3::He3();
226 else if (iZ == 2 && iA == 4) theDef = theAlpha;
240 G4double cost = 1 - 0.5*std::fabs(tMand)/ptot2;
242 if( cost >= 1.0 ) cost = 1.0;
243 else if( cost <= -1.0) cost = -1.0;
245 G4double thetaCMS = std::acos(cost);
265 fParticle = particle;
266 fWaveVector = momentum/
hbarc;
274 G4double kRt = fWaveVector*fNuclearRadius*theta;
277 if( z && (kRt > kRtC) )
282 fAm =
CalculateAm( momentum, fZommerfeld, fAtomicNumber);
309 if (iZ == 1 && iA == 1) theDef = theProton;
310 else if (iZ == 1 && iA == 2) theDef = theDeuteron;
312 else if (iZ == 2 && iA == 3) theDef =
G4He3::He3();
313 else if (iZ == 2 && iA == 4) theDef = theAlpha;
327 G4double cost = 1 - 0.5*std::fabs(tMand)/ptot2;
329 if( cost >= 1.0 ) cost = 1.0;
330 else if( cost <= -1.0) cost = -1.0;
332 G4double thetaCMS = std::acos(cost);
359 if (iZ == 1 && iA == 1) theDef = theProton;
360 else if (iZ == 1 && iA == 2) theDef = theDeuteron;
362 else if (iZ == 2 && iA == 3) theDef =
G4He3::He3();
363 else if (iZ == 2 && iA == 4) theDef = theAlpha;
377 G4double cost = 1 - 0.5*std::fabs(tMand)/ptot2;
379 if( cost >= 1.0 ) cost = 1.0;
380 else if( cost <= -1.0) cost = -1.0;
382 G4double thetaCMS = std::acos(cost);
402 G4double sigma, bzero, bzero2, bonebyarg, bonebyarg2, damp, damp2;
410 G4double kr = fWaveVector*fNuclearRadius;
415 bzero2 = bzero*bzero;
419 bonebyarg2 = bonebyarg*bonebyarg;
434 diffuse = 0.63*
fermi;
444 G4double kgamma = lambda*(1.-
G4Exp(-fWaveVector*gamma/lambda));
451 G4double pikdt = lambda*(1.-
G4Exp(-
pi*fWaveVector*diffuse*theta/lambda));
456 G4double mode2k2 = (e1*e1+e2*e2)*fWaveVector*fWaveVector;
457 G4double e2dk3t = -2.*e2*delta*fWaveVector*fWaveVector*fWaveVector*theta;
463 sigma += mode2k2*bone2 + e2dk3t*bzero*bone;
464 sigma += kr2*bonebyarg2;
482 G4double sigma, bzero, bzero2, bonebyarg, bonebyarg2, damp, damp2;
490 G4double kr = fWaveVector*fNuclearRadius;
495 bzero2 = bzero*bzero;
499 bonebyarg2 = bonebyarg*bonebyarg;
501 if (fParticle == theProton)
503 diffuse = 0.63*
fermi;
512 diffuse = 0.63*
fermi;
520 G4double kgamma = lambda*(1.-
G4Exp(-fWaveVector*gamma/lambda));
526 G4double sinHalfTheta = std::sin(0.5*theta);
527 G4double sinHalfTheta2 = sinHalfTheta*sinHalfTheta;
529 kgamma += 0.5*fZommerfeld/kr/(sinHalfTheta2+fAm);
540 G4double pikdt = lambda*(1.-
G4Exp(-
pi*fWaveVector*diffuse*theta/lambda));
547 G4double mode2k2 = (e1*e1+e2*e2)*fWaveVector*fWaveVector;
548 G4double e2dk3t = -2.*e2*delta*fWaveVector*fWaveVector*fWaveVector*theta;
553 sigma += mode2k2*bone2;
554 sigma += e2dk3t*bzero*bone;
557 sigma += kr2*bonebyarg2;
575 theta = std::sqrt(alpha);
579 G4double sigma, bzero, bzero2, bonebyarg, bonebyarg2, damp, damp2;
587 G4double kr = fWaveVector*fNuclearRadius;
592 bzero2 = bzero*bzero;
596 bonebyarg2 = bonebyarg*bonebyarg;
598 if (fParticle == theProton)
600 diffuse = 0.63*
fermi;
609 diffuse = 0.63*
fermi;
617 G4double kgamma = lambda*(1.-
G4Exp(-fWaveVector*gamma/lambda));
624 G4double sinHalfTheta2 = sinHalfTheta*sinHalfTheta;
626 kgamma += 0.5*fZommerfeld/kr/(sinHalfTheta2+fAm);
637 G4double pikdt = lambda*(1.-
G4Exp(-
pi*fWaveVector*diffuse*theta/lambda));
644 G4double mode2k2 = (e1*e1+e2*e2)*fWaveVector*fWaveVector;
645 G4double e2dk3t = -2.*e2*delta*fWaveVector*fWaveVector*fWaveVector*theta;
650 sigma += mode2k2*bone2;
651 sigma += e2dk3t*bzero*bone;
654 sigma += kr2*bonebyarg2;
689 fParticle = particle;
690 fWaveVector = momentum/
hbarc;
712 G4double t = 2*p*p*( 1 - std::cos(theta) );
728 fParticle = particle;
729 fWaveVector = momentum/
hbarc;
734 thetaMax = 10.174/fWaveVector/fNuclearRadius;
736 if (thetaMax >
pi) thetaMax =
pi;
745 for(i = 1; i <= iMax; i++)
747 theta1 = (i-1)*thetaMax/iMax;
748 theta2 = i*thetaMax/iMax;
753 result = 0.5*(theta1 + theta2);
757 if (i > iMax ) result = 0.5*(theta1 + theta2);
763 if(result < 0.) result = 0.;
764 if(result > thetaMax) result = thetaMax;
779 fParticle = aParticle;
781 G4double totElab = std::sqrt(m1*m1+p*p);
820 G4int iMomentum, iAngle;
824 for(iElement = 0; iElement < fElementNumberVector.size(); iElement++)
826 if( std::fabs(Z - fElementNumberVector[iElement]) < 0.5)
break;
828 if ( iElement == fElementNumberVector.size() )
840 fAngleTable = fAngleBank[iElement];
842 G4double kinE = std::sqrt(momentum*momentum + m1*m1) - m1;
844 for( iMomentum = 0; iMomentum < fEnergyBin; iMomentum++)
848 if( kinE < fEnergyVector->GetLowEdgeEnergy(iMomentum) )
break;
853 if ( iMomentum >= fEnergyBin ) iMomentum = fEnergyBin-1;
854 if ( iMomentum < 0 ) iMomentum = 0;
857 if (iMomentum == fEnergyBin -1 || iMomentum == 0 )
859 position = (*(*fAngleTable)(iMomentum))(fAngleBin-2)*
G4UniformRand();
863 for(iAngle = 0; iAngle < fAngleBin-1; iAngle++)
865 if( position < (*(*fAngleTable)(iMomentum))(iAngle) )
break;
867 if (iAngle >= fAngleBin-1) iAngle = fAngleBin-2;
882 for(iAngle = 0; iAngle < fAngleBin-1; iAngle++)
885 if( position > (*(*fAngleTable)(iMomentum))(iAngle) )
break;
887 if (iAngle >= fAngleBin-1) iAngle = fAngleBin-2;
905 for(iAngle = 0; iAngle < fAngleBin-1; iAngle++)
908 if( position > (*(*fAngleTable)(iMomentum))(iAngle) )
break;
910 if (iAngle >= fAngleBin-1) iAngle = fAngleBin-2;
924 randAngle = W1*theta1 + W2*theta2;
951 G4cout<<
"G4NuclNuclDiffuseElastic::Initialise() the element with Z = "
952 <<Z<<
"; and A = "<<A<<
G4endl;
954 fElementNumberVector.push_back(fAtomicNumber);
958 fAngleBank.push_back(fAngleTable);
972 G4double alpha1, alpha2, alphaMax, alphaCoulomb, delta = 0., sum = 0.;
980 for( i = 0; i < fEnergyBin; i++)
987 partMom = std::sqrt( kinE*(kinE + 2*m1) );
991 alphaMax = fRutherfordTheta*fCofAlphaMax;
993 if(alphaMax >
pi) alphaMax =
pi;
998 alphaCoulomb = fRutherfordTheta*fCofAlphaCoulomb;
1006 G4double delth = (alphaMax-alphaCoulomb)/fAngleBin;
1014 for(j = fAngleBin-1; j >= 1; j--)
1022 alpha1 = alphaCoulomb + delth*(j-1);
1024 alpha2 = alpha1 + delth;
1031 angleVector->
PutValue( j-1 , alpha1, sum );
1034 fAngleTable->
insertAt(i,angleVector);
1049 G4double x1, x2, y1, y2, randAngle;
1053 randAngle = (*fAngleTable)(iMomentum)->GetLowEdgeEnergy(iAngle);
1058 if ( iAngle >=
G4int((*fAngleTable)(iMomentum)->GetVectorLength()) )
1060 iAngle = (*fAngleTable)(iMomentum)->GetVectorLength() - 1;
1062 y1 = (*(*fAngleTable)(iMomentum))(iAngle-1);
1063 y2 = (*(*fAngleTable)(iMomentum))(iAngle);
1065 x1 = (*fAngleTable)(iMomentum)->GetLowEdgeEnergy(iAngle-1);
1066 x2 = (*fAngleTable)(iMomentum)->GetLowEdgeEnergy(iAngle);
1068 if ( x1 == x2 ) randAngle = x2;
1071 if ( y1 == y2 ) randAngle = x1 + ( x2 - x1 )*
G4UniformRand();
1074 randAngle = x1 + ( position - y1 )*( x2 - x1 )/( y2 - y1 );
1113 t =
SampleT( theParticle, ptot, A);
1116 if(!(t < 0.0 || t >= 0.0))
1120 G4cout <<
"G4NuclNuclDiffuseElastic:WARNING: A = " << A
1121 <<
" mom(GeV)= " << plab/
GeV
1122 <<
" S-wave will be sampled"
1129 G4cout <<
" t= " << t <<
" tmax= " << tmax
1130 <<
" ptot= " << ptot <<
G4endl;
1143 else if( cost <= -1.0)
1150 sint = std::sqrt((1.0-cost)*(1.0+cost));
1154 G4cout <<
"cos(t)=" << cost <<
" std::sin(t)=" << sint <<
G4endl;
1156 G4ThreeVector v1(sint*std::cos(phi),sint*std::sin(phi),cost);
1197 G4double cost = std::cos(thetaCMS);
1205 else if( cost <= -1.0)
1212 sint = std::sqrt((1.0-cost)*(1.0+cost));
1216 G4cout <<
"cos(tcms)=" << cost <<
" std::sin(tcms)=" << sint <<
G4endl;
1218 G4ThreeVector v1(sint*std::cos(phi),sint*std::sin(phi),cost);
1258 G4double cost = std::cos(thetaLab);
1266 else if( cost <= -1.0)
1273 sint = std::sqrt((1.0-cost)*(1.0+cost));
1277 G4cout <<
"cos(tlab)=" << cost <<
" std::sin(tlab)=" << sint <<
G4endl;
1279 G4ThreeVector v1(sint*std::cos(phi),sint*std::sin(phi),cost);
1307 G4cout<<
"G4NuclNuclDiffuseElastic::TestAngleTable() init the element with Z = "
1308 <<Z<<
"; and A = "<<A<<
G4endl;
1310 fElementNumberVector.push_back(fAtomicNumber);
1317 G4double alpha1=0., alpha2=0., alphaMax=0., alphaCoulomb=0.;
1318 G4double deltaL10 = 0., deltaL96 = 0., deltaAG = 0.;
1319 G4double sumL10 = 0.,sumL96 = 0.,sumAG = 0.;
1326 fWaveVector = partMom/
hbarc;
1328 G4double kR = fWaveVector*fNuclearRadius;
1333 alphaMax = kRmax*kRmax/kR2;
1335 if (alphaMax > 4.) alphaMax = 4.;
1337 alphaCoulomb = kRcoul*kRcoul/kR2;
1342 fBeta = a/std::sqrt(1+a*a);
1344 fAm =
CalculateAm( partMom, fZommerfeld, fAtomicNumber);
1351 fAddCoulomb =
false;
1353 for(j = 1; j < fAngleBin; j++)
1358 alpha1 = alphaMax*(j-1)/fAngleBin;
1359 alpha2 = alphaMax*( j )/fAngleBin;
1361 if( ( alpha2 > alphaCoulomb ) &&
z ) fAddCoulomb =
true;
1366 alpha1, alpha2,epsilon);
1376 <<sumL10<<
"\t"<<sumL96<<
"\t"<<sumAG<<
G4endl;
1378 angleVector->
PutValue( j-1 , alpha1, sumL10 );
1380 fAngleTable->
insertAt(i,angleVector);
1381 fAngleBank.push_back(fAngleTable);
1406 if ( n < 0 ) legPol = 0.;
1407 else if( n == 0 ) legPol = 1.;
1408 else if( n == 1 ) legPol =
x;
1409 else if( n == 2 ) legPol = (3.*x*x-1.)/2.;
1410 else if( n == 3 ) legPol = (5.*x*x*x-3.*
x)/2.;
1411 else if( n == 4 ) legPol = (35.*x*x*x*x-30.*x*x+3.)/8.;
1412 else if( n == 5 ) legPol = (63.*x*x*x*x*x-70.*x*x*x+15.*
x)/8.;
1413 else if( n == 6 ) legPol = (231.*x*x*x*x*x*x-315.*x*x*x*x+105.*x*x-5.)/16.;
1418 legPol = std::sqrt( 2./(n*
CLHEP::pi*std::sin(theta+epsilon)) )*std::sin( (n+0.5)*theta+0.25*
CLHEP::pi );
1430 G4double n2, cofn, shny, chny, fn, gn;
1449 for( n = 1; n <= nMax; n++)
1453 cofn =
G4Exp(-0.5*n2)/(n2+twox2);
1455 chny = std::cosh(n*y);
1456 shny = std::sinh(n*y);
1458 fn = twox - twoxcos2xy*chny + n*sin2xy*shny;
1459 gn = twoxsin2xy*chny + n*cos2xy*shny;
1470 if(std::abs(x) < 0.0001)
1477 outRe +=
GetErf(x) + cof1*(1-cos2xy)/twox;
1478 outIm += cof1*sin2xy/twox;
1516 G4double sinThetaR = 2.*fHalfRutThetaTg/(1. + fHalfRutThetaTg2);
1517 G4double cosHalfThetaR2 = 1./(1. + fHalfRutThetaTg2);
1519 G4double u = std::sqrt(0.5*fProfileLambda/sinThetaR);
1521 G4double dTheta = theta - fRutherfordTheta;
1528 order /= std::sqrt(2.);
1531 G4complex a0 = 0.5*(1. + 4.*(1.+im*u2)*cosHalfThetaR2/3.)/sinThetaR;
1532 G4complex a1 = 0.5*(1. + 2.*(1.+im*u2m2p3)*cosHalfThetaR2)/sinThetaR;
1533 G4complex out = gamma*(1. - a1*dTheta) - a0;
1544 G4double sinThetaR = 2.*fHalfRutThetaTg/(1. + fHalfRutThetaTg2);
1545 G4double cosHalfThetaR2 = 1./(1. + fHalfRutThetaTg2);
1547 G4double u = std::sqrt(0.5*fProfileLambda/sinThetaR);
1549 G4double dTheta = theta - fRutherfordTheta;
1556 order /= std::sqrt(2.);
1558 G4complex a0 = 0.5*(1. + 4.*(1.+im*u2)*cosHalfThetaR2/3.)/sinThetaR;
1559 G4complex a1 = 0.5*(1. + 2.*(1.+im*u2m2p3)*cosHalfThetaR2)/sinThetaR;
1560 G4complex out = -gamma*(1. - a1*dTheta) - a0;
1576 if( theta <= fRutherfordTheta )
1596 G4double sinThetaR = 2.*fHalfRutThetaTg/(1. + fHalfRutThetaTg2);
1597 G4double dTheta = 0.5*(theta - fRutherfordTheta);
1598 G4double sindTheta = std::sin(dTheta);
1599 G4double persqrt2 = std::sqrt(0.5);
1602 order *= std::sqrt(0.5*fProfileLambda/sinThetaR)*2.*sindTheta;
1607 if ( theta <= fRutherfordTheta )
1632 for( n = 0; n < fMaxL; n++)
1636 b = ( std::sqrt(
G4double(n*(n+1)) ) )/fWaveVector;
1638 T12b = fSumSigma*
G4Exp(-b2/fNuclearRadiusSquare)/
CLHEP::pi/fNuclearRadiusSquare;
1639 shiftN = std::exp( -0.5*(1.-im*fEtaRatio)*T12b ) - 1.;
1642 out /= 2.*im*fWaveVector;
1655 G4double T12b,
a, aTemp, b2, sinThetaH = std::sin(0.5*theta);
1656 G4double sinThetaH2 = sinThetaH*sinThetaH;
1661 b2 = fWaveVector*fWaveVector*fNuclearRadiusSquare*sinThetaH2;
1665 for( n = 1; n < fMaxL; n++)
1667 T12b = aTemp*
G4Exp(-b2/n)/
n;
1693 fNuclearRadius = fNuclearRadius1 + fNuclearRadius2;
1707 fBeta = a/std::sqrt(1+a*a);
1709 fRutherfordRatio = fZommerfeld/fWaveVector;
1710 fAm =
CalculateAm( partMom, fZommerfeld, fAtomicNumber);
1715 fProfileDelta = fCofDelta*fProfileLambda;
1716 fProfileAlpha = fCofAlpha*fProfileLambda;
1742 fBeta = a/std::sqrt(1+a*a);
1744 fRutherfordRatio = fZommerfeld/fWaveVector;
1745 fAm =
CalculateAm( partMom, fZommerfeld, fAtomicNumber);
1748 fProfileDelta = fCofDelta*fProfileLambda;
1749 fProfileAlpha = fCofAlpha*fProfileLambda;
1772 fNuclearRadiusSquare = fNuclearRadius1*fNuclearRadius1+fNuclearRadius2*fNuclearRadius2;
1782 if( pN < 0. ) pN = 0.;
1785 if( tN < 0. ) tN = 0.;
1796 kR12 = fWaveVector*std::sqrt(fNuclearRadiusSquare);
1798 fMaxL = (
G4int(kR12)+1)*4;
1804 fBeta = a/std::sqrt(1+a*a);
1806 fAm =
CalculateAm( partMom, fZommerfeld, fAtomicNumber);
1835 G4double proj_energy = proj_mass + pTkin;
1836 G4double proj_momentum = std::sqrt(pTkin*(pTkin+2*proj_mass));
1851 if( proj_momentum >= 1.2 )
1855 else if( proj_momentum >= 0.6 )
1862 fEtaRatio = 15.5*proj_momentum/(27*proj_momentum*proj_momentum*proj_momentum+2);
1868 if( proj_momentum >= 10. )
1878 A0 = 100. - B0*
G4Log(3.0e7);
1880 xsection = A0 + B0*
G4Log(proj_energy) - 11
1882 0.93827*0.93827,-0.165);
1887 if(pParticle == tParticle)
1889 if( proj_momentum < 0.73 )
1893 else if( proj_momentum < 1.05 )
1895 hnXsc = 23 + 40*(
G4Log(proj_momentum/0.73))*
1896 (
G4Log(proj_momentum/0.73));
1907 if( proj_momentum < 0.8 )
1911 else if( proj_momentum < 1.4 )
1935 G4double sinThetaR = 2.*fHalfRutThetaTg/(1. + fHalfRutThetaTg2);
1936 G4double dTheta = 0.5*(theta - fRutherfordTheta);
1937 G4double sindTheta = std::sin(dTheta);
1944 order = std::abs(order);
1952 if ( theta <= fRutherfordTheta )
1954 out = 1. + 0.5*( (0.5-cosFresnel)*(0.5-cosFresnel)+(0.5-sinFresnel)*(0.5-sinFresnel) )*prof2;
1955 out += ( cosFresnel + sinFresnel - 1. )*prof;
1959 out = 0.5*( (0.5-cosFresnel)*(0.5-cosFresnel)+(0.5-sinFresnel)*(0.5-sinFresnel) )*prof2;
1972 const G4double cof[6] = { 76.18009172947146, -86.50532032941677,
1973 24.01409824083091, -1.231739572450155,
1974 0.1208650973866179e-2, -0.5395239384953e-5 } ;
1978 tmp -= (z + 0.5) * std::log(tmp);
1981 for ( j = 0; j <= 5; j++ )
1986 return -tmp + std::log(2.5066282746310005*ser);
1996 G4double modvalue, value2, fact1, fact2, arg, shift, bessel;
1998 modvalue = std::fabs(value);
2002 value2 = value*
value;
2004 fact1 = 57568490574.0 + value2*(-13362590354.0
2005 + value2*( 651619640.7
2006 + value2*(-11214424.18
2007 + value2*( 77392.33017
2008 + value2*(-184.9052456 ) ) ) ) );
2010 fact2 = 57568490411.0 + value2*( 1029532985.0
2011 + value2*( 9494680.718
2012 + value2*(59272.64853
2013 + value2*(267.8532712
2014 + value2*1.0 ) ) ) );
2016 bessel = fact1/fact2;
2024 shift = modvalue-0.785398164;
2026 fact1 = 1.0 + value2*(-0.1098628627e-2
2027 + value2*(0.2734510407e-4
2028 + value2*(-0.2073370639e-5
2029 + value2*0.2093887211e-6 ) ) );
2031 fact2 = -0.1562499995e-1 + value2*(0.1430488765e-3
2032 + value2*(-0.6911147651e-5
2033 + value2*(0.7621095161e-6
2034 - value2*0.934945152e-7 ) ) );
2036 bessel = std::sqrt(0.636619772/modvalue)*(std::cos(shift)*fact1 - arg*std::sin(shift)*fact2 );
2048 G4double modvalue, value2, fact1, fact2, arg, shift, bessel;
2050 modvalue = std::fabs(value);
2052 if ( modvalue < 8.0 )
2054 value2 = value*
value;
2056 fact1 = value*(72362614232.0 + value2*(-7895059235.0
2057 + value2*( 242396853.1
2058 + value2*(-2972611.439
2059 + value2*( 15704.48260
2060 + value2*(-30.16036606 ) ) ) ) ) );
2062 fact2 = 144725228442.0 + value2*(2300535178.0
2063 + value2*(18583304.74
2064 + value2*(99447.43394
2065 + value2*(376.9991397
2066 + value2*1.0 ) ) ) );
2067 bessel = fact1/fact2;
2075 shift = modvalue - 2.356194491;
2077 fact1 = 1.0 + value2*( 0.183105e-2
2078 + value2*(-0.3516396496e-4
2079 + value2*(0.2457520174e-5
2080 + value2*(-0.240337019e-6 ) ) ) );
2082 fact2 = 0.04687499995 + value2*(-0.2002690873e-3
2083 + value2*( 0.8449199096e-5
2084 + value2*(-0.88228987e-6
2085 + value2*0.105787412e-6 ) ) );
2087 bessel = std::sqrt( 0.636619772/modvalue)*(std::cos(shift)*fact1 - arg*std::sin(shift)*fact2);
2089 if (value < 0.0) bessel = -bessel;
G4double G4ParticleHPJENDLHEData::G4double result
G4double Legendre10(T &typeT, F f, G4double a, G4double b)
static G4Pow * GetInstance()
G4double powA(G4double A, G4double y) const
ThreeVector shoot(const G4int Ap, const G4int Af)
Hep3Vector boostVector() const
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double CalculateNuclearRad(G4double A)
G4double Legendre96(T &typeT, F f, G4double a, G4double b)
G4double GetKineticEnergy() const
G4NuclNuclDiffuseElastic()
G4double GetExpSin(G4double x)
G4double CalculateAm(G4double momentum, G4double n, G4double Z)
std::vector< ExP01TrackerHit * > a
static constexpr double millibarn
static constexpr double hbarc
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
G4double SampleTableThetaCMS(const G4ParticleDefinition *aParticle, G4double p, G4double Z, G4double A)
void PutValue(size_t index, G4double energy, G4double dataValue)
G4double GetScatteringAngle(G4int iMomentum, G4int iAngle, G4double position)
G4double DampFactor(G4double z)
G4double GetExpCos(G4double x)
G4double GetDiffElasticProb(G4double theta)
G4complex AmplitudeNear(G4double theta)
G4double GetInvCoulombElasticXsc(const G4ParticleDefinition *particle, G4double tMand, G4double momentum, G4double A, G4double Z)
G4complex PhaseNear(G4double theta)
G4complex CoulombAmplitude(G4double theta)
G4double GetErf(G4double x)
G4ParticleDefinition * GetDefinition() const
G4complex AmplitudeGla(G4double theta)
G4double GetDiffuseElasticSumXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A, G4double Z)
G4double GetCoulombElasticXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double Z)
void CalculateCoulombPhaseZero()
G4double GetLowEdgeEnergy(size_t binNumber) const
G4double GetDiffuseElasticXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A)
G4double CalculateParticleBeta(const G4ParticleDefinition *particle, G4double momentum)
static G4NistManager * Instance()
G4double SampleThetaCMS(const G4ParticleDefinition *aParticle, G4double p, G4double A)
static constexpr double twopi
G4double AdaptiveGauss(T &typeT, F f, G4double a, G4double b, G4double e)
G4double Profile(G4double theta)
G4complex AmplitudeGG(G4double theta)
G4double GetTotalMomentum() const
static constexpr double TeV
void SetMinEnergy(G4double anEnergy)
G4double CalculateCoulombPhase(G4int n)
std::complex< G4double > G4complex
G4IonTable * GetIonTable() const
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
G4double GetHadronNucleonXscNS(G4ParticleDefinition *pParticle, G4double pTkin, G4ParticleDefinition *tParticle)
static size_t GetNumberOfElements()
const XML_Char int const XML_Char * value
const G4ParticleDefinition * GetDefinition() const
void CalculateRutherfordAnglePar()
static constexpr double degree
void TestAngleTable(const G4ParticleDefinition *theParticle, G4double partMom, G4double Z, G4double A)
void InitParametersGla(const G4DynamicParticle *aParticle, G4double partMom, G4double Z, G4double A)
HepLorentzVector & boost(double, double, double)
G4double GetIntegrandFunction(G4double theta)
static G4Triton * Triton()
static G4Proton * Proton()
G4double BesselJone(G4double z)
static G4PionPlus * PionPlus()
G4double GetInvElasticXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A, G4double Z)
G4double SampleT(const G4ParticleDefinition *aParticle, G4double p, G4double A)
G4double GetDiffElasticSumProb(G4double theta)
static G4Neutron * Neutron()
virtual G4double SampleInvariantT(const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
G4complex GammaMore(G4double theta)
const G4LorentzVector & Get4Momentum() const
static G4Deuteron * Deuteron()
G4LorentzVector Get4Momentum() const
G4double ThetaCMStoThetaLab(const G4DynamicParticle *aParticle, G4double tmass, G4double thetaCMS)
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
static constexpr double GeV
void InitialiseOnFly(G4double Z, G4double A)
G4double BesselJzero(G4double z)
G4double CalculateZommerfeld(G4double beta, G4double Z1, G4double Z2)
G4double GetPDGMass() const
static G4ParticleTable * GetParticleTable()
void InitDynParameters(const G4ParticleDefinition *theParticle, G4double partMom)
G4double GetRatioGen(G4double theta)
G4complex GammaLess(G4double theta)
static G4PionMinus * PionMinus()
G4double ProfileNear(G4double theta)
G4double GetFresnelIntegrandXsc(G4double alpha)
G4double SampleTableT(const G4ParticleDefinition *aParticle, G4double p, G4double Z, G4double A)
G4double GetAtomicMassAmu(const G4String &symb) const
G4complex GetErfcInt(G4complex z)
static constexpr double GeV
void insertAt(size_t, G4PhysicsVector *)
G4complex GetErfInt(G4complex z)
void SetMaxEnergy(const G4double anEnergy)
static constexpr double MeV
G4double CalcMandelstamS(const G4double mp, const G4double mt, const G4double Plab)
static constexpr double pi
virtual ~G4NuclNuclDiffuseElastic()
G4double GetLegendrePol(G4int n, G4double x)
std::vector< G4Element * > G4ElementTable
static constexpr double fermi
static G4ElementTable * GetElementTable()
G4double GetPDGCharge() const
static const G4double alpha
G4double GetSint(G4double x)
G4complex AmplitudeSim(G4double theta)
G4double GetInvElasticSumXsc(const G4ParticleDefinition *particle, G4double tMand, G4double momentum, G4double A, G4double Z)
static constexpr double keV
G4complex GetErfComp(G4complex z, G4int nMax)
G4double ThetaLabToThetaCMS(const G4DynamicParticle *aParticle, G4double tmass, G4double thetaLab)
G4double GetDiffElasticSumProbA(G4double alpha)
G4double IntegralElasticProb(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A)
static constexpr double twopi
double epsilon(double density, double temperature)
static constexpr double pi
G4double SampleThetaLab(const G4HadProjectile *aParticle, G4double tmass, G4double A)
G4int GetBaryonNumber() const
G4double GetTotalMomentum() const
G4double GetCint(G4double x)
G4complex GammaLogarithm(G4complex xx)
G4double BesselOneByArg(G4double z)
void InitParameters(const G4ParticleDefinition *theParticle, G4double partMom, G4double Z, G4double A)