88 G4double ekin = std::max(eV,kinEnergy);
89 G4double tau = ekin/electron_mass_c2;
96 - (gam+3.)/(sqrt(gam*gam - 1.)) + 1.;
100 border = 1. - (electron_mass_c2)/(2*(ekin + electron_mass_c2));
102 border = 1. - (100*electron_mass_c2)/(2*(ekin + electron_mass_c2));
105 border = std::min(border, 0.9999);
107 if (fr1>border) { fr1 = border; }
108 if (fr2>border) { fr2 = border; }
109 if (fr3>border) { fr3 = border; }
116 G4double ab = fr3s + (fr1-fr2)*(fr1-fr2);
117 G4double add= ((1.-fr1)*(1.-fr1) + (1.-fr2)*(1.-fr2))/(fr3s*aa);
119 G4double fres = -rho*(1./fr1s + 1./fr2s)
120 + (ab/(2.*(fr1*fr2*aa)))*(
G4Log(2.*gam*aa/(fr1*fr2)))
121 + (ab/(2.*fr1*fr2*(1-fr3)))*
G4Log(2.*gam*(1.-fr3)/(fr1*fr2)) - add;
139 - (gam+3.)/(sqrt(gam*gam - 1.)) + 1.;
142 if (fr1>border) { fr1 = border; }
143 if (fr2>border) { fr2 = border; }
144 if (fr3>border) { fr3 = border; }
151 G4double ab = fr3s + (fr1-fr2)*(fr1-fr2);
152 G4double add= ((1.-fr1)*(1.-fr1) + (1.-fr2)*(1.-fr2))/(fr3s*aa);
154 G4double fres = -rho*(1./fr1s + 1./fr2s)
155 + (ab/(2.*(fr1*fr2*aa)))*(
G4Log(2.*gam*aa/(fr1*fr2)))
156 + (ab/(2.*fr1*fr2*(1-fr3)))*
G4Log(2.*gam*(1.-fr3)/(fr1*fr2)) - add;
247 if(posiKinEnergy < 500*MeV) {
248 border = 1. - (electron_mass_c2)/(2*(posiKinEnergy + electron_mass_c2));
250 border = 1. - (100*electron_mass_c2)/(2*(posiKinEnergy + electron_mass_c2));
252 border = std::min(border, 0.9999);
257 if(posiKinEnergy == 0.0) {
259 G4double sint = sqrt((1. - cost)*(1. + cost));
262 phi = twopi * rndmEngine->
flat();
270 pol.
set(-sinphi, cosphi, 0.0);
282 G4double d1, d0, x1, x2, dmax, x2min;
286 x1 = 1/((1/xmin) - ((1/xmin)-(1/xmax))*rndmEngine->
flat());
287 dmax =
ComputeFS(posiKinEnergy, x1,1.-x1,border);
289 x2 = 1 - rndmEngine->
flat()*(1-x2min);
290 d1 = dmax*rndmEngine->
flat();
291 d0 =
ComputeFS(posiKinEnergy,x1,x2,2-x1-x2);
301 G4double psi13 = 2*asin(sqrt(std::abs((x1+x3-1)/(x1*x3))));
302 G4double psi12 = 2*asin(sqrt(std::abs((x1+x2-1)/(x1*x2))));
313 G4double TotalAvailableEnergy = posiKinEnergy + 2.0*electron_mass_c2;
315 G4double phot1Energy = 0.5*x1*TotalAvailableEnergy;
316 G4double phot2Energy = 0.5*x2*TotalAvailableEnergy;
317 G4double phot3Energy = 0.5*x3*TotalAvailableEnergy;
329 phot1Direction.
rotateUz(posiDirection);
330 phot2Direction.
rotateUz(posiDirection);
331 phot3Direction.
rotateUz(posiDirection);
358 pol.set(-sinphi, cosphi, 0.0);
359 pol.rotateUz(phot1Direction);
360 cost = pol*phot2Direction;
361 pol -= cost*phot2Direction;
363 aGamma2->SetPolarization(pol.x(),pol.y(),pol.z());
377 vdp->push_back(aGamma1);
378 vdp->push_back(aGamma2);
379 if(aGamma3 !=
nullptr) { vdp->push_back(aGamma3); }
void SetPolarization(const G4ThreeVector &)
const G4ThreeVector & GetMomentumDirection() const
G4double GetKineticEnergy() const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
void ProposeTrackStatus(G4TrackStatus status)