41 Initialize(theFragment,multiplicity,FreeIntE,SCompNuc);
47 if (!_Partition.empty()) {
48 for (
auto & p : _Partition) {
delete p; }
52void G4StatMFMicroManager::Initialize(
const G4Fragment & theFragment,
G4int im,
66 _MeanMultiplicity = 0.0;
69 _MeanTemperature = 0.0;
77 G4int FragmentAtomicNumbers[4];
83 FragmentAtomicNumbers[im-1] =
A;
84 for (i = 0; i < (im - 1); i++) FragmentAtomicNumbers[i] = 0;
91 while (MakePartition(im,FragmentAtomicNumbers)) {
99 _Partition.push_back(aPartition);
101 _WW += PartitionProbability;
102 _MeanMultiplicity += im*PartitionProbability;
103 _MeanTemperature += aPartition->
GetTemperature() * PartitionProbability;
104 if (PartitionProbability > 0.0)
105 _MeanEntropy += PartitionProbability * aPartition->
GetEntropy();
117 G4int tmp = ANumbers[l-1] + ANumbers[k-1];
120 if (ANumbers[l-1] > ANumbers[l] || ANumbers[k-2] > ANumbers[k-1]) {
122 ANumbers[k-1] = tmp - 1;
131 _Normalization = Norm;
133 _MeanMultiplicity /= Norm;
134 _MeanTemperature /= Norm;
135 _MeanEntropy /= Norm;
146 for (
auto & p : _Partition) {
147 AccumWeight += p->GetProbability();
148 if (RandNumber <= AccumWeight)
149 return p->ChooseZ(A0,Z0,MeanT);
153 "G4StatMFMicroManager::ChooseChannel: Couldn't find a channel.");
G4double GetExcitationEnergy() const
G4StatMFMicroManager(const G4Fragment &theFragment, G4int multiplicity, G4double FreeIntE, G4double SCompNuc)
void Normalize(G4double Norm)
G4StatMFChannel * ChooseChannel(G4int A0, G4int Z0, G4double MeanT)
G4double CalcPartitionProbability(G4double U, G4double FreeInternalE0, G4double SCompound)
void SetPartitionFragment(G4int anA)
G4double GetEntropy(void)
G4double GetTemperature(void)