73 G4int IterationsLimit = 100000;
83 G4double theMeanMult = theMicrocanonicalEnsemble->GetMeanMultiplicity();
84 if (theMeanMult <= MaxAverageMultiplicity) {
87 theChannel = theMicrocanonicalEnsemble->ChooseAandZ(theFragment);
102 theChannel = theMacrocanonicalEnsemble->
ChooseAandZ(theFragment);
106 if (!ChannelOk)
delete theChannel;
109 }
while (!ChannelOk);
114 theResult->push_back(
new G4Fragment(theFragment));
115 delete theMicrocanonicalEnsemble;
116 if (theMacrocanonicalEnsemble != 0)
delete theMacrocanonicalEnsemble;
139 }
while (Iterations++ < IterationsLimit );
144 if (Iterations >= IterationsLimit)
145 throw G4HadronicException(__FILE__, __LINE__,
"G4StatMF::BreakItUp: Was not possible to solve for temperature of breaking channel");
156 InitialMomentum.
boost(-InitialMomentum.boostVector());
161 G4FragmentVector::iterator j;
162 for (j = theResult->begin(); j != theResult->end(); j++)
163 FragmentsEnergy += (*j)->GetMomentum().
e();
164 SavedScaleFactor = ScaleFactor;
165 ScaleFactor = InitialMomentum.e()/FragmentsEnergy;
167 for (j = theResult->begin(); j != theResult->end(); j++) {
168 ScaledMomentum = ScaleFactor * (*j)->GetMomentum().vect();
169 G4double Mass = (*j)->GetMomentum().m();
171 NewMomentum.
setVect(ScaledMomentum);
172 NewMomentum.
setE(std::sqrt(ScaledMomentum.
mag2()+Mass*Mass));
173 (*j)->SetMomentum(NewMomentum);
176 }
while (ScaleFactor > 1.0+1.
e-5 &&
std::abs(ScaleFactor-SavedScaleFactor)/ScaleFactor > 1.
e-10);
180 G4FragmentVector::iterator i;
181 for (i = theResult->begin(); i != theResult->end(); i++) {
184 (*i)->SetMomentum(FourMom);
188 delete theMicrocanonicalEnsemble;
189 if (theMacrocanonicalEnsemble != 0)
delete theMacrocanonicalEnsemble;
216 }
else if (Da < 0.0) {
219 if (T < 0.001*
MeV)
return false;
223 Db = (U - TotalEnergy)/U;
233 Db = (U - TotalEnergy)/U;
242 for (
G4int j = 0; j < 1000; j++) {
269 Temperature = (Ta+
T)*0.5;