47 _NumOfNeutralFragments(0),
48 _NumOfChargedFragments(0)
61 std::deque<G4StatMFFragment*>::iterator i;
67 if ( (
A > 1 && (
Z >
A ||
Z <= 0)) || (
A==1 &&
Z >
A) ||
A <= 0 )
return false;
96 return running_total + fragment->GetCoulombEnergy();
110 std::deque<G4StatMFFragment*>::const_iterator i;
113 Energy += (*i)->GetEnergy(T);
115 return Energy + TranslationalEnergy;
129 std::deque<G4StatMFFragment*>::iterator i;
131 theResult->push_back((*i)->GetFragment(T));
166 TooMuchIterations =
false;
175 G4bool ThereAreOverlaps =
false;
176 std::deque<G4StatMFFragment*>::iterator i;
186 std::deque<G4StatMFFragment*>::iterator j;
190 (*i)->GetPosition() - (*j)->GetPosition();
192 g4calc->
Z13((*j)->GetA()));
193 if ( (ThereAreOverlaps = (FragToFragVector.
mag2() < Rmin*Rmin)))
198 }
while (ThereAreOverlaps && counter < 1000);
202 TooMuchIterations =
true;
207 }
while (TooMuchIterations);
253 for (
G4int i = idx; i < idx+NF-2; ++i)
276 AvailableE = KinE - SummedE;
285 *AvailableE/p.
mag2());
289 if (CTM12 > 1.) {CosTheta1 = 1.;}
298 while (CosTheta1*CosTheta1 < CTM12);
301 while (CTM12 >= 0.0 && CosTheta1 < 0.0);
304 if (CTM12 < 0.0) Sign = 1.0;
309 *(CosTheta1*CosTheta1-CTM12)))/H;
312 G4double SinTheta1 = std::sqrt(1.0 - CosTheta1*CosTheta1);
319 if (CosTheta2 > -1.0 && CosTheta2 < 1.0) {
320 SinTheta2 = std::sqrt(1.0 - CosTheta2*CosTheta2);
348 if (CoulombEnergy <= 0.0)
return;
350 G4int Iterations = 0;
378 distance =
Pos[i] -
Pos[j];
381 (distance.
mag2()*distance.
mag()))*distance;
387 TimeN = TimeS + DeltaTime;
392 Vel[i] += Accel[i]*(TimeN-TimeS);
393 Pos[i] += (SavedVel+Vel[i])*(TimeN-TimeS)*0.5;
398 }
while (Iterations++ < 100);
409 G4double Eta = ( CoulombEnergy + KineticEnergy ) / TotalKineticEnergy;
442 ( (V.
x() - Alpha1*U.
x())/Alpha2 ) *
P.x() + N.
x() *
P.y() + U.
x() *
P.z(),
443 ( (V.
y() - Alpha1*U.
y())/Alpha2 ) *
P.x() + N.
y() *
P.y() + U.
y() *
P.z(),
444 ( (V.
z() - Alpha1*U.
z())/Alpha2 ) *
P.x() + N.
z() *
P.y() + U.
z() *
P.z()
446 return RotatedMomentum;
static const G4double * P1[nN]
static const G4double * P2[nN]
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
std::vector< G4Fragment * > G4FragmentVector
G4ThreeVector G4RandomDirection()
static constexpr double twopi
Hep3Vector cross(const Hep3Vector &) const
void set(double x, double y, double z)
static G4Pow * GetInstance()
G4double A13(G4double A) const
G4double Z13(G4int Z) const
G4double GetFragmentsCoulombEnergy(void)
G4int _NumOfChargedFragments
std::deque< G4StatMFFragment * > _theFragments
G4bool CheckFragments(void)
G4int _NumOfNeutralFragments
G4ThreeVector RotateMomentum(G4ThreeVector Pa, G4ThreeVector V, G4ThreeVector P)
G4double GetFragmentsEnergy(G4double T) const
void CreateFragment(G4int A, G4int Z)
void FragmentsMomenta(G4int NF, G4int idx, G4double T)
void SolveEqOfMotion(G4int anA, G4int anZ, G4double T)
void PlaceFragments(G4int anA)
void CoulombImpulse(G4int anA, G4int anZ, G4double T)
G4FragmentVector * GetFragments(G4int anA, G4int anZ, G4double T)
static G4double GetKappaCoulomb()