103 G4double eMass = CLHEP::electron_mass_c2;
109 G4double muEnergy = muKinEnergy + muMass;
117 if (randNumbs[7] <
W[0]) {
118 G4double A1 = -(q2 - 2.*muEnergy*gEnergy);
119 G4double B1 = -(2.*gMomentum*muMomentum);
122 G4double costg = (-A1 + (A1 - B1)*
G4Exp(B1*tginterval*randNumbs[1]))/B1;
123 G4double sintg = std::sqrt((1.0 - costg)*(1.0 + costg));
124 G4double phig = CLHEP::twopi*randNumbs[2];
129 dirGamma.
set(sintg*cospg, sintg*sinpg, costg);
132 G4double cost5 = -1. + 2.*randNumbs[6];
133 G4double phi5 = CLHEP::twopi*randNumbs[8];
141 dirElectron = eFourMomentum.
vect().
unit();
142 dirPositron = pFourMomentum.
vect().
unit();
144 G4double phi = CLHEP::twopi*randNumbs[3];
148 }
else if (randNumbs[7] >=
W[0] && randNumbs[7] <
W[1]) {
149 G4double A3 = q2 + 2.*gEnergy*muFinalEnergy;
150 G4double B3 = -2.*gMomentum*muFinalMomentum;
153 G4double tQMG = (-A3 + (A3 - B3)*
G4Exp(B3*tQ3interval*randNumbs[0]))/B3;
154 G4double phiQP = CLHEP::twopi*randNumbs[2];
156 G4double sintQ3 = std::sqrt(1. - tQMG*tQMG);
160 G4double Ap = muMomentum*muMomentum + muFinalMomentum*muFinalMomentum + gMomentum*gMomentum;
161 G4double A = Ap + 2.*muFinalMomentum*gMomentum*tQMG;
162 G4double B = -2.*muMomentum*gMomentum*sintQ3*cospQP;
163 G4double C = -2.*muMomentum*gMomentum*tQMG - 2.*muMomentum*muFinalMomentum;
166 G4double t3interval = (1./(
A +
C + absB*mint3) - 1./(
A +
C + absB*maxt3))/absB;
167 G4double t3 = (-(
A +
C) + 1./(1./(
A +
C + absB*mint3) - absB*t3interval*randNumbs[0]))/absB;
171 G4double cost = -sint3*sintQ3*cospQP + cost3*tQMG;
172 G4double sint = std::sqrt((1. + cost)*(1. - cost));
173 G4double cosp = (sintQ3*cospQP*cost3 + sint3*tQMG)/sint;
177 dirGamma.
set(sint*cosp, sint*sinp, cost);
180 G4double cost5 = -1. + 2.*randNumbs[6];
181 G4double phi5 = CLHEP::twopi*randNumbs[8];
189 dirElectron = eFourMomentum.
vect().
unit();
190 dirPositron = pFourMomentum.
vect().
unit();
192 G4double phi = CLHEP::twopi*randNumbs[3];
196 }
else if (randNumbs[7] >=
W[1] && randNumbs[7] <
W[2]) {
197 G4double phi3 = CLHEP::twopi*randNumbs[0];
198 G4double phi5 = CLHEP::twopi*randNumbs[1];
199 G4double phi6 = CLHEP::twopi*randNumbs[2];
201 G4double muEnergyInterval = muEnergy - 2.*eMass - minmuFinalEnergy;
202 G4double muFEnergy = minmuFinalEnergy + muEnergyInterval*randNumbs[3];
205 G4double maxeEnergy = muEnergy - muFEnergy - eMass;
206 G4double eEnergyInterval = maxeEnergy - mineEnergy;
207 G4double eEnergy = mineEnergy + eEnergyInterval*randNumbs[4];
216 G4double muFMomentum = std::sqrt(muFEnergy*muFEnergy - muMass*muMass);
217 G4double eMomentum = std::sqrt(eEnergy*eEnergy - eMass*eMass);
218 G4double pEnergy = muEnergy - muFEnergy - eEnergy;
219 G4double pMomentum = std::sqrt(pEnergy*pEnergy - eMass*eMass);
221 G4double A3 = -2.*muMass*muMass + 2.*muEnergy*muFEnergy;
222 G4double B3 = -2.*std::sqrt(muEnergy*muEnergy - muMass*muMass)*muFMomentum;
223 G4double cost3interval =
G4Log((A3 + B3*Cmax)/(A3 + B3*Cmin))/B3;
225 G4double expanCost3r6 =
G4Exp(B3*cost3interval*randNumbs[5]);
226 G4double cost3 = A3*(expanCost3r6 - 1.)/B3 + Cmin*expanCost3r6;
227 G4double sint3 = std::sqrt((1. - cost3)*(1. + cost3));
229 G4ThreeVector muFinalMomentumVector(muFMomentum*sint3, 0., muFMomentum*cost3);
232 muFinalFourMomentum.
set(muFinalMomentumVector, muFEnergy);
234 G4double A5 = auxVec1.
mag2() - 2.*eEnergy*(muEnergy - muFEnergy) +
235 2.*muMomentumVector[2]*eMomentum - 2.*muFMomentum*eMomentum*cost3;
236 G4double B5 = -2.*muFMomentum*eMomentum*(sint3*cosp3*cosp5 + sint3*sinp3*sinp5);
241 G4double t5interval =
G4Log((absA5 + absB5*maxt5)/(absA5 + absB5*mint5))/absB5;
242 G4double argexp = absB5*t5interval*randNumbs[6] +
G4Log(absA5 + absB5*mint5);
247 dirElectron.
set(sint5*cosp5, sint5*sinp5, cost5);
250 G4ThreeVector auxVec2 = muMomentumVector - muFinalMomentumVector - eMomentumVector;
252 G4double Bp = muFinalMomentum*(sint3*cosp3*cosp6 + sint3*sinp3*sinp6) +
253 eMomentum*(sint5*cosp5*cosp6 + sint5*sinp5*sinp6);
254 G4double Cp = -muMomentum + muFMomentum*cost3 + eMomentum*cost5;
255 G4double A6 = p1mp3mp52 + pMomentum*pMomentum;
260 G4double absA6C6 = std::abs(A6 + C6);
262 G4double t6interval = (1./(absA6C6 + absB6*mint6) - 1./(absA6C6 + absB6*maxt6))/absB6;
263 G4double t6 = (-absA6C6 + 1./(1./(absA6C6 + absB6*mint6) - absB6*t6interval*randNumbs[8]))/absB6;
267 dirPositron.
set(sint6*cosp6, sint6*sinp6, cost6);
272 }
else if (randNumbs[7] >=
W[2]) {
273 G4double phi3 = CLHEP::twopi*randNumbs[0];
274 G4double phi6 = CLHEP::twopi*randNumbs[1];
275 G4double phi5 = CLHEP::twopi*randNumbs[2];
277 G4double muFinalEnergyinterval = muEnergy - 2.*eMass - minmuFinalEnergy;
278 G4double muFEnergy = minmuFinalEnergy + muFinalEnergyinterval*randNumbs[3];
281 G4double maxpEnergy = muEnergy - muFEnergy - eMass;
282 G4double pEnergyinterval = maxpEnergy - minpEnergy;
283 G4double pEnergy = minpEnergy + pEnergyinterval*randNumbs[4];
292 G4double muFMomentum = std::sqrt(muFEnergy*muFEnergy - muMass*muMass);
293 G4double pMomentum = std::sqrt(pEnergy*pEnergy - eMass*eMass);
294 G4double eEnergy = muEnergy - muFEnergy - pEnergy;
295 G4double eMomentum = std::sqrt(eEnergy*eEnergy - eMass*eMass);
297 G4double A3 = -2.*muMass*muMass + 2.*muEnergy*muFEnergy;
298 G4double B3 = -2.*std::sqrt(muEnergy*muEnergy - muMass*muMass)*muFMomentum;
299 G4double cost3interval =
G4Log((A3 + B3*Cmax)/(A3 + B3*Cmin))/B3;
301 G4double expanCost3r6 =
G4Exp(B3*cost3interval*randNumbs[5]);
302 G4double cost3 = A3*(expanCost3r6 - 1.)/B3 + Cmin*expanCost3r6;
303 G4double sint3 = std::sqrt((1. - cost3)*(1. + cost3));
306 muFinalMomentumVector.
set(muFMomentum*sint3*cosp3, muFMomentum*sint3*sinp3,
310 muFinalFourMomentum.
set(muFinalMomentumVector, muFEnergy);
312 G4double A6 = auxVec1.
mag2() - 2.*pEnergy*(muEnergy - muFEnergy) +
313 2.*muMomentumVector[2]*pMomentum - 2.*muFMomentum*pMomentum*cost3;
314 G4double B6 = -2.*muFMomentum*pMomentum*(sint3*cosp3*cosp6 + sint3*sinp3*sinp6);
319 G4double t6interval =
G4Log((absA6 + absB6*maxt6)/(absA6 + absB6*mint6))/absB6;
320 G4double argexp = absB6*t6interval*randNumbs[6] +
G4Log(absA6 + absB6*mint6);
325 dirPositron.
set(sint6*cosp6, sint6*sinp6, cost6);
328 G4ThreeVector auxVec2 = muMomentumVector - muFinalMomentumVector - pMomentumVector;
330 G4double Bp = muFMomentum*(sint3*cosp3*cosp5 + sint3*sinp3*sinp5) +
331 pMomentum*(sint6*cosp6*cosp5 + sint6*sinp6*sinp5);
332 G4double Cp = -muMomentum + muFMomentum*cost3 + pMomentum*cost6;
333 G4double A5 = p1mp3mp62 + eMomentum*eMomentum;
340 G4double t5interval = (1./(absA5C5 + absB5*mint5) - 1./(absA5C5 + absB5*maxt5))/absB5;
341 G4double t5 = (-absA5C5 + 1./(1./(absA5C5 + absB5*mint5) - absB5*t5interval*randNumbs[8]))/absB5;
345 dirElectron.
set(sint5*cosp5, sint5*sinp5, cost5);