44     Initialize(theFragment);
 
   53   if (!_ThePartitionManagerVector.empty()) {
 
   54     std::for_each(_ThePartitionManagerVector.begin(),
 
   55             _ThePartitionManagerVector.end(),
 
   64 void G4StatMFMicroCanonical::Initialize(
const G4Fragment & theFragment) 
 
   67   std::vector<G4StatMFMicroManager*>::iterator it;
 
  106   G4double SCompoundNucleus = CalcEntropyOfCompoundNucleus(theFragment,TConfiguration);
 
  109   _WCompoundNucleus = 1.0; 
 
  111   W += _WCompoundNucleus;
 
  117   if (A > 110) MaxMult -= 1;
 
  121   for (
G4int im = 2; im <= MaxMult; im++) {
 
  124     _ThePartitionManagerVector.push_back(aMicroManager);
 
  128   W = std::accumulate(_ThePartitionManagerVector.begin(),
 
  129             _ThePartitionManagerVector.end(),
 
  130             W,SumProbabilities());
 
  133   for (it =  _ThePartitionManagerVector.begin(); it !=  _ThePartitionManagerVector.end(); ++it) 
 
  138   _WCompoundNucleus /= W;
 
  145   for (it =  _ThePartitionManagerVector.begin(); it !=  _ThePartitionManagerVector.end(); ++it) 
 
  156 G4double G4StatMFMicroCanonical::CalcFreeInternalEnergy(
const G4Fragment & theFragment, 
 
  173   return VolumeTerm + SymmetryTerm + SurfaceTerm + CoulombTerm;
 
  177 G4StatMFMicroCanonical::CalcEntropyOfCompoundNucleus(
const G4Fragment & theFragment,
 
  186   G4double Ta = std::max(std::sqrt(U/(0.125*A)),0.0012*
MeV); 
 
  189   G4double ECompoundNucleus = CalcFreeInternalEnergy(theFragment,Ta);
 
  193   G4double InvLevelDensity = CalcInvLevelDensity(static_cast<G4int>(A));
 
  199   } 
else if (Da < 0.0) {
 
  202       ECompoundNucleus = CalcFreeInternalEnergy(theFragment,Tb);
 
  208       ECompoundNucleus = CalcFreeInternalEnergy(theFragment,Tb);
 
  213   G4double eps = 1.0e-14 * std::fabs(Tb-Ta);
 
  215   for (
G4int i = 0; i < 1000; i++) {
 
  217     if (std::abs(Ta-Tb) <= eps) {
 
  221     ECompoundNucleus = CalcFreeInternalEnergy(theFragment,Tc);
 
  239     "G4StatMFMicrocanoncal::CalcEntropyOfCompoundNucleus: I can't calculate the temperature"  
  251     if (RandNumber < _WCompoundNucleus) { 
 
  259     G4double AccumWeight = _WCompoundNucleus;
 
  260     std::vector<G4StatMFMicroManager*>::iterator it;
 
  261     for (it = _ThePartitionManagerVector.begin(); it != _ThePartitionManagerVector.end(); ++it) {
 
  262         AccumWeight += (*it)->GetProbability();
 
  263         if (RandNumber < AccumWeight) {
 
  267     throw G4HadronicException(__FILE__, __LINE__, 
"G4StatMFMicroCanonical::ChooseAandZ: wrong normalization!");
 
  273 G4double G4StatMFMicroCanonical::CalcInvLevelDensity(
G4int anA)
 
  277     if (anA == 1) 
return 0.0;