58   if(0 == theInstance) {
 
   60     theInstance = &instance;
 
   65 G4FermiFragmentsPool::G4FermiFragmentsPool()
 
   76   for(
size_t i=0; i<17; ++i) {
 
   78     if(0 < nn) { 
for(
size_t j=0; j<
nn; ++j) { 
delete (list1[i])[j]; }}
 
   80     if(0 < nn) { 
for(
size_t j=0; j<
nn; ++j) { 
delete (list2[i])[j]; }}
 
   82     if(0 < nn) { 
for(
size_t j=0; j<
nn; ++j) { 
delete (list3[i])[j]; }}
 
   84     if(0 < nn) { 
for(
size_t j=0; j<
nn; ++j) { 
delete (list4[i])[j]; }}
 
   86   nn = fragment_pool.size();
 
   87   if(0 < nn) { 
for(
size_t j=0; j<
nn; ++j) { 
delete fragment_pool[j]; }}
 
   93   if     (2 == Z && 5 == A) { res = 
false; }
 
   94   else if(3 == Z && 5 == A) { res = 
false; }
 
   95   else if(4 == Z && 8 == A) { res = 
false; }
 
   96   else if(5 == Z && 9 == A) { res = 
false; }
 
  113   return &thePhaseSpace;
 
  116 void G4FermiFragmentsPool::Initialise()
 
  242   G4int nfrag = fragment_pool.size();
 
  243   std::vector<const G4VFermiFragment*> newvec;
 
  248   for(
G4int i=0; i<nfrag; ++i) {
 
  249     newvec[0] = fragment_pool[i];
 
  251     G4int A = fragment_pool[i]->GetA();
 
  252     list1[
A].push_back(conf);
 
  255     G4cout << 
"### G4FermiFragmentPool: " << nfrag 
 
  256        << 
" fragments" << 
G4endl;
 
  257     for(
G4int A=1; A<maxA; ++
A) {
 
  258       G4cout << 
"  A= " << A << 
" : Z= ";
 
  259       for(
size_t j=0; j<list1[
A].size(); ++j) { 
 
  260     G4cout << (list1[
A])[j]->GetZ() << 
"  "; 
 
  270   for(
G4int i=0; i<nfrag; ++i) {
 
  271     G4int Z1 = fragment_pool[i]->GetZ();
 
  272     G4int A1 = fragment_pool[i]->GetA();
 
  273     for(
G4int j=0; j<nfrag; ++j) {
 
  274       G4int Z2 = fragment_pool[j]->GetZ();
 
  275       G4int A2 = fragment_pool[j]->GetA();
 
  278       if(Z < maxZ && A < maxA && IsAvailable(Z, A)) {
 
  279     newvec[0] = fragment_pool[i];
 
  280     newvec[1] = fragment_pool[j];
 
  281     if(!IsExist(Z, A, newvec)) { 
 
  283       list2[
A].push_back(conf); 
 
  291     G4cout << 
"### Pairs of fragments: " << counter << 
G4endl;
 
  292     for(
G4int A=2; A<maxA; ++
A) {
 
  294       for(
size_t j=0; j<list2[
A].size(); ++j) {
 
  295         const std::vector<const G4VFermiFragment*>* vec 
 
  296       = (list2[
A])[j]->GetFragmentList(); 
 
  297     G4int a1=(*vec)[0]->GetA();
 
  298     G4int z1=(*vec)[0]->GetZ();
 
  299     G4int a2=(*vec)[1]->GetA();
 
  300     G4int z2=(*vec)[1]->GetZ();
 
  301     G4cout << 
"("<<a1<<
","<<z1<<
")("<<a2<<
","<<z2<<
") % "; 
 
  304       G4cout<<
"----------------------------------------------------------------" 
  313   for(
G4int A1=2; A1<maxA; ++A1) {
 
  314     size_t nz = list2[A1].size();
 
  315     for(
size_t idx=0; idx<nz; ++idx) {
 
  318       const std::vector<const G4VFermiFragment*>* vec2 = 
 
  320       for(
G4int j=0; j<nfrag; ++j) {
 
  321     G4int Z2 = fragment_pool[j]->GetZ();
 
  322     G4int A2 = fragment_pool[j]->GetA();
 
  325     if(Z < maxZ && A < maxA && IsAvailable(Z, A)) {
 
  326       newvec[0] = (*vec2)[0];
 
  327       newvec[1] = (*vec2)[1];
 
  328       newvec[2] = fragment_pool[j];
 
  329       if(!IsExist(Z, A, newvec)) { 
 
  331         list3[
A].push_back(conf3);
 
  340     G4cout << 
"### Triples of fragments: " << counter << 
G4endl;
 
  341     for(
G4int A=3; A<maxA; ++
A) {
 
  343       for(
size_t j=0; j<list3[
A].size(); ++j) { 
 
  344     const std::vector<const G4VFermiFragment*>* vec 
 
  345       = (list3[
A])[j]->GetFragmentList(); 
 
  346     G4int a1=(*vec)[0]->GetA();
 
  347     G4int z1=(*vec)[0]->GetZ();
 
  348     G4int a2=(*vec)[1]->GetA();
 
  349     G4int z2=(*vec)[1]->GetZ();
 
  350     G4int a3=(*vec)[2]->GetA();
 
  351     G4int z3=(*vec)[2]->GetZ();
 
  352     G4cout << 
"("<<a1<<
","<<z1<<
")("<<a2<<
","<<z2<<
")("<<a3<<
","<<z3<<
") % ";
 
  355       G4cout<<
"----------------------------------------------------------------" 
  364   for(
G4int A1=3; A1<maxA; ++A1) {
 
  365     size_t nz = list3[A1].size();
 
  366     for(
size_t idx=0; idx<nz; ++idx) {
 
  369       const std::vector<const G4VFermiFragment*>* vec3 = 
 
  371       for(
G4int j=0; j<nfrag; ++j) {
 
  372     G4int Z2 = fragment_pool[j]->GetZ();
 
  373     G4int A2 = fragment_pool[j]->GetA();
 
  376     if(Z < maxZ && A < maxA && IsAvailable(Z, A)) {
 
  377       newvec[0] = (*vec3)[0];
 
  378       newvec[1] = (*vec3)[1];
 
  379       newvec[2] = (*vec3)[2];
 
  380       newvec[3] = fragment_pool[j];
 
  381       if(!IsExist(Z, A, newvec)) { 
 
  383         list4[
A].push_back(conf4);
 
  391   for(
G4int A1=2; A1<maxA; ++A1) {
 
  392     size_t nz1 = list2[A1].size();
 
  393     for(
size_t id1=0; id1<nz1; ++id1) {
 
  396       const std::vector<const G4VFermiFragment*>* vec1 = 
 
  398       for(
G4int A2=2; A2<maxA; ++A2) {
 
  399     size_t nz2 = list2[A2].size();
 
  400     for(
size_t id2=0; id2<nz2; ++id2) {
 
  403       const std::vector<const G4VFermiFragment*>* vec2 = 
 
  407       if(Z < maxZ && A < maxA && IsAvailable(Z, A)) {
 
  408         newvec[0] = (*vec1)[0];
 
  409         newvec[1] = (*vec1)[1];
 
  410         newvec[2] = (*vec2)[0];
 
  411         newvec[3] = (*vec2)[1];
 
  412         if(!IsExist(Z, A, newvec)) { 
 
  415           list4[
A].push_back(conf4);
 
  426     G4cout << 
"### Quartets of fragments: " << counter << 
G4endl;
 
  427     for(
G4int A=4; A<maxA; ++
A) {
 
  429       for(
size_t j=0; j<list4[
A].size(); ++j) { 
 
  430     const std::vector<const G4VFermiFragment*>* vec 
 
  431       = (list4[
A])[j]->GetFragmentList(); 
 
  432     G4int a1=(*vec)[0]->GetA();
 
  433     G4int z1=(*vec)[0]->GetZ();
 
  434     G4int a2=(*vec)[1]->GetA();
 
  435     G4int z2=(*vec)[1]->GetZ();
 
  436     G4int a3=(*vec)[2]->GetA();
 
  437     G4int z3=(*vec)[2]->GetZ();
 
  438     G4int a4=(*vec)[3]->GetA();
 
  439     G4int z4=(*vec)[3]->GetZ();
 
  441     G4cout << 
"("<<a1<<
","<<z1<<
")("<<a2<<
","<<z2<<
")("<<a3<<
","<<z3<<
")(" 
  442            <<a4<<
","<<z4<<
") % "; 
 
  445       G4cout<<
"----------------------------------------------------------------" 
  454   if(Z >= maxZ || A >= maxA || A <= 0) { 
return false; }
 
  456   size_t nz = list2[
A].size();
 
  458     for(
size_t j=0; j<nz; ++j) {
 
  460       if(Z == conf->
GetZ() && mass >= conf->
GetMass()) { 
return true; }
 
  464   nz = list3[
A].size();
 
  466     for(
size_t j=0; j<nz; ++j) {
 
  468       if(Z == conf->
GetZ() && mass >= conf->
GetMass()) { 
return true; }
 
  472   nz = list4[
A].size();
 
  474     for(
size_t j=0; j<nz; ++j) {
 
  476       if(Z == conf->
GetZ() && mass >= conf->
GetMass()) { 
return true; }
 
  481   nz = list1[
A].size();
 
  483     for(
size_t j=0; j<nz; ++j) {
 
  493 const std::vector<const G4FermiConfiguration*>* 
 
  496   std::vector<const G4FermiConfiguration*>* v = 
 
  497     new std::vector<const G4FermiConfiguration*>;
 
  498   if(Z >= maxZ || A >= maxA) { 
return v; }
 
  504   size_t nz = list2[
A].size();
 
  506     for(
size_t j=0; j<nz; ++j) {
 
  515   nz = list3[
A].size();
 
  517     for(
size_t j=0; j<nz; ++j) {
 
  526   nz = list4[
A].size();
 
  528     for(
size_t j=0; j<nz; ++j) {
 
  540       G4cout<<
"Total number of configurations = "<<v->size()<<
" for A= " 
  541         <<A<<
"   Z= "<<Z<<
"   E*= "<< ExEn<<
" MeV"<<
G4endl;
 
  542       size_t size_vector_conf = v->size();
 
  543       for(
size_t jc=0; jc<size_vector_conf; ++jc) {     
 
  544     const std::vector<const G4VFermiFragment*>* v_frag = 
 
  545       (*v)[jc]->GetFragmentList();
 
  546     size_t size_vector_fragments = v_frag->size();
 
  547     G4cout<<size_vector_fragments<<
"-body configuration "<<jc+1<<
": ";
 
  548     for(
size_t jf=0;jf<size_vector_fragments;++jf){
 
  549       G4int af= (*v_frag)[jf]->GetA();
 
  550       G4int zf= (*v_frag)[jf]->GetZ();
 
  551       G4double ex=(*v_frag)[jf]->GetExcitationEnergy();
 
  552       G4cout<<
"(a="<<af<<
", z="<<zf<<
", ex="<<ex<<
")  ";
 
  555     G4cout<<
"-----------------------------------------------------"<<
G4endl;
 
  562   nz = list1[
A].size();
 
  564     for(
size_t j=0; j<nz; ++j) {
 
  574         G4cout<<
"Only 1 configurations for A= " 
  575           <<A<<
"   Z= "<<Z<<
"   E*= "<< ExEn<<
" MeV"<<
G4endl;
 
  576         const std::vector<const G4VFermiFragment*>* v_frag 
 
  577           = (*v)[0]->GetFragmentList();
 
  578         size_t size_vector_fragments=v_frag->size();
 
  579         G4cout<<
"1 Fragment configuration: ";
 
  580         for(
size_t jf=0;jf<size_vector_fragments;++jf){
 
  581           G4int af= (*v_frag)[jf]->GetA();
 
  582           G4int zf= (*v_frag)[jf]->GetZ();
 
  583           G4double ex=(*v_frag)[jf]->GetExcitationEnergy();
 
  584           G4cout<<
"(a="<<af<<
", z="<<zf<<
", ex="<<ex<<
")  ";
 
  587         G4cout<<
"-----------------------------------------------------"<<
G4endl;    
 
  596     G4cout << 
"G4FermiFragmentsPool::GetConfigurationList: WARNING: not " 
  597        << 
"able decay fragment Z= " << Z << 
" A= " << A
 
  604           std::vector<const G4VFermiFragment*>& newconf)
 const 
  606   size_t nn = newconf.size();
 
  608   for(
size_t i=0; i<
nn; ++i) { mass +=  newconf[i]->GetTotalEnergy(); }
 
  611     size_t nz = list2[
A].size();
 
  613       for(
size_t j=0; j<nz; ++j) {
 
  615     if(Z == conf->
GetZ() && A == conf->
GetA() && 
 
  616        std::fabs(mass - conf->
GetMass()) < 
keV) {
return true; }
 
  623     size_t nz = list3[
A].size();
 
  625       for(
size_t j=0; j<nz; ++j) {
 
  627     if(Z == conf->
GetZ() && A == conf->
GetA() && 
 
  628        std::fabs(mass - conf->
GetMass()) < 
keV) { 
return true; }
 
  635     size_t nz = list4[
A].size();
 
  637       for(
size_t j=0; j<nz; ++j) {
 
  639     if(Z == conf->
GetZ() && A == conf->
GetA() && 
 
  640        std::fabs(mass - conf->
GetMass()) < 
keV) { 
return true; }
 
  652   if(Z < maxZ && A < maxA) { 
 
  653     size_t nz = list1[
A].size();
 
  654     for(
size_t j=0; j<nz; ++j) {
 
  656       if(Z == conf->
GetZ()) { 
 
  676   G4cout << 
"##### List of Fragments in the Fermi Fragment Pool #####"  
  678   G4int nfrag = fragment_pool.size();
 
  679   for(
G4int i=0; i<nfrag; ++i) {
 
static G4double GetNuclearMass(const G4double A, const G4double Z)
 
const G4VFermiFragment * GetFragment(G4int Z, G4int A) const 
 
G4bool IsApplicable(G4int Z, G4int A, G4double mass) const 
 
G4GLOB_DLL std::ostream G4cout
 
double A(double temperature)
 
void DumpFragment(const G4VFermiFragment *f) const 
 
static constexpr double GeV
 
G4double GetExcitationEnergy(void) const 
 
G4double GetFragmentMass(void) const 
 
static constexpr double MeV
 
static G4FermiFragmentsPool * Instance()
 
const std::vector< const G4VFermiFragment * > * GetFragmentList() const 
 
static constexpr double keV
 
const std::vector< const G4FermiConfiguration * > * GetConfigurationList(G4int Z, G4int A, G4double mass) const 
 
const G4FermiPhaseSpaceDecay * GetFermiPhaseSpaceDecay() const