306 static const G4double bbbh = 202.4 ;
307 static const G4double g1tf = 1.95e-5 ;
308 static const G4double g2tf = 5.3e-5 ;
309 static const G4double g1h = 4.4e-5 ;
310 static const G4double g2h = 4.8e-5 ;
316 G4double residEnergy = totalEnergy - pairEnergy;
321 G4double a0 = 1.0 / (totalEnergy * residEnergy);
322 G4double alf = 4.0 * electron_mass_c2 / pairEnergy;
325 G4double tmnexp = alf/(1.0 + rt) + delta*rt;
327 if(tmnexp >= 1.0) {
return 0.0; }
332 G4double massratio2 = massratio*massratio;
333 G4double inv_massratio2 = 1.0 / massratio2;
337 if( Z < 1.5 ) { bbb = bbbh ; g1 = g1h ; g2 = g2h ; }
338 else { bbb = bbbtf; g1 = g1tf; g2 = g2tf; }
345 if (z1exp > 35.221047195922)
348 zeta = (0.073 *
G4Log(z1exp) - 0.26) / (0.058 *
G4Log(z2exp) - 0.14);
366 rho2[i] = rho[i] * rho[i];
367 xi[i] = xi0*(1.0-rho2[i]);
368 xi1[i] = 1.0 + xi[i];
369 xii[i] = 1.0 / xi[i];
380 G4double yeu = (b40 + 5.0) + (b40 - 1.0) * rho2[i];
381 G4double yed = b62*
G4Log(3.0 + xii[i]) + (2.0 * beta - 1.0)*rho2[i] - b40;
383 G4double ymu = b62 * (1.0 + rho2[i]) + 6.0;
384 G4double ymd = (b40 + 3.0)*(1.0 + rho2[i])*
G4Log(3.0 + xi[i])
385 + 2.0 - 3.0 * rho2[i];
387 ye1[i] = 1.0 + yeu / yed;
388 ym1[i] = 1.0 + ymu / ymd;
395 if(xi[i] <= 1000.0) {
396 be[i] = ((2.0 + rho2[i])*(1.0 + beta) +
397 xi[i]*(3.0 + rho2[i]))*
G4Log(1.0 + xii[i]) +
398 (1.0 - rho2[i] - beta)/xi1[i] - (3.0 + rho2[i]);
400 be[i] = 0.5*(3.0 - rho2[i] + 2.0*beta*(1.0 + rho2[i]))*xii[i];
404 G4double a10 = (1.0 + 2.0 * beta) * (1.0 - rho2[i]);
405 bm[i] = ((1.0 + rho2[i])*(1.0 + 1.5 * beta) - a10*xii[i])*
G4Log(xi1[i]) +
406 xi[i] * (1.0 - rho2[i] - beta)/xi1[i] + a10;
408 bm[i] = 0.5*(5.0 - rho2[i] + beta * (3.0 + rho2[i]))*xi[i];
415 G4double screen = screen0*xi1[i]/(1.0 - rho2[i]);
416 G4double ale =
G4Log(bbb/
z13*std::sqrt(xi1[i]*ye1[i])/(1. + screen*ye1[i]));
420 fe = std::max(
fe, 0.0);
423 G4double fm = std::max(alm_crm*bm[i], 0.0)*inv_massratio2;
425 sum +=
wgi[i]*(1.0 + rho[i])*(
fe + fm);
428 return -tmn*sum*
factorForCross*z2*residEnergy/(totalEnergy*pairEnergy);
532 G4double eMass = CLHEP::electron_mass_c2;
549 G4double mingEnergy = std::sqrt(Q2);
551 G4double intervalgEnergy = maxgEnergy - mingEnergy;
557 G4double gMomentum = std::sqrt(gEnergy*gEnergy - Q2);
560 G4double particleFinalEnergy = kinEnergy - gEnergy;
561 G4double particleFinalMomentum = std::sqrt(particleFinalEnergy*particleFinalEnergy -
579 G4double maxEnergy = std::min(tmax, maxPairEnergy);
582 if (minEnergy >= maxEnergy) {
return; }
604 G4int iz1(0), iz2(0);
611 if(iz > 0) { iz1 = iz-1; }
616 if (0 == iz1) { iz1 = iz2 =
NZDATPAIR-1; }
633 x += (x2 - x)*(
lnZ - lz1)/(lz2 - lz1);
636 pairEnergy = kinEnergy*
G4Exp(x*coeff);
639 }
while((pairEnergy < minEnergy || pairEnergy > maxEnergy) && 50 > count);
645 fAngularGenerator->PhiRotation(partDirection, phi3);
652 G4double A1 = -(Q2 - 2.*kinEnergy*gEnergy);
653 G4double B1 = -(2.*gMomentum*particleMomentum);
657 G4double sintg = std::sqrt((1.0 - costg)*(1.0 + costg));
663 dirGamma.
set(sintg*cospg, sintg*sinpg, costg);
666 G4double Ap = particleMomentum*particleMomentum +
667 particleFinalMomentum*particleFinalMomentum + gMomentum*gMomentum;
668 G4double A = Ap - 2.*particleMomentum*gMomentum*costg;
669 G4double B = 2.*particleMomentum*gMomentum*sintg*cospg;
670 G4double C = 2.*particleFinalMomentum*gMomentum*costg -
671 2.*particleMomentum*particleFinalMomentum;
673 G4double t1interval = (1./(
A +
C + absB*mint3) - 1./(
A +
C + absB*maxt3))/absB;
680 partDirection.
set(sint1, 0., cost1);
681 fAngularGenerator->PhiRotation(partDirection, Phi);
682 kinEnergy = particleFinalEnergy;
687 G4LorentzVector eFourMomentumMQ = fAngularGenerator->eDP2(Q2, eMass2, eMass2, cost5, phi5);
688 G4LorentzVector pFourMomentumMQ = fAngularGenerator->pDP2(eMass2, eFourMomentumMQ);
693 eEnergy = eFourMomentum.
t();
694 pEnergy = pFourMomentum.
t();
697 G4double A3 = Q2 + 2.*gEnergy*particleFinalEnergy;
698 G4double B3 = -2.*gMomentum*particleFinalMomentum;
704 G4double sintQ3 = std::sqrt(1. - tQMG*tQMG);
708 G4double Ap = particleMomentum*particleMomentum +
709 particleFinalMomentum*particleFinalMomentum + gMomentum*gMomentum;
710 G4double A = Ap + 2.*particleFinalMomentum*gMomentum*tQMG;
711 G4double B = -2.*particleMomentum*gMomentum*sintQ3*cospQP;
712 G4double C = -2.*particleMomentum*gMomentum*tQMG - 2.*particleMomentum*particleFinalMomentum;
715 G4double t3interval = (1./(
A +
C + absB*mint3) - 1./(
A +
C + absB*maxt3))/absB;
720 G4double cost = -sint3*sintQ3*cospQP + cost3*tQMG;
721 G4double sint = std::sqrt((1. + cost)*(1. - cost));
722 G4double cosp = (sintQ3*cospQP*cost3 + sint3*tQMG)/sint;
726 dirGamma.
set(sint*cosp, sint*sinp, cost);
731 partDirection.
set(sint3, 0., cost3);
732 fAngularGenerator->PhiRotation(partDirection, Phi);
733 kinEnergy = particleFinalEnergy;
738 G4LorentzVector eFourMomentumMQ = fAngularGenerator->eDP2(Q2, eMass2, eMass2, cost5, phi5);
739 G4LorentzVector pFourMomentumMQ = fAngularGenerator->pDP2(eMass2, eFourMomentumMQ);
744 eEnergy = eFourMomentum.
t();
745 pEnergy = pFourMomentum.
t();
752 particleFinalMomentum = std::sqrt(particleFinalEnergy*particleFinalEnergy -
756 G4double maxeEnergy = kinEnergy - particleFinalEnergy - eMass;
757 G4double eEnergyinterval = maxeEnergy - mineEnergy;
758 eEnergy = mineEnergy + eEnergyinterval*
randNumbs[4];
767 G4double eMomentum = std::sqrt(eEnergy*eEnergy - eMass*eMass);
768 pEnergy = kinEnergy - particleFinalEnergy - eEnergy;
769 G4double pMomentum = std::sqrt(pEnergy*pEnergy - eMass*eMass);
772 G4double B3 = -2.*particleMomentum*particleFinalMomentum;
773 G4double cost3interval =
G4Log((A3 + B3*Cmax)/(A3 + B3*Cmin))/B3;
775 G4double cost3 = A3*(expanCost3r6 - 1.)/B3 + Cmin*expanCost3r6;
776 G4double sint3 = std::sqrt((1. - cost3)*(1. + cost3));
778 partDirection.
set(sint3, 0., cost3);
781 muFinalMomentumVector.
set(particleFinalMomentum*sint3, 0., particleFinalMomentum*cost3);
784 G4LorentzVector muFinalFourMomentum(muFinalMomentumVector, particleFinalEnergy);
786 G4double A5 = auxVec1.
mag2() - 2.*eEnergy*(kinEnergy - particleFinalEnergy) +
787 2.*particleMomentumVector[2]*eMomentum - 2.*particleFinalMomentum*eMomentum*cost3;
788 G4double B5 = -2.*particleFinalMomentum*eMomentum*(sint3*cosp3*cosp5 + sint3*sinp3*sinp5);
793 G4double t5interval =
G4Log((absA5 + absB5*maxt5)/(absA5 + absB5*mint5))/absB5;
799 eDirection.
set(sint5*cosp5, sint5*sinp5, cost5);
802 G4ThreeVector auxVec2 = particleMomentumVector - muFinalMomentumVector - eMomentumVector;
804 G4double Bp = particleFinalMomentum*(sint3*cosp3*cosp6 + sint3*sinp3*sinp6) +
805 eMomentum*(sint5*cosp5*cosp6 + sint5*sinp5*sinp6);
806 G4double Cp = -particleMomentum + particleFinalMomentum*cost3 + eMomentum*cost5;
807 G4double A6 = p1mp3mp52 + pMomentum*pMomentum;
812 G4double absA6C6 = std::abs(A6 + C6);
814 G4double t6interval = (1./(absA6C6 + absB6*mint6) - 1./(absA6C6 + absB6*maxt6))/absB6;
815 G4double t6 = (-absA6C6 + 1./(1./(absA6C6 + absB6*mint6) - absB6*t6interval*
randNumbs[8]))/absB6;
819 pDirection.
set(sint6*cosp6, sint6*sinp6, cost6);
826 particleFinalMomentum = std::sqrt(particleFinalEnergy*particleFinalEnergy -
829 G4double maxpEnergy = kinEnergy - particleFinalEnergy - eMass;
830 G4double pEnergyinterval = maxpEnergy - eMass;
831 pEnergy = eMass + pEnergyinterval*
randNumbs[4];
840 G4double pMomentum = std::sqrt(pEnergy*pEnergy - eMass*eMass);
841 eEnergy = kinEnergy - particleFinalEnergy - pEnergy;
842 G4double eMomentum = std::sqrt(eEnergy*eEnergy - eMass*eMass);
845 G4double B3 = -2.*particleMomentum*particleFinalMomentum;
846 G4double cost3interval =
G4Log((A3 + B3*Cmax)/(A3 + B3*Cmin))/B3;
848 G4double cost3 = A3*(expanCost3r6 - 1.)/B3 + Cmin*expanCost3r6;
849 G4double sint3 = std::sqrt((1. - cost3)*(1. + cost3));
851 partDirection.
set(sint3*cosp3, sint3*sinp3, cost3);
854 muFinalMomentumVector.
set(particleFinalMomentum*sint3*cosp3,
855 particleFinalMomentum*sint3*sinp3,
856 particleFinalMomentum*cost3);
858 G4LorentzVector muFourMomentum(particleMomentum, particleMomentumVector);
859 G4LorentzVector muFinalFourMomentum(particleFinalEnergy, muFinalMomentumVector);
862 2.*pEnergy*(kinEnergy - particleFinalEnergy) + 2.*particleMomentumVector[2]*pMomentum -
863 2.*particleFinalMomentum*pMomentum*cost3;
864 G4double B6 = -2.*particleFinalMomentum*pMomentum*(sint3*cosp3*cosp6 + sint3*sinp3*sinp6);
869 G4double t6interval =
G4Log((absA6 + absB6*maxt6)/(absA6 + absB6*mint6))/absB6;
875 pDirection.
set(sint6*cosp6, sint6*sinp6, cost6);
878 G4ThreeVector auxVec2 = particleMomentumVector - muFinalMomentumVector - pMomentumVector;
880 G4double Bp = particleFinalMomentum*(sint3*cosp3*cosp5 + sint3*sinp3*sinp5) +
881 pMomentum*(sint6*cosp6*cosp5 + sint6*sinp6*sinp5);
882 G4double Cp = -particleMomentum + particleFinalMomentum*cost3 + pMomentum*cost6;
883 G4double A5 = p1mp3mp62 + eMomentum*eMomentum;
890 G4double t5interval = (1./(absA5C5 + absB5*mint5) - 1./(absA5C5 + absB5*maxt5))/absB5;
891 G4double t5 = (-absA5C5 + 1./(1./(absA5C5 + absB5*mint5) - absB5*t5interval*
randNumbs[8]))/absB5;
895 eDirection.
set(sint5*cosp5, sint5*sinp5, cost5);
910 vdp->push_back(aParticle1);
911 vdp->push_back(aParticle2);
919 vdp->push_back(newdp);