46 fClusters.reserve(220);
47 fAcumMultiplicity.reserve(220);
60 if (!fClusters.empty()) {
61 for(
auto const & p : fClusters) {
delete p; }
83 0.6*CLHEP::elm_coupling*(Z*Z)/(R0*a13);
86 for (
G4int i = n; i <
A; ++i) {
93 G4double FragMult = std::max((1.0+2.31*(U/CLHEP::MeV - 3.5*
A))/100.0, 2.0);
96 fKappa = (1.0 + CLHEP::elm_coupling*(g4calc->
A13(FragMult) - 1.0)/(R0*a13));
97 fKappa = fKappa*fKappa*fKappa - 1.0;
102 fChemPotentialNu = theTemp->GetChemicalPotentialNu();
103 fChemPotentialMu = theTemp->GetChemicalPotentialMu();
116 std::vector<G4int> ANumbers(
A);
118 G4double Multiplicity = ChooseA(
A, ANumbers);
120 std::vector<G4int> FragmentsA;
123 for (i = 0; i <
A; i++)
125 for (
G4int j = 0; j < ANumbers[i]; j++) FragmentsA.push_back(i+1);
130 for (
G4int j = 0; j < Multiplicity; j++)
132 G4int FragmentsAMax = 0;
134 for (i = j; i < Multiplicity; ++i)
136 if (FragmentsA[i] <= FragmentsAMax) {
continue; }
140 FragmentsAMax = FragmentsA[im];
145 FragmentsA[im] = FragmentsA[j];
146 FragmentsA[j] = FragmentsAMax;
149 return ChooseZ(Z,FragmentsA);
152G4double G4StatMFMacroCanonical::ChooseA(
G4int A, std::vector<G4int>& ANumbers)
157 fAcumMultiplicity.resize(
A);
158 for (
G4int i=0; i<
A; ++i) {
159 G4double x = fClusters[i]->GetMeanMultiplicity();
161 fAcumMultiplicity[i] = multiplicity;
170 ANumbers.resize(
A, 0);
173 for (
G4int i = 0; i <
A; ++i) {
174 if (RandNumber < fAcumMultiplicity[i]) {
180 ANumbers[ThisOne] = ANumbers[ThisOne]+1;
185 }
while (CheckA > 0);
196 std::vector<G4int> FragmentsZ;
200 G4int multiplicity = (
G4int)FragmentsA.size();
205 for (
G4int i = 0; i < multiplicity; ++i) {
209 if (RandNumber < fClusters[0]->GetZARatio()) {
210 FragmentsZ.push_back(1);
211 SumZ += FragmentsZ[i];
213 else FragmentsZ.push_back(0);
218 + 2*CP*g4calc->
Z23(FragmentsA[i]);
220 if (FragmentsA[i] > 1 && FragmentsA[i] < 5) { ZMean = 0.5*FragmentsA[i]; }
223 + fChemPotentialNu)/CC;
228 RandZ = G4RandGauss::shoot(ZMean,ZDispersion);
231 }
while (z < 0 || z >
A);
232 FragmentsZ.push_back(z);
238 }
while (std::abs(DeltaZ) > 1);
243 while (FragmentsZ[idx] < 1) { ++idx; }
245 FragmentsZ[idx] += DeltaZ;
247 G4StatMFChannel* theChannel =
new G4StatMFChannel();
248 for (
G4int i = multiplicity-1; i >= 0; --i) {
G4double GetExcitationEnergy() const
static G4Pow * GetInstance()
G4double A13(G4double A) const
G4double Z13(G4int Z) const
G4double Z23(G4int Z) const
void CreateFragment(G4int A, G4int Z)
G4StatMFChannel * ChooseAandZ(const G4Fragment &theFragment) override
~G4StatMFMacroCanonical() override
void Initialise(const G4Fragment &theFragment) override
static G4double GetBeta0()
static G4double GetGamma0()
static G4double GetCoulomb()
G4double pMeanMultiplicity
G4double pMeanTemperature