63 _NumOfNeutralFragments(0),
64 _NumOfChargedFragments(0)
77 std::deque<G4StatMFFragment*>::iterator i;
83 if ( (A > 1 && (Z > A || Z <= 0)) || (A==1 && Z > A) || A <= 0 )
return false;
120 std::deque<G4StatMFFragment*>::const_iterator i;
123 Energy += (*i)->GetEnergy(T);
125 return Energy + TranslationalEnergy;
139 std::deque<G4StatMFFragment*>::iterator i;
141 theResult->push_back((*i)->GetFragment(T));
176 TooMuchIterations =
false;
185 G4bool ThereAreOverlaps =
false;
186 std::deque<G4StatMFFragment*>::iterator i;
196 std::deque<G4StatMFFragment*>::iterator j;
200 (*i)->GetPosition() - (*j)->GetPosition();
202 g4calc->
Z13((*j)->GetA()));
203 if ( (ThereAreOverlaps = (FragToFragVector.
mag2() < Rmin*Rmin)))
208 }
while (ThereAreOverlaps && counter < 1000);
212 TooMuchIterations =
true;
217 }
while (TooMuchIterations);
263 for (
G4int i = idx; i < idx+NF-2; ++i)
286 AvailableE = KinE - SummedE;
295 *AvailableE/p.
mag2());
299 if (CTM12 > 1.) {CosTheta1 = 1.;}
308 while (CosTheta1*CosTheta1 < CTM12);
311 while (CTM12 >= 0.0 && CosTheta1 < 0.0);
314 if (CTM12 < 0.0) Sign = 1.0;
319 *(CosTheta1*CosTheta1-CTM12)))/H;
322 G4double SinTheta1 = std::sqrt(1.0 - CosTheta1*CosTheta1);
329 if (CosTheta2 > -1.0 && CosTheta2 < 1.0) {
330 SinTheta2 = std::sqrt(1.0 - CosTheta2*CosTheta2);
332 G4ThreeVector p1(P1*SinTheta1*CosPhi1,P1*SinTheta1*SinPhi1,P1*CosTheta1);
333 G4ThreeVector p2(P2*SinTheta2*CosPhi2,P2*SinTheta2*SinPhi2,P2*CosTheta2);
358 if (CoulombEnergy <= 0.0)
return;
360 G4int Iterations = 0;
388 distance = Pos[i] - Pos[j];
391 (distance.
mag2()*distance.
mag()))*distance;
397 TimeN = TimeS + DeltaTime;
402 Vel[i] += Accel[i]*(TimeN-TimeS);
403 Pos[i] += (SavedVel+Vel[i])*(TimeN-TimeS)*0.5;
408 }
while (Iterations++ < 100);
419 G4double Eta = ( CoulombEnergy + KineticEnergy ) / TotalKineticEnergy;
447 G4double Alpha2 = std::sqrt(V.mag2() - Alpha1*Alpha1);
452 ( (V.x() - Alpha1*U.
x())/Alpha2 ) * P.
x() + N.x() * P.
y() + U.
x() * P.
z(),
453 ( (V.y() - Alpha1*U.
y())/Alpha2 ) * P.
x() + N.y() * P.
y() + U.
y() * P.
z(),
454 ( (V.z() - Alpha1*U.
z())/Alpha2 ) * P.
x() + N.z() * P.
y() + U.
z() * P.
z()
456 return RotatedMomentum;
void set(double x, double y, double z)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double GetCoulombEnergy(void) const
G4double Z13(G4int Z) const
G4double A13(G4double A) const
G4bool CheckFragments(void)
static G4double GetKappaCoulomb()
static const G4double * P2[nN]
void CoulombImpulse(G4int anA, G4int anZ, G4double T)
G4ThreeVector G4RandomDirection()
void CreateFragment(G4int A, G4int Z)
static G4Pow * GetInstance()
G4double GetFragmentsEnergy(G4double T) const
G4ThreeVector RotateMomentum(G4ThreeVector Pa, G4ThreeVector V, G4ThreeVector P)
void FragmentsMomenta(G4int NF, G4int idx, G4double T)
static constexpr double elm_coupling
void PlaceFragments(G4int anA)
G4double GetFragmentsCoulombEnergy(void)
static constexpr double twopi
double A(double temperature)
std::deque< G4StatMFFragment * > _theFragments
G4double operator()(G4double &, G4StatMFFragment *&frag)
G4FragmentVector * GetFragments(G4int anA, G4int anZ, G4double T)
G4int _NumOfChargedFragments
void SolveEqOfMotion(G4int anA, G4int anZ, G4double T)
Hep3Vector cross(const Hep3Vector &) const
G4int _NumOfNeutralFragments
static const G4double * P1[nN]
std::vector< G4Fragment * > G4FragmentVector