53 fragment_pool.reserve(991);
59 for(
G4int i=0; i<maxA; ++i) {
60 for(
auto & ptr : list_p[i]) {
delete ptr; ptr =
nullptr; }
61 for(
auto & ptr : list_c[i]) {
delete ptr; ptr =
nullptr; }
63 for(
auto & ptr : fragment_pool) {
delete ptr; ptr =
nullptr; }
73 for(std::size_t j=0; j<(list_c[
A]).size(); ++j) {
75 if(frag->
GetZ() !=
Z) {
continue; }
80 if(std::abs(de) <= tolerance) {
86 if(de >= 0.0 && de <= demax) {
99 for(
auto const& ptr : list_f[
A]) {
100 if(ptr->GetZ() ==
Z) {
return true; }
108 for(
auto const& fr : fragment_pool) {
109 if(fr->GetZ() ==
Z && fr->GetA() ==
A &&
110 std::abs(exc - fr->GetExcitationEnergy()) < tolerance)
120 for(std::size_t j=0; j<(list_f[
A]).size(); ++j) {
122 if(frag->
GetZ() ==
Z) {
124 (list_c[
A])[j]->GetNumberOfChannels() > 0) {
return true; }
130G4bool G4FermiFragmentsPoolVI::IsInPhysPairs(
134 for(
auto const& ptr : list_p[
A]) {
135 if(f1 == ptr->GetFragment1() && f2 == ptr->GetFragment2()) {
142void G4FermiFragmentsPoolVI::Initialise()
169 for(std::size_t i=0; i<=
nn; ++i) {
177 if(exc >= elimf) {
continue; }
180 if(IsInThePool(
Z,
A, excd)) {
continue; }
188 const std::size_t lfmax[maxA] = {
189 0, 2, 1, 2, 1, 2, 8, 19, 28, 56, 70, 104, 74, 109, 143, 212, 160};
191 list_f[
A].reserve(lfmax[
A]);
192 list_c[
A].reserve(lfmax[
A]);
194 const std::size_t lfch[maxA] = {
195 0, 0, 0, 0, 0, 1, 4, 8, 6, 13, 27, 40, 29, 21, 31, 32, 30};
197 for(
auto const& f : fragment_pool) {
199 G4double exc = f->GetExcitationEnergy();
200 list_f[
A].push_back(f);
209 for(
G4int i=0; i<nfrag; ++i) {
214 for(
G4int j=0; j<nfrag; ++j) {
218 if(A2 < A1 || (A2 == A1 && Z2 < Z1)) {
continue; }
222 if(
Z >= maxZ ||
A >= maxA || IsInPhysPairs(f1, f2)) {
continue; }
242 if(exc >= elim) {
continue; }
244 std::size_t kmax = list_f[
A].size();
245 for(std::size_t k=0; k<kmax; ++k) {
247 if(
Z == f3->
GetZ() &&
251 list_p[
A].push_back(fpair);
253 (list_c[
A])[k]->AddChannel(fpair);
260 for(std::size_t j=0; j<list_c[
A].size(); ++j) {
266 const std::vector<const G4FermiPair*>& pairs = ch->
GetChannels();
268 for(std::size_t i=0; i<nch; ++i) {
272 pairs[i]->GetFragment1(),
273 pairs[i]->GetFragment2());
280 for(std::size_t i=0; i<nch-1; ++i) { prob[i] *= ptot; }
292 G4cout <<
" Z= " << f->
GetZ() <<
" A= " << std::setw(2) << f->
GetA()
295 <<
" 2s= " << f->
GetSpin() <<
" IsStable: "
304 G4cout <<
"----------------------------------------------------------------"
306 G4cout <<
"##### List of Fragments in the Fermi Fragment Pool #####"
308 std::size_t nfrag = fragment_pool.size();
309 G4cout <<
" For stable " << nfrag <<
" Elim(MeV) = "
310 << elim/CLHEP::MeV <<
G4endl;
311 for(std::size_t i=0; i<nfrag; ++i) {
317 G4cout <<
"----------------------------------------------------------------"
319 G4cout <<
"### G4FermiFragmentPoolVI: fragments sorted by A" <<
G4endl;
322 std::size_t ama[maxA];
327 for(std::size_t j=0; j<list_f[
A].size(); ++j) {
331 std::size_t nch = (list_c[
A])[j]->GetNumberOfChannels();
332 am = std::max(am, nch);
333 G4cout <<
" ("<<a1<<
","<<z1<<
"); Eex(MeV)= "
336 <<
"; Nchannels= " << nch
338 (z1*proton_mass_c2 + (a1 - z1)*neutron_mass_c2)
340 for(std::size_t k=0; k<nch; ++k) {
341 const G4FermiPair* fpair = ((list_c[
A])[j]->GetChannels())[k];
348 <<
") prob= " << ((list_c[
A])[j]->GetProbabilities())[k]
358 for(
G4int j=0; j<maxA; ++j) {
G4cout << list_f[j].size() <<
", "; }
362 for (std::size_t j=0; j<maxA; ++j) {
G4cout << ama[j] <<
", "; }
366 for(
G4int j=0; j<maxA; ++j) {
G4cout << list_p[j].size() <<
", "; }
369 G4cout <<
"----------------------------------------------------------------"
373 prec =
G4cout.precision(6);
376 for(std::size_t j=0; j<list_p[
A].size(); ++j) {
383 G4cout <<
"("<<a1<<
","<<z1<<
")("<<a2<<
","<<z2<<
") % Eex(MeV)= "
384 << std::setw(8)<< (list_p[
A])[j]->GetExcitationEnergy()
390 G4cout <<
"----------------------------------------------------------------"
G4GLOB_DLL std::ostream G4cout
G4double GetMaxLifeTime() const
G4double GetFBUEnergyLimit() const
G4double GetMinExcitation() const
size_t GetNumberOfChannels() const
const std::vector< const G4FermiPair * > & GetChannels() const
std::vector< G4double > & GetProbabilities()
G4double ComputeProbability(G4int Z, G4int A, G4int spin, G4double TotalE, const G4FermiFragment *f1, const G4FermiFragment *f2) const
G4double GetExcitationEnergy() const
G4double GetFragmentMass() const
G4double GetCoulombBarrier(G4int Ares, G4int Zres, G4double Eex) const
G4double GetTotalEnergy(void) const
~G4FermiFragmentsPoolVI()
G4bool IsPhysical(G4int Z, G4int A) const
G4bool HasChannels(G4int Z, G4int A, G4double exc) const
const G4FermiChannels * ClosestChannels(G4int Z, G4int A, G4double mass) const
void DumpFragment(const G4FermiFragment *) const
const G4FermiFragment * GetFragment2() const
const G4FermiFragment * GetFragment1() const
G4double LevelEnergy(const std::size_t i) const
std::size_t NumberOfTransitions() const
G4int SpinTwo(const std::size_t i) const
G4double LifeTime(const std::size_t i) const
G4float MaxLevelEnergy(G4int Z, G4int A) const
G4DeexPrecoParameters * GetParameters()
G4int GetMinA(G4int Z) const
const G4LevelManager * GetLevelManager(G4int Z, G4int A)
static G4NuclearLevelData * GetInstance()
G4int GetMaxA(G4int Z) const
static G4double GetNuclearMass(const G4double A, const G4double Z)