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
119 = fSumSigma = fEtaRatio = fReZ = 0.0;
122 fNuclearRadiusCof = 1.0;
132 if ( fEnergyVector ) {
133 delete fEnergyVector;
137 for ( std::vector<G4PhysicsTable*>::iterator it = fAngleBank.begin();
138 it != fAngleBank.end(); ++it ) {
139 if ( (*it) ) (*it)->clearAndDestroy();
163 for(jEl = 0 ; jEl < numOfEl; ++jEl)
165 fAtomicNumber = (*theElementTable)[jEl]->GetZ();
169 fNuclearRadius += R1;
173 G4cout<<
"G4NuclNuclDiffuseElastic::Initialise() the element: "
174 <<(*theElementTable)[jEl]->GetName()<<
G4endl;
176 fElementNumberVector.push_back(fAtomicNumber);
177 fElementNameVector.push_back((*theElementTable)[jEl]->GetName());
180 fAngleBank.push_back(fAngleTable);
195 fParticle = particle;
196 fWaveVector = momentum/hbarc;
223 if (iZ == 1 && iA == 1) theDef = theProton;
224 else if (iZ == 1 && iA == 2) theDef = theDeuteron;
226 else if (iZ == 2 && iA == 3) theDef =
G4He3::He3();
227 else if (iZ == 2 && iA == 4) theDef = theAlpha;
241 G4double cost = 1 - 0.5*std::fabs(tMand)/ptot2;
243 if( cost >= 1.0 ) cost = 1.0;
244 else if( cost <= -1.0) cost = -1.0;
246 G4double thetaCMS = std::acos(cost);
266 fParticle = particle;
267 fWaveVector = momentum/hbarc;
275 G4double kRt = fWaveVector*fNuclearRadius*theta;
278 if( z && (kRt > kRtC) )
283 fAm =
CalculateAm( momentum, fZommerfeld, fAtomicNumber);
310 if (iZ == 1 && iA == 1) theDef = theProton;
311 else if (iZ == 1 && iA == 2) theDef = theDeuteron;
313 else if (iZ == 2 && iA == 3) theDef =
G4He3::He3();
314 else if (iZ == 2 && iA == 4) theDef = theAlpha;
328 G4double cost = 1 - 0.5*std::fabs(tMand)/ptot2;
330 if( cost >= 1.0 ) cost = 1.0;
331 else if( cost <= -1.0) cost = -1.0;
333 G4double thetaCMS = std::acos(cost);
360 if (iZ == 1 && iA == 1) theDef = theProton;
361 else if (iZ == 1 && iA == 2) theDef = theDeuteron;
363 else if (iZ == 2 && iA == 3) theDef =
G4He3::He3();
364 else if (iZ == 2 && iA == 4) theDef = theAlpha;
378 G4double cost = 1 - 0.5*std::fabs(tMand)/ptot2;
380 if( cost >= 1.0 ) cost = 1.0;
381 else if( cost <= -1.0) cost = -1.0;
383 G4double thetaCMS = std::acos(cost);
403 G4double sigma, bzero, bzero2, bonebyarg, bonebyarg2, damp, damp2;
411 G4double kr = fWaveVector*fNuclearRadius;
416 bzero2 = bzero*bzero;
420 bonebyarg2 = bonebyarg*bonebyarg;
435 diffuse = 0.63*fermi;
437 delta = 0.1*fermi*fermi;
445 G4double kgamma = lambda*(1.-
G4Exp(-fWaveVector*gamma/lambda));
452 G4double pikdt = lambda*(1.-
G4Exp(-pi*fWaveVector*diffuse*theta/lambda));
457 G4double mode2k2 = (e1*e1+e2*e2)*fWaveVector*fWaveVector;
458 G4double e2dk3t = -2.*e2*delta*fWaveVector*fWaveVector*fWaveVector*theta;
464 sigma += mode2k2*bone2 + e2dk3t*bzero*bone;
465 sigma += kr2*bonebyarg2;
483 G4double sigma, bzero, bzero2, bonebyarg, bonebyarg2, damp, damp2;
491 G4double kr = fWaveVector*fNuclearRadius;
496 bzero2 = bzero*bzero;
500 bonebyarg2 = bonebyarg*bonebyarg;
502 if (fParticle == theProton)
504 diffuse = 0.63*fermi;
507 delta = 0.1*fermi*fermi;
513 diffuse = 0.63*fermi;
515 delta = 0.1*fermi*fermi;
521 G4double kgamma = lambda*(1.-
G4Exp(-fWaveVector*gamma/lambda));
527 G4double sinHalfTheta = std::sin(0.5*theta);
528 G4double sinHalfTheta2 = sinHalfTheta*sinHalfTheta;
530 kgamma += 0.5*fZommerfeld/kr/(sinHalfTheta2+fAm);
541 G4double pikdt = lambda*(1.-
G4Exp(-pi*fWaveVector*diffuse*theta/lambda));
548 G4double mode2k2 = (e1*e1+e2*e2)*fWaveVector*fWaveVector;
549 G4double e2dk3t = -2.*e2*delta*fWaveVector*fWaveVector*fWaveVector*theta;
554 sigma += mode2k2*bone2;
555 sigma += e2dk3t*bzero*bone;
558 sigma += kr2*bonebyarg2;
576 theta = std::sqrt(alpha);
580 G4double sigma, bzero, bzero2, bonebyarg, bonebyarg2, damp, damp2;
588 G4double kr = fWaveVector*fNuclearRadius;
593 bzero2 = bzero*bzero;
597 bonebyarg2 = bonebyarg*bonebyarg;
599 if (fParticle == theProton)
601 diffuse = 0.63*fermi;
604 delta = 0.1*fermi*fermi;
610 diffuse = 0.63*fermi;
612 delta = 0.1*fermi*fermi;
618 G4double kgamma = lambda*(1.-
G4Exp(-fWaveVector*gamma/lambda));
625 G4double sinHalfTheta2 = sinHalfTheta*sinHalfTheta;
627 kgamma += 0.5*fZommerfeld/kr/(sinHalfTheta2+fAm);
638 G4double pikdt = lambda*(1.-
G4Exp(-pi*fWaveVector*diffuse*theta/lambda));
645 G4double mode2k2 = (e1*e1+e2*e2)*fWaveVector*fWaveVector;
646 G4double e2dk3t = -2.*e2*delta*fWaveVector*fWaveVector*fWaveVector*theta;
651 sigma += mode2k2*bone2;
652 sigma += e2dk3t*bzero*bone;
655 sigma += kr2*bonebyarg2;
690 fParticle = particle;
691 fWaveVector = momentum/hbarc;
713 G4double t = 2*p*p*( 1 - std::cos(theta) );
727 G4double norm, theta1, theta2, thetaMax;
730 fParticle = particle;
731 fWaveVector = momentum/hbarc;
736 thetaMax = 10.174/fWaveVector/fNuclearRadius;
738 if (thetaMax > pi) thetaMax = pi;
747 for(i = 1; i <= iMax; i++)
749 theta1 = (i-1)*thetaMax/iMax;
750 theta2 = i*thetaMax/iMax;
755 result = 0.5*(theta1 + theta2);
759 if (i > iMax ) result = 0.5*(theta1 + theta2);
763 result += G4RandGauss::shoot(0.,sigma);
765 if(result < 0.) result = 0.;
766 if(result > thetaMax) result = thetaMax;
781 fParticle = aParticle;
786 G4double totElab = std::sqrt(m1*m1+p*p);
818 fNuclearRadius += R1;
822 fCoulombMuC = fHalfRutThetaTg2/(1.+fHalfRutThetaTg2);
828 mu = fCoulombMuC*rand*fAm;
829 mu /= fAm + fCoulombMuC*( 1. - rand );
859 std::size_t iElement;
860 G4int iMomentum, iAngle;
864 for(iElement = 0; iElement < fElementNumberVector.size(); iElement++)
866 if( std::fabs(Z - fElementNumberVector[iElement]) < 0.5)
break;
868 if ( iElement == fElementNumberVector.size() )
880 fAngleTable = fAngleBank[iElement];
882 G4double kinE = std::sqrt(momentum*momentum + m1*m1) - m1;
884 for( iMomentum = 0; iMomentum < fEnergyBin; iMomentum++)
888 if( kinE < fEnergyVector->GetLowEdgeEnergy(iMomentum) )
break;
893 if ( iMomentum >= fEnergyBin ) iMomentum = fEnergyBin-1;
894 if ( iMomentum < 0 ) iMomentum = 0;
897 if (iMomentum == fEnergyBin -1 || iMomentum == 0 )
903 for(iAngle = 0; iAngle < fAngleBin-1; iAngle++)
905 if(
position < (*(*fAngleTable)(iMomentum))(iAngle) )
break;
907 if (iAngle >= fAngleBin-1) iAngle = fAngleBin-2;
922 for(iAngle = 0; iAngle < fAngleBin-1; iAngle++)
925 if(
position > (*(*fAngleTable)(iMomentum))(iAngle) )
break;
927 if (iAngle >= fAngleBin-1) iAngle = fAngleBin-2;
945 for(iAngle = 0; iAngle < fAngleBin-1; iAngle++)
948 if(
position > (*(*fAngleTable)(iMomentum))(iAngle) )
break;
950 if (iAngle >= fAngleBin-1) iAngle = fAngleBin-2;
964 randAngle = W1*theta1 + W2*theta2;
991 G4cout<<
"G4NuclNuclDiffuseElastic::Initialise() the element with Z = "
994 fElementNumberVector.push_back(fAtomicNumber);
998 fAngleBank.push_back(fAngleTable);
1012 G4double alpha1,
alpha2, alphaMax, alphaCoulomb, delta = 0., sum = 0.;
1020 for( i = 0; i < fEnergyBin; i++)
1027 partMom = std::sqrt( kinE*(kinE + 2*m1) );
1031 alphaMax = fRutherfordTheta*fCofAlphaMax;
1033 if(alphaMax > pi) alphaMax = pi;
1038 alphaCoulomb = fRutherfordTheta*fCofAlphaCoulomb;
1046 G4double delth = (alphaMax-alphaCoulomb)/fAngleBin;
1054 for(j = fAngleBin-1; j >= 1; j--)
1062 alpha1 = alphaCoulomb + delth*(j-1);
1071 angleVector->
PutValue( j-1 , alpha1, sum );
1074 fAngleTable->insertAt(i,angleVector);
1089 G4double x1, x2, y1, y2, randAngle;
1093 randAngle = (*fAngleTable)(iMomentum)->GetLowEdgeEnergy(iAngle);
1098 if ( iAngle >=
G4int((*fAngleTable)(iMomentum)->GetVectorLength()) )
1100 iAngle =
G4int((*fAngleTable)(iMomentum)->GetVectorLength() - 1);
1102 y1 = (*(*fAngleTable)(iMomentum))(iAngle-1);
1103 y2 = (*(*fAngleTable)(iMomentum))(iAngle);
1105 x1 = (*fAngleTable)(iMomentum)->GetLowEdgeEnergy(iAngle-1);
1106 x2 = (*fAngleTable)(iMomentum)->GetLowEdgeEnergy(iAngle);
1108 if ( x1 == x2 ) randAngle = x2;
1111 if ( y1 == y2 ) randAngle = x1 + ( x2 - x1 )*
G4UniformRand();
1114 randAngle = x1 + (
position - y1 )*( x2 - x1 )/( y2 - y1 );
1153 t =
SampleT( theParticle, ptot,
A);
1156 if(!(t < 0.0 || t >= 0.0))
1160 G4cout <<
"G4NuclNuclDiffuseElastic:WARNING: A = " <<
A
1161 <<
" mom(GeV)= " << plab/GeV
1162 <<
" S-wave will be sampled"
1169 G4cout <<
" t= " << t <<
" tmax= " << tmax
1170 <<
" ptot= " << ptot <<
G4endl;
1183 else if( cost <= -1.0)
1190 sint = std::sqrt((1.0-cost)*(1.0+cost));
1194 G4cout <<
"cos(t)=" << cost <<
" std::sin(t)=" << sint <<
G4endl;
1196 G4ThreeVector v1(sint*std::cos(phi),sint*std::sin(phi),cost);
1237 G4double cost = std::cos(thetaCMS);
1245 else if( cost <= -1.0)
1252 sint = std::sqrt((1.0-cost)*(1.0+cost));
1256 G4cout <<
"cos(tcms)=" << cost <<
" std::sin(tcms)=" << sint <<
G4endl;
1258 G4ThreeVector v1(sint*std::cos(phi),sint*std::sin(phi),cost);
1298 G4double cost = std::cos(thetaLab);
1306 else if( cost <= -1.0)
1313 sint = std::sqrt((1.0-cost)*(1.0+cost));
1317 G4cout <<
"cos(tlab)=" << cost <<
" std::sin(tlab)=" << sint <<
G4endl;
1319 G4ThreeVector v1(sint*std::cos(phi),sint*std::sin(phi),cost);
1347 G4cout<<
"G4NuclNuclDiffuseElastic::TestAngleTable() init the element with Z = "
1350 fElementNumberVector.push_back(fAtomicNumber);
1358 G4double deltaL10 = 0., deltaL96 = 0., deltaAG = 0.;
1359 G4double sumL10 = 0.,sumL96 = 0.,sumAG = 0.;
1366 fWaveVector = partMom/hbarc;
1368 G4double kR = fWaveVector*fNuclearRadius;
1373 alphaMax = kRmax*kRmax/kR2;
1375 if (alphaMax > 4.) alphaMax = 4.;
1377 alphaCoulomb = kRcoul*kRcoul/kR2;
1382 fBeta = a/std::sqrt(1+a*a);
1384 fAm =
CalculateAm( partMom, fZommerfeld, fAtomicNumber);
1391 fAddCoulomb =
false;
1393 for(j = 1; j < fAngleBin; j++)
1398 alpha1 = alphaMax*(j-1)/fAngleBin;
1399 alpha2 = alphaMax*( j )/fAngleBin;
1401 if( (
alpha2 > alphaCoulomb ) && z ) fAddCoulomb =
true;
1415 G4cout<<alpha1<<
"\t"<<std::sqrt(alpha1)/degree<<
"\t"
1416 <<sumL10<<
"\t"<<sumL96<<
"\t"<<sumAG<<
G4endl;
1418 angleVector->
PutValue( j-1 , alpha1, sumL10 );
1420 fAngleTable->insertAt(i,angleVector);
1421 fAngleBank.push_back(fAngleTable);
1446 if ( n < 0 ) legPol = 0.;
1447 else if( n == 0 ) legPol = 1.;
1448 else if( n == 1 ) legPol = x;
1449 else if( n == 2 ) legPol = (3.*x*x-1.)/2.;
1450 else if( n == 3 ) legPol = (5.*x*x*x-3.*x)/2.;
1451 else if( n == 4 ) legPol = (35.*x*x*x*x-30.*x*x+3.)/8.;
1452 else if( n == 5 ) legPol = (63.*x*x*x*x*x-70.*x*x*x+15.*x)/8.;
1453 else if( n == 6 ) legPol = (231.*x*x*x*x*x*x-315.*x*x*x*x+105.*x*x-5.)/16.;
1458 legPol = std::sqrt( 2./(n*CLHEP::pi*std::sin(theta+
epsilon)) )*std::sin( (n+0.5)*theta+0.25*CLHEP::pi );
1470 G4double n2, cofn, shny, chny, fn, gn;
1489 for( n = 1; n <= nMax; n++)
1493 cofn =
G4Exp(-0.5*n2)/(n2+twox2);
1495 chny = std::cosh(n*y);
1496 shny = std::sinh(n*y);
1498 fn = twox - twoxcos2xy*chny + n*sin2xy*shny;
1499 gn = twoxsin2xy*chny + n*cos2xy*shny;
1510 if(std::abs(x) < 0.0001)
1517 outRe +=
GetErf(x) + cof1*(1-cos2xy)/twox;
1518 outIm += cof1*sin2xy/twox;
1541 outRe *= 2./std::sqrt(CLHEP::pi);
1542 outIm *= 2./std::sqrt(CLHEP::pi);
1556 G4double sinThetaR = 2.*fHalfRutThetaTg/(1. + fHalfRutThetaTg2);
1557 G4double cosHalfThetaR2 = 1./(1. + fHalfRutThetaTg2);
1559 G4double u = std::sqrt(0.5*fProfileLambda/sinThetaR);
1560 G4double kappa = u/std::sqrt(CLHEP::pi);
1561 G4double dTheta = theta - fRutherfordTheta;
1568 order /= std::sqrt(2.);
1571 G4complex a0 = 0.5*(1. + 4.*(1.+im*u2)*cosHalfThetaR2/3.)/sinThetaR;
1572 G4complex a1 = 0.5*(1. + 2.*(1.+im*u2m2p3)*cosHalfThetaR2)/sinThetaR;
1584 G4double sinThetaR = 2.*fHalfRutThetaTg/(1. + fHalfRutThetaTg2);
1585 G4double cosHalfThetaR2 = 1./(1. + fHalfRutThetaTg2);
1587 G4double u = std::sqrt(0.5*fProfileLambda/sinThetaR);
1588 G4double kappa = u/std::sqrt(CLHEP::pi);
1589 G4double dTheta = theta - fRutherfordTheta;
1596 order /= std::sqrt(2.);
1598 G4complex a0 = 0.5*(1. + 4.*(1.+im*u2)*cosHalfThetaR2/3.)/sinThetaR;
1599 G4complex a1 = 0.5*(1. + 2.*(1.+im*u2m2p3)*cosHalfThetaR2)/sinThetaR;
1611 G4double kappa = std::sqrt(0.5*fProfileLambda/std::sin(theta)/CLHEP::pi);
1616 if( theta <= fRutherfordTheta )
1636 G4double sinThetaR = 2.*fHalfRutThetaTg/(1. + fHalfRutThetaTg2);
1637 G4double dTheta = 0.5*(theta - fRutherfordTheta);
1638 G4double sindTheta = std::sin(dTheta);
1639 G4double persqrt2 = std::sqrt(0.5);
1642 order *= std::sqrt(0.5*fProfileLambda/sinThetaR)*2.*sindTheta;
1647 if ( theta <= fRutherfordTheta )
1672 for( n = 0; n < fMaxL; n++)
1676 b = ( std::sqrt(
G4double(n*(n+1)) ) )/fWaveVector;
1678 T12b = fSumSigma*
G4Exp(-b2/fNuclearRadiusSquare)/CLHEP::pi/fNuclearRadiusSquare;
1679 shiftN = std::exp( -0.5*(1.-im*fEtaRatio)*T12b ) - 1.;
1682 out /= 2.*im*fWaveVector;
1695 G4double T12b, a, aTemp, b2, sinThetaH = std::sin(0.5*theta);
1696 G4double sinThetaH2 = sinThetaH*sinThetaH;
1700 a = -fSumSigma/CLHEP::twopi/fNuclearRadiusSquare;
1701 b2 = fWaveVector*fWaveVector*fNuclearRadiusSquare*sinThetaH2;
1705 for( n = 1; n < fMaxL; n++)
1707 T12b = aTemp*
G4Exp(-b2/n)/n;
1712 out *= -4.*im*fWaveVector/CLHEP::pi;
1733 fNuclearRadius = fNuclearRadius1 + fNuclearRadius2;
1739 fWaveVector = partMom/CLHEP::hbarc;
1741 G4double lambda = fCofLambda*fWaveVector*fNuclearRadius;
1747 fBeta = a/std::sqrt(1+a*a);
1749 fRutherfordRatio = fZommerfeld/fWaveVector;
1750 fAm =
CalculateAm( partMom, fZommerfeld, fAtomicNumber);
1753 fProfileLambda = lambda;
1755 fProfileDelta = fCofDelta*fProfileLambda;
1756 fProfileAlpha = fCofAlpha*fProfileLambda;
1775 fWaveVector = partMom/CLHEP::hbarc;
1777 G4double lambda = fCofLambda*fWaveVector*fNuclearRadius;
1782 fBeta = a/std::sqrt(1+a*a);
1784 fRutherfordRatio = fZommerfeld/fWaveVector;
1785 fAm =
CalculateAm( partMom, fZommerfeld, fAtomicNumber);
1787 fProfileLambda = lambda;
1788 fProfileDelta = fCofDelta*fProfileLambda;
1789 fProfileAlpha = fCofAlpha*fProfileLambda;
1812 fNuclearRadiusSquare = fNuclearRadius1*fNuclearRadius1+fNuclearRadius2*fNuclearRadius2;
1819 fWaveVector = partMom/CLHEP::hbarc;
1822 if( pN < 0. ) pN = 0.;
1825 if( tN < 0. ) tN = 0.;
1834 G4cout<<
"fSumSigma = "<<fSumSigma/CLHEP::millibarn<<
" mb"<<
G4endl;
1835 G4cout<<
"pi*R2 = "<<CLHEP::pi*fNuclearRadiusSquare/CLHEP::millibarn<<
" mb"<<
G4endl;
1836 kR12 = fWaveVector*std::sqrt(fNuclearRadiusSquare);
1838 fMaxL = (
G4int(kR12)+1)*4;
1844 fBeta = a/std::sqrt(1+a*a);
1846 fAm =
CalculateAm( partMom, fZommerfeld, fAtomicNumber);
1875 G4double proj_energy = proj_mass + pTkin;
1876 G4double proj_momentum = std::sqrt(pTkin*(pTkin+2*proj_mass));
1880 sMand /= CLHEP::GeV*CLHEP::GeV;
1881 proj_momentum /= CLHEP::GeV;
1882 proj_energy /= CLHEP::GeV;
1883 proj_mass /= CLHEP::GeV;
1891 if( proj_momentum >= 1.2 )
1895 else if( proj_momentum >= 0.6 )
1902 fEtaRatio = 15.5*proj_momentum/(27*proj_momentum*proj_momentum*proj_momentum+2);
1908 if( proj_momentum >= 10. )
1918 A0 = 100. - B0*
G4Log(3.0e7);
1920 xsection = A0 + B0*
G4Log(proj_energy) - 11
1922 0.93827*0.93827,-0.165);
1927 if(pParticle == tParticle)
1929 if( proj_momentum < 0.73 )
1933 else if( proj_momentum < 1.05 )
1935 hnXsc = 23 + 40*(
G4Log(proj_momentum/0.73))*
1936 (
G4Log(proj_momentum/0.73));
1947 if( proj_momentum < 0.8 )
1951 else if( proj_momentum < 1.4 )
1964 xsection *= CLHEP::millibarn;
1965 G4cout<<
"xsection = "<<xsection/CLHEP::millibarn<<
" mb"<<
G4endl;
1975 G4double sinThetaR = 2.*fHalfRutThetaTg/(1. + fHalfRutThetaTg2);
1976 G4double dTheta = 0.5*(theta - fRutherfordTheta);
1977 G4double sindTheta = std::sin(dTheta);
1982 G4double order = std::sqrt(fProfileLambda/sinThetaR/CLHEP::pi)*2.*sindTheta;
1984 order = std::abs(order);
1992 if ( theta <= fRutherfordTheta )
1994 out = 1. + 0.5*( (0.5-cosFresnel)*(0.5-cosFresnel)+(0.5-sinFresnel)*(0.5-sinFresnel) )*prof2;
1995 out += ( cosFresnel + sinFresnel - 1. )*prof;
1999 out = 0.5*( (0.5-cosFresnel)*(0.5-cosFresnel)+(0.5-sinFresnel)*(0.5-sinFresnel) )*prof2;
2012 const G4double cof[6] = { 76.18009172947146, -86.50532032941677,
2013 24.01409824083091, -1.231739572450155,
2014 0.1208650973866179e-2, -0.5395239384953e-5 } ;
2018 tmp -= (z + 0.5) * std::log(tmp);
2021 for ( j = 0; j <= 5; j++ )
2026 return -tmp + std::log(2.5066282746310005*ser);
2036 G4double modvalue, value2, fact1, fact2, arg, shift, bessel;
2038 modvalue = std::fabs(value);
2040 if ( value < 8.0 && value > -8.0 )
2042 value2 = value*value;
2044 fact1 = 57568490574.0 + value2*(-13362590354.0
2045 + value2*( 651619640.7
2046 + value2*(-11214424.18
2047 + value2*( 77392.33017
2048 + value2*(-184.9052456 ) ) ) ) );
2050 fact2 = 57568490411.0 + value2*( 1029532985.0
2051 + value2*( 9494680.718
2052 + value2*(59272.64853
2053 + value2*(267.8532712
2054 + value2*1.0 ) ) ) );
2056 bessel = fact1/fact2;
2064 shift = modvalue-0.785398164;
2066 fact1 = 1.0 + value2*(-0.1098628627e-2
2067 + value2*(0.2734510407e-4
2068 + value2*(-0.2073370639e-5
2069 + value2*0.2093887211e-6 ) ) );
2071 fact2 = -0.1562499995e-1 + value2*(0.1430488765e-3
2072 + value2*(-0.6911147651e-5
2073 + value2*(0.7621095161e-6
2074 - value2*0.934945152e-7 ) ) );
2076 bessel = std::sqrt(0.636619772/modvalue)*(std::cos(shift)*fact1 - arg*std::sin(shift)*fact2 );
2088 G4double modvalue, value2, fact1, fact2, arg, shift, bessel;
2090 modvalue = std::fabs(value);
2092 if ( modvalue < 8.0 )
2094 value2 = value*value;
2096 fact1 = value*(72362614232.0 + value2*(-7895059235.0
2097 + value2*( 242396853.1
2098 + value2*(-2972611.439
2099 + value2*( 15704.48260
2100 + value2*(-30.16036606 ) ) ) ) ) );
2102 fact2 = 144725228442.0 + value2*(2300535178.0
2103 + value2*(18583304.74
2104 + value2*(99447.43394
2105 + value2*(376.9991397
2106 + value2*1.0 ) ) ) );
2107 bessel = fact1/fact2;
2115 shift = modvalue - 2.356194491;
2117 fact1 = 1.0 + value2*( 0.183105e-2
2118 + value2*(-0.3516396496e-4
2119 + value2*(0.2457520174e-5
2120 + value2*(-0.240337019e-6 ) ) ) );
2122 fact2 = 0.04687499995 + value2*(-0.2002690873e-3
2123 + value2*( 0.8449199096e-5
2124 + value2*(-0.88228987e-6
2125 + value2*0.105787412e-6 ) ) );
2127 bessel = std::sqrt( 0.636619772/modvalue)*(std::cos(shift)*fact1 - arg*std::sin(shift)*fact2);
2129 if (value < 0.0) bessel = -bessel;
G4double epsilon(G4double density, G4double temperature)
std::vector< G4Element * > G4ElementTable
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double G4Log(G4double x)
std::complex< G4double > G4complex
G4GLOB_DLL std::ostream G4cout
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
static G4Deuteron * Deuteron()
G4ParticleDefinition * GetDefinition() const
G4LorentzVector Get4Momentum() const
G4double GetKineticEnergy() const
G4double GetTotalMomentum() const
static G4ElementTable * GetElementTable()
static size_t GetNumberOfElements()
G4double GetTotalMomentum() const
const G4ParticleDefinition * GetDefinition() const
const G4LorentzVector & Get4Momentum() const
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
G4double GetMaxEnergy() const
static G4HadronicParameters * Instance()
G4double Legendre96(T &typeT, F f, G4double a, G4double b)
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
static G4Neutron * Neutron()
static G4NistManager * Instance()
G4double GetAtomicMassAmu(const G4String &symb) const
G4double CalcMandelstamS(const G4double mp, const G4double mt, const G4double Plab)
G4double GetInvElasticXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A, G4double Z)
G4double ThetaLabToThetaCMS(const G4DynamicParticle *aParticle, G4double tmass, G4double thetaLab)
G4double CalculateZommerfeld(G4double beta, G4double Z1, G4double Z2)
G4double SampleThetaLab(const G4HadProjectile *aParticle, G4double tmass, G4double A)
G4double CalculateParticleBeta(const G4ParticleDefinition *particle, G4double momentum)
void TestAngleTable(const G4ParticleDefinition *theParticle, G4double partMom, G4double Z, G4double A)
G4double GetRatioGen(G4double theta)
G4double Profile(G4double theta)
G4complex AmplitudeSim(G4double theta)
G4double GetDiffElasticSumProb(G4double theta)
G4double GetInvCoulombElasticXsc(const G4ParticleDefinition *particle, G4double tMand, G4double momentum, G4double A, G4double Z)
void InitialiseOnFly(G4double Z, G4double A)
G4NuclNuclDiffuseElastic()
G4double BesselJzero(G4double z)
G4double GetCoulombElasticXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double Z)
G4complex AmplitudeGla(G4double theta)
virtual ~G4NuclNuclDiffuseElastic()
G4complex GetErfComp(G4complex z, G4int nMax)
G4double CalculateCoulombPhase(G4int n)
G4double GetInvElasticSumXsc(const G4ParticleDefinition *particle, G4double tMand, G4double momentum, G4double A, G4double Z)
G4double GetLegendrePol(G4int n, G4double x)
G4double GetIntegrandFunction(G4double theta)
G4complex AmplitudeNear(G4double theta)
G4complex AmplitudeGG(G4double theta)
G4double GetSint(G4double x)
G4double GetHadronNucleonXscNS(G4ParticleDefinition *pParticle, G4double pTkin, G4ParticleDefinition *tParticle)
G4double IntegralElasticProb(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A)
G4double ProfileNear(G4double theta)
G4double SampleTableThetaCMS(const G4ParticleDefinition *aParticle, G4double p, G4double Z, G4double A)
G4complex GetErfInt(G4complex z)
G4double SampleT(const G4ParticleDefinition *aParticle, G4double p, G4double A)
void CalculateRutherfordAnglePar()
G4double GetCint(G4double x)
void InitParametersGla(const G4DynamicParticle *aParticle, G4double partMom, G4double Z, G4double A)
G4double BesselOneByArg(G4double z)
G4complex PhaseNear(G4double theta)
G4complex GammaLogarithm(G4complex xx)
G4double GetDiffuseElasticSumXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A, G4double Z)
G4complex CoulombAmplitude(G4double theta)
G4double GetScatteringAngle(G4int iMomentum, G4int iAngle, G4double position)
G4double GetDiffElasticSumProbA(G4double alpha)
void CalculateCoulombPhaseZero()
G4double ThetaCMStoThetaLab(const G4DynamicParticle *aParticle, G4double tmass, G4double thetaCMS)
G4double SampleTableT(const G4ParticleDefinition *aParticle, G4double p, G4double Z, G4double A)
G4double SampleThetaCMS(const G4ParticleDefinition *aParticle, G4double p, G4double A)
G4double GetExpSin(G4double x)
G4double BesselJone(G4double z)
void InitDynParameters(const G4ParticleDefinition *theParticle, G4double partMom)
G4double CalculateNuclearRad(G4double A)
void InitParameters(const G4ParticleDefinition *theParticle, G4double partMom, G4double Z, G4double A)
G4complex GetErfcInt(G4complex z)
G4double GetDiffuseElasticXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A)
virtual G4double SampleInvariantT(const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
G4double GetFresnelIntegrandXsc(G4double alpha)
G4double GetExpCos(G4double x)
G4double GetErf(G4double x)
G4double SampleCoulombMuCMS(const G4ParticleDefinition *aParticle, G4double p)
G4double DampFactor(G4double z)
G4complex GammaMore(G4double theta)
G4double GetDiffElasticProb(G4double theta)
G4double CalculateAm(G4double momentum, G4double n, G4double Z)
G4complex GammaLess(G4double theta)
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double GetPDGMass() const
G4double GetPDGCharge() const
G4int GetBaryonNumber() const
G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()
void PutValue(const std::size_t index, const G4double e, const G4double value)
G4double GetLowEdgeEnergy(const std::size_t index) const
static G4PionMinus * PionMinus()
static G4PionPlus * PionPlus()
static G4Pow * GetInstance()
G4double powA(G4double A, G4double y) const
static G4Proton * Proton()
static G4Triton * Triton()