260 SummedP.setX(0.0);SummedP.setY(0.0);SummedP.setZ(0.0);
261 for (
G4int i = idx; i < idx+NF-2; ++i)
283 AvailableE = KinE - SummedE;
287 while (AvailableE <= p.mag2()/(2.0*(
_theFragments[i1]->GetNuclearMass()+
292 *AvailableE/p.mag2());
296 if (CTM12 > 1.) {CosTheta1 = 1.;}
305 while (CosTheta1*CosTheta1 < CTM12);
308 while (CTM12 >= 0.0 && CosTheta1 < 0.0);
311 if (CTM12 < 0.0) Sign = 1.0;
315 G4double P1 = (p.mag()*CosTheta1+Sign*std::sqrt(p.mag2()
316 *(CosTheta1*CosTheta1-CTM12)))/H;
317 G4double P2 = std::sqrt(P1*P1+p.mag2() - 2.0*P1*p.mag()*CosTheta1);
319 G4double SinTheta1 = std::sqrt(1.0 - CosTheta1*CosTheta1);
324 G4double CosTheta2 = (p.mag2() + P2*P2 - P1*
P1)/(2.0*p.mag()*
P2);
326 if (CosTheta2 > -1.0 && CosTheta2 < 1.0) {
327 SinTheta2 = std::sqrt(1.0 - CosTheta2*CosTheta2);
329 G4ThreeVector p1(P1*SinTheta1*CosPhi1,P1*SinTheta1*SinPhi1,P1*CosTheta1);
330 G4ThreeVector p2(P2*SinTheta2*CosPhi2,P2*SinTheta2*SinPhi2,P2*CosTheta2);
337 SummedE += p1.mag2()/(2.0*
_theFragments[i1]->GetNuclearMass()) +
static const G4double * P1[nN]
G4ThreeVector RotateMomentum(G4ThreeVector Pa, G4ThreeVector V, G4ThreeVector P)
G4ThreeVector IsotropicVector(G4double Magnitude=1.0)
static const double twopi
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
static const G4double * P2[nN]
std::deque< G4StatMFFragment * > _theFragments