53 for(
G4int i=0; i<maxA; ++i) {
54 nn = list_p[i].size();
55 for(
size_t j=0; j<
nn; ++j) {
delete (list_p[i])[j]; }
56 nn = list_c[i].size();
57 for(
size_t j=0; j<
nn; ++j) {
delete (list_c[i])[j]; }
58 nn = list_d[i].size();
59 for(
size_t j=0; j<
nn; ++j) {
delete (list_d[i])[j]; }
60 nn = list_u[i].size();
61 for(
size_t j=0; j<
nn; ++j) {
delete (list_u[i])[j]; }
63 nn = fragment_pool.size();
64 for(
size_t j=0; j<
nn; ++j) {
delete fragment_pool[j]; }
65 nn = funstable.size();
66 for(
size_t j=0; j<
nn; ++j) {
delete funstable[j]; }
73 size_t nn = list_f[
A].size();
74 for(
size_t i=0; i<
nn; ++i) {
75 if(Z == (list_f[A])[i]->GetZ()) {
77 if(etot <= (list_f[A])[i]->GetFragmentMass() + elim) {
return true; }
80 if(isInList) {
return false; }
81 nn = list_g[
A].size();
82 for(
size_t i=0; i<
nn; ++i) {
83 if(Z == (list_g[A])[i]->GetZ() &&
84 etot <= (list_g[A])[i]->GetFragmentMass() + elim) {
return true; }
96 for(
size_t j=0; j<list_c[
A].size(); ++j) {
98 if(frag->
GetZ() !=
Z) {
continue; }
100 if(std::abs(de) <= tolerance) {
101 res = (list_c[
A])[j];
103 }
else if(de > 0.0 && de < demax) {
104 res = (list_c[
A])[j];
106 }
else if(de > 0.0 && de >= demax) {
112 for(
size_t j=0; j<list_d[
A].size(); ++j) {
114 if(frag->
GetZ() !=
Z) {
continue; }
116 if(std::abs(de) <= tolerance || de > 0.0) {
117 res = (list_d[
A])[j];
129 G4int nfrag = fragment_pool.size();
130 for(
G4int i=0; i<nfrag; ++i) {
132 if(fr->
GetZ() == Z && fr->
GetA() == A &&
151 if(f1 == (list_p[A])[i]->GetFragment1() && f2 == (list_p[A])[i]->GetFragment2()
152 && std::abs((list_p[A])[i]->GetExcitationEnergy() - exc) < tolerance) {
168 G4int nn = list_u[
A].size();
170 if(f1 == (list_u[A])[i]->GetFragment1() && f2 == (list_u[A])[i]->GetFragment2()
171 && std::abs((list_u[A])[i]->GetExcitationEnergy() - exc) < tolerance) {
179 void G4FermiFragmentsPoolVI::Initialise()
181 static const G4int nmin = 8;
195 for(
G4int Z=3; Z<maxZ; ++
Z) {
198 for(
G4int A=Amin; A<Amax; ++
A) {
202 for(
size_t i=0; i<=
nn; ++i) {
214 G4int nfrag = fragment_pool.size();
215 for(
G4int i=0; i<nfrag; ++i) {
219 list_f[
A].push_back(f);
223 for(
G4int Z=0; Z<maxZ; ++
Z) {
225 for(
G4int A=A0; A<maxA; ++
A) {
226 if(IsInThePool(Z, A, 0.0)) {
continue; }
228 funstable.push_back(f);
229 list_g[
A].push_back(f);
235 for(
G4int i=0; i<nfrag; ++i) {
240 for(
G4int j=0; j<nfrag; ++j) {
244 if(A2 < A1 || (A2 == A1 && Z2 < Z1)) {
continue; }
247 if(Z >= maxZ || A >= maxA) {
continue; }
262 if(exc >= elim) {
continue; }
265 G4int kmax = list_f[
A].size();
266 for(
G4int k=0; k<kmax; ++k) {
267 if(Z != (list_f[A])[k]->GetZ()) {
continue; }
268 G4double exc1 = (list_f[
A])[k]->GetExcitationEnergy();
271 if(exc1 + tolerance < exc || IsInPhysPairs(f1, f2, exc1)) {
continue; }
273 list_p[
A].push_back(fpair);
274 (list_c[
A])[k]->AddChannel(fpair);
277 if(isFound) {
continue; }
278 kmax = list_g[
A].size();
279 for(
G4int k=0; k<kmax; ++k) {
280 if(Z != (list_g[A])[k]->GetZ()) {
continue; }
281 G4double exc1 = (list_g[
A])[k]->GetExcitationEnergy();
282 if(exc1 + tolerance < exc || IsInUnphysPairs(f1, f2, exc)
283 || (list_d[
A])[k]->GetNumberOfChannels() > nmin) {
continue; }
285 list_u[
A].push_back(fpair);
286 (list_d[
A])[k]->AddChannel(fpair);
293 G4int unphys = funstable.size();
294 for(
G4int i=0; i<nfrag; ++i) {
299 for(
G4int j=0; j<unphys; ++j) {
305 if(Z >= maxZ || A >= maxA) {
continue; }
315 G4int kmax = list_f[
A].size();
316 for(
G4int k=0; k<kmax; ++k) {
317 if(Z != (list_f[A])[k]->GetZ() ||
318 (list_c[A])[k]->GetNumberOfChannels() > 0) {
continue; }
319 G4double etot = (list_f[
A])[k]->GetTotalEnergy();
320 if(etot + tolerance >= minE) {
322 new G4FermiPair(f1,f2,(list_f[A])[k]->GetExcitationEnergy());
323 list_p[
A].push_back(fpair);
324 (list_c[
A])[k]->AddChannel(fpair);
329 if(isFound) {
continue; }
330 kmax = list_g[
A].size();
331 for(
G4int k=0; k<kmax; ++k) {
332 if(Z != (list_g[A])[k]->GetZ()) {
continue; }
333 G4double etot = (list_g[
A])[k]->GetTotalEnergy();
336 if(exc + tolerance < 0.0 || IsInUnphysPairs(f1, f2, exc)
337 || (list_d[
A])[k]->GetNumberOfChannels() > nmin) {
continue; }
339 list_u[
A].push_back(fpair);
340 (list_d[
A])[k]->AddChannel(fpair);
346 for(
G4int A=1; A<maxA; ++
A) {
347 for(
size_t j=0; j<list_c[
A].size(); ++j) {
353 const std::vector<const G4FermiPair*>& pairs = ch->
GetChannels();
355 for(
size_t i=0; i<nch; ++i) {
359 pairs[i]->GetFragment1(),
360 pairs[i]->GetFragment2());
367 for(
size_t i=0; i<nch-1; ++i) { prob[i] *= ptot; }
373 for(
G4int A=1; A<maxA; ++
A) {
374 for(
size_t j=0; j<list_d[
A].size(); ++j) {
380 const std::vector<const G4FermiPair*>& pairs = ch->
GetChannels();
382 for(
size_t i=0; i<nch; ++i) {
386 pairs[i]->GetFragment1(),
387 pairs[i]->GetFragment2());
394 for(
size_t i=0; i<nch-1; ++i) { prob[i] *= ptot; }
406 G4cout <<
" Z= " << f->
GetZ() <<
" A= " << std::setw(2) << f->
GetA()
417 G4cout <<
"----------------------------------------------------------------"
419 G4cout <<
"##### List of Fragments in the Fermi Fragment Pool #####"
423 G4int nfrag = fragment_pool.size();
424 for(
G4int i=0; i<nfrag; ++i) {
431 G4cout <<
"----------------------------------------------------------------"
433 G4cout <<
"### G4FermiFragmentPoolVI: fragments sorted by A" <<
G4endl;
434 for(
G4int A=1; A<maxA; ++
A) {
436 for(
size_t j=0; j<list_f[
A].size(); ++j) {
440 size_t nch = (list_c[
A])[j]->GetNumberOfChannels();
441 G4cout <<
" ("<<a1<<
","<<z1<<
"); Eex(MeV)= "
444 <<
"; Nchannels= " << nch
448 for(
size_t k=0; k<nch; ++k) {
449 const G4FermiPair* fpair = ((list_c[
A])[j]->GetChannels())[k];
456 <<
") prob= " << ((list_c[
A])[j]->GetProbabilities())[k]
462 G4cout <<
"----------------------------------------------------------------"
465 G4cout <<
"### G4FermiFragmentPoolVI: " << funstable.size()
466 <<
" unphysical fragments" <<
G4endl;
467 for(
G4int A=1; A<maxA; ++
A) {
469 for(
size_t j=0; j<list_g[
A].size(); ++j) {
473 size_t nch = (list_d[
A])[j]->GetNumberOfChannels();
474 G4cout <<
"("<<a1<<
","<<z1<<
"); Eex(MeV)= "
476 <<
"; Nchannels= " << nch
480 for(
size_t k=0; k<nch; ++k) {
481 const G4FermiPair* fpair = ((list_d[
A])[j]->GetChannels())[k];
488 <<
") prob= " << ((list_d[
A])[j]->GetProbabilities())[k]
495 G4cout <<
"----------------------------------------------------------------"
499 for(
G4int A=2; A<maxA; ++
A) {
501 for(
size_t j=0; j<list_p[
A].size(); ++j) {
508 G4cout <<
"("<<a1<<
","<<z1<<
")("<<a2<<
","<<z2<<
") % Eex(MeV)= "
509 << std::setw(8)<< (list_p[
A])[j]->GetExcitationEnergy()
515 G4cout <<
"----------------------------------------------------------------"
518 G4cout <<
"### Pairs of stable+unstable fragments: " <<
G4endl;
519 for(
G4int A=2; A<maxA; ++
A) {
521 for(
size_t j=0; j<list_u[
A].size(); ++j) {
528 G4cout <<
"("<<a1<<
","<<z1<<
")("<<a2<<
","<<z2<<
") % Eex(MeV)= "
529 << std::setw(8)<< (list_u[
A])[j]->GetExcitationEnergy()
535 G4cout <<
"----------------------------------------------------------------"
G4int GetMinA(G4int Z) const
G4double ComputeProbability(G4int Z, G4int A, G4int spin, G4double TotalE, const G4FermiFragment *f1, const G4FermiFragment *f2) const
~G4FermiFragmentsPoolVI()
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double GetCoulombBarrier(G4int Ares, G4int Zres, G4double Eex) const
G4int GetSpin(void) const
G4int SpinParity(size_t i) const
static constexpr double proton_mass_c2
const G4FermiFragment * GetFragment2() const
static constexpr double keV
const G4LevelManager * GetLevelManager(G4int Z, G4int A)
void DumpFragment(const G4FermiFragment *) const
const G4FermiChannels * ClosestChannels(G4int Z, G4int A, G4double mass) const
G4bool IsApplicable(G4int ZZ, G4int AA, G4double etot) const
const G4FermiFragment * GetFragment1() const
const std::vector< const G4FermiPair * > & GetChannels() const
G4float LevelEnergy(size_t i) const
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
static constexpr double neutron_mass_c2
static constexpr double MeV
size_t NumberOfTransitions() const
G4int GetMaxA(G4int Z) const
G4double GetFragmentMass(void) const
T max(const T t1, const T t2)
brief Return the largest of the two arguments
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
static constexpr double GeV
G4double GetTotalEnergy(void) const
size_t GetNumberOfChannels() const
std::vector< G4double > & GetProbabilities()
static G4NuclearLevelData * GetInstance()
G4double GetExcitationEnergy(void) const