109 if (isInitialized) {
return; }
110 isInitialized =
true;
113 fTolerance = 2*CLHEP::eV;
116 fragment_pool.reserve(991);
122 fragment_pool.push_back(
new G4FermiFragment(3, 1, 1, 0.0, 3.8879e+08));
125 fragment_pool.push_back(
new G4FermiFragment(5, 2, 3, 0.0, 7.0325e-22));
126 fragment_pool.push_back(
new G4FermiFragment(5, 3, 3, 0.0, 3.70493e-22));
130 for (
G4int Z=1; Z<maxZ; ++Z) {
135 if (
nullptr != man) {
137 for(std::size_t i=0; i<=nn; ++i) {
145 if (exc >= fElim) {
continue; }
147 if (IsInThePool(Z,
A, exc)) {
continue; }
155 for (
auto const& f : fragment_pool) {
158 if (list_c[Z][
A] ==
nullptr) {
159 list_c[Z][
A] =
new std::vector<G4FermiChannels*>;
165 for (
G4int i=0; i<nfrag; ++i) {
170 for (
G4int j=0; j<nfrag; ++j) {
174 if(A2 < A1 || (A2 == A1 && Z2 < Z1)) {
continue; }
178 if(Z >= maxZ ||
A >= maxA) {
continue; }
195 if (exc > fElim) {
continue; }
196 auto chan = list_c[Z][
A];
197 if (
nullptr == chan) {
continue; }
198 std::size_t kmax = chan->size();
199 for (std::size_t k=0; k<kmax; ++k) {
200 auto ch = (*chan)[k];
202 auto f0 = ch->GetFragment();
206 if (e0 >= minE + cb) {
215 for (
G4int Z=0; Z<maxZ; ++Z) {
216 auto chan = list_c[Z][
A];
217 if(
nullptr == chan) {
continue; }
218 std::size_t kmax = chan->size();
219 for (std::size_t k=0; k<kmax; ++k) {
220 auto ch = (*chan)[k];
221 auto frag = ch->GetFragment();
222 std::size_t nch = ch->NumberPairs();
224 const std::vector<G4FermiPair*>& pairs = ch->GetChannels();
226 for (std::size_t i=0; i<nch; ++i) {
228 pairs[i]->GetFragment1(),
229 pairs[i]->GetFragment2(),
230 frag->GetTotalEnergy(),
231 frag->GetExcitationEnergy());
232 pairs[i]->SetProbability(ptot);
236 pairs[0]->SetProbability(1.0);
239 for (std::size_t i=0; i<nch-1; ++i) {
240 G4double x = ptot*pairs[i]->Probability();
241 pairs[i]->SetProbability(x);
243 pairs[nch - 1]->SetProbability(1.0);
265 G4cout <<
"----------------------------------------------------------------"
267 G4cout <<
"##### List of Fragments in the Fermi Fragment Pool #####"
269 std::size_t nfrag = fragment_pool.size();
270 G4cout <<
" Nfragnents=" << nfrag <<
" Elim(MeV)=" << fElim/CLHEP::MeV <<
G4endl;
271 for(std::size_t i=0; i<nfrag; ++i) {
277 G4cout <<
"----------------------------------------------------------------"
279 G4cout <<
"### G4FermiFragmentPoolVI: fragments sorted by A" <<
G4endl;
284 for (
G4int Z=0; Z<maxZ; ++Z) {
285 auto chan = list_c[Z][
A];
286 if (
nullptr == chan) {
continue; }
287 std::size_t jmax = chan->size();
288 G4cout <<
" # A=" <<
A <<
" Z=" << Z <<
" Nfagments=" << jmax <<
G4endl;
289 for(std::size_t j=0; j<jmax; ++j) {
290 auto ch = (*chan)[j];
291 if(
nullptr == ch) {
continue; }
292 auto f = ch->GetFragment();
293 G4int a1 = f->GetA();
294 G4int z1 = f->GetZ();
295 std::size_t nch = ch->NumberPairs();
297 G4cout <<
" ("<<a1<<
","<<z1<<
"); Eex(MeV)= "
298 << f->GetExcitationEnergy()
299 <<
" 2S=" << f->TwoSpinParity()
300 <<
"; Nchannels=" << nch
302 for (std::size_t k=0; k<nch; ++k) {
303 auto fpair = ch->GetPair(k);
304 if(
nullptr == fpair) {
continue; }
305 G4cout <<
" (" << fpair->GetFragment1()->GetZ()
306 <<
", " << fpair->GetFragment1()->GetA()
307 <<
", " << fpair->GetFragment1()->GetExcitationEnergy()
308 <<
") ("<< fpair->GetFragment2()->GetZ()
309 <<
", " << fpair->GetFragment2()->GetA() <<
", "
310 << fpair->GetFragment2()->GetExcitationEnergy()
311 <<
") prob= " << fpair->Probability()
318 G4cout <<
" ======== Total number of channels " << ama <<
" ======" <<
G4endl;