59   if(0 == theInstance) {
 
   66 G4FermiFragmentsPool::G4FermiFragmentsPool()
 
   76   for(
size_t i=0; i<17; ++i) {
 
   77     size_t nn = list1[i].size();
 
   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   size_t nn = listextra.size();
 
   87   if(0 < nn) { 
for(
size_t j=0; j<
nn; ++j) { 
delete listextra[j]; }}
 
   88   nn = fragment_pool.size();
 
   89   if(0 < nn) { 
for(
size_t j=0; j<
nn; ++j) { 
delete fragment_pool[j]; }}
 
   92 void G4FermiFragmentsPool::Initialise()
 
  218   G4int nfrag = fragment_pool.size();
 
  221   for(
G4int i=0; i<nfrag; ++i) {
 
  222     std::vector<const G4VFermiFragment*> newvec;
 
  223     newvec.push_back(fragment_pool[i]);
 
  225     G4int A = fragment_pool[i]->GetA();
 
  226     list1[A].push_back(conf);
 
  229     G4cout << 
"### G4FermiFragmentPool: " << nfrag 
 
  230        << 
" fragments" << 
G4endl;
 
  231     for(
G4int A=1; A<maxA; ++A) {
 
  232       G4cout << 
"  A= " << A << 
" : Z= ";
 
  233       for(
size_t j=0; j<list1[A].size(); ++j) { 
 
  234     G4cout << (list1[A])[j]->GetZ() << 
"  "; 
 
  243   for(
G4int i=0; i<nfrag; ++i) {
 
  244     G4int Z1 = fragment_pool[i]->GetZ();
 
  245     G4int A1 = fragment_pool[i]->GetA();
 
  246     for(
G4int j=0; j<nfrag; ++j) {
 
  247       G4int Z2 = fragment_pool[j]->GetZ();
 
  248       G4int A2 = fragment_pool[j]->GetA();
 
  251       if(Z < maxZ && A < maxA) {
 
  252         if(IsAvailable(Z, A)){
 
  253       std::vector<const G4VFermiFragment*> newvec;
 
  254           newvec.push_back(fragment_pool[i]);
 
  255           newvec.push_back(fragment_pool[j]);
 
  256       if(!IsExist(Z, A, newvec)) { 
 
  258         list2[A].push_back(conf); 
 
  267     G4cout << 
"### Pairs of fragments: " << counter << 
G4endl;
 
  268     for(
G4int A=2; A<maxA; ++A) {
 
  270       for(
size_t j=0; j<list2[A].size(); ++j) {
 
  271     std::vector<const G4VFermiFragment*> vector = (list2[A])[j]->GetFragmentList(); 
 
  272     G4int a1=vector[0]->GetA();
 
  273     G4int z1=vector[0]->GetZ();
 
  274     G4int a2=vector[1]->GetA();
 
  275     G4int z2=vector[1]->GetZ();
 
  276     G4cout << 
"("<<a1<<
","<<z1<<
")("<<a2<<
","<<z2<<
") % "; 
 
  279       G4cout<<
"---------------------------------------------------------------------------------" 
  287   for(
G4int A1=2; A1<maxA; ++A1) {
 
  288     size_t nz = list2[A1].size();
 
  289     for(
size_t idx=0; idx<nz; ++idx) {
 
  297       for(
G4int j=0; j<nfrag; ++j) {
 
  298     G4int Z2 = fragment_pool[j]->GetZ();
 
  299     G4int A2 = fragment_pool[j]->GetA();
 
  302     if(Z < maxZ && A < maxA) {
 
  305       std::vector<const G4VFermiFragment*>  newvec;
 
  306       newvec.push_back(vec2[0]);
 
  307       newvec.push_back(vec2[1]);
 
  308       newvec.push_back(fragment_pool[j]);
 
  309       if(!IsExist(Z, A, newvec)) { 
 
  311         list3[A].push_back(conf3);
 
  321     G4cout << 
"### Triples of fragments: " << counter << 
G4endl;
 
  322     for(
G4int A=3; A<maxA; ++A) {
 
  324       for(
size_t j=0; j<list3[A].size(); ++j) { 
 
  325     std::vector<const G4VFermiFragment*> vector = (list3[A])[j]->GetFragmentList(); 
 
  326     G4int a1=vector[0]->GetA();
 
  327     G4int z1=vector[0]->GetZ();
 
  328     G4int a2=vector[1]->GetA();
 
  329     G4int z2=vector[1]->GetZ();
 
  330     G4int a3=vector[2]->GetA();
 
  331     G4int z3=vector[2]->GetZ();
 
  332     G4cout << 
"("<<a1<<
","<<z1<<
")("<<a2<<
","<<z2<<
")("<<a3<<
","<<z3<<
") % "; 
 
  335       G4cout<<
"---------------------------------------------------------------------------------" 
  343   for(
G4int A1=3; A1<maxA; ++A1) {
 
  344     size_t nz = list3[A1].size();
 
  345     for(
size_t idx=0; idx<nz; ++idx) {
 
  355       for(
G4int j=0; j<nfrag; ++j) {
 
  356     G4int Z2 = fragment_pool[j]->GetZ();
 
  357     G4int A2 = fragment_pool[j]->GetA();
 
  360     if(Z < maxZ && A < maxA) {
 
  363       std::vector<const G4VFermiFragment*>  newvec;
 
  364       newvec.push_back(vec3[0]);
 
  365       newvec.push_back(vec3[1]);
 
  366       newvec.push_back(vec3[2]);
 
  367       newvec.push_back(fragment_pool[j]);
 
  368       if(!IsExist(Z, A, newvec)) { 
 
  370         list4[A].push_back(conf4);
 
  379   for(
G4int A1=2; A1<maxA; ++A1) {
 
  380     size_t nz1 = list2[A1].size();
 
  381     for(
size_t id1=0; id1<nz1; ++id1) {
 
  389       for(
G4int A2=2; A2<maxA; ++A2) {
 
  390     size_t nz2 = list2[A2].size();
 
  391     for(
size_t id2=0; id2<nz2; ++id2) {
 
  401       if(Z < maxZ && A < maxA) {
 
  406         std::vector<const G4VFermiFragment*>  newvec;
 
  407         newvec.push_back(vec1[0]);
 
  408         newvec.push_back(vec1[1]);
 
  409         newvec.push_back(vec2[0]);
 
  410         newvec.push_back(vec2[1]);
 
  411         if(!IsExist(Z, A, newvec)) { 
 
  413           list4[A].push_back(conf4);
 
  425     G4cout << 
"### Quartets of fragments: " << counter << 
G4endl;
 
  426     for(
G4int A=4; A<maxA; ++A) {
 
  428       for(
size_t j=0; j<list4[A].size(); ++j) { 
 
  429     std::vector<const G4VFermiFragment*> vector = (list4[A])[j]->GetFragmentList(); 
 
  430     G4int a1=vector[0]->GetA();
 
  431     G4int z1=vector[0]->GetZ();
 
  432     G4int a2=vector[1]->GetA();
 
  433     G4int z2=vector[1]->GetZ();
 
  434     G4int a3=vector[2]->GetA();
 
  435     G4int z3=vector[2]->GetZ();
 
  436     G4int a4=vector[3]->GetA();
 
  437     G4int z4=vector[3]->GetZ();
 
  439     G4cout << 
"("<<a1<<
","<<z1<<
")("<<a2<<
","<<z2<<
")("<<a3<<
","<<z3<<
")("<<a4<<
","<<z4<<
") % "; 
 
  442       G4cout<<
"---------------------------------------------------------------------------------" 
  449 const std::vector<G4FermiConfiguration*>* 
 
  455   std::vector<G4FermiConfiguration*>* 
v = 
new std::vector<G4FermiConfiguration*>;
 
  456   if(Z >= maxZ || A >= maxA) { 
return v; }
 
  462   size_t nz = list2[A].size();
 
  464     for(
size_t j=0; j<nz; ++j) {
 
  475   nz = list3[A].size();
 
  477     for(
size_t j=0; j<nz; ++j) {
 
  488   nz = list4[A].size();
 
  490     for(
size_t j=0; j<nz; ++j) {
 
  504       G4cout<<
"Total number of configurations = "<<nconf<<
" for A= " 
  505         <<A<<
"   Z= "<<Z<<
"   E*= "<< ExEn<<
" MeV"<<
G4endl;
 
  506       size_t size_vector_conf = v->size();
 
  507       for(
size_t jc=0; jc<size_vector_conf; ++jc) {     
 
  508     std::vector<const G4VFermiFragment*> v_frag = (*v)[jc]->GetFragmentList();
 
  509     size_t size_vector_fragments = v_frag.size();
 
  510     G4cout<<size_vector_fragments<<
"-body configuration "<<jc+1<<
": ";
 
  511     for(
size_t jf=0;jf<size_vector_fragments;++jf){
 
  512       G4int af= v_frag[jf]->GetA();
 
  513       G4int zf= v_frag[jf]->GetZ();
 
  514       G4double ex=v_frag[jf]->GetExcitationEnergy();
 
  515       G4cout<<
"(a="<<af<<
", z="<<zf<<
", ex="<<ex<<
")  ";
 
  518     G4cout<<
"-----------------------------------------------------"<<
G4endl;    
 
  525   nz = list1[A].size();
 
  528     for(
size_t j=0; j<nz; ++j) {
 
  539         G4cout<<
"Total number of configurations = "<<nconf<<
" for A= " 
  540           <<A<<
"   Z= "<<Z<<
"   E*= "<< ExEn<<
" MeV"<<
G4endl;
 
  541         size_t size_vector_conf=v->size();
 
  542         for(
size_t jc=0; jc<size_vector_conf; ++jc) {     
 
  543           std::vector<const G4VFermiFragment*> v_frag = (*v)[jc]->GetFragmentList();
 
  544           size_t size_vector_fragments=v_frag.size();
 
  545           G4cout<<
"1 Fragment configuration "<<jc+1<<
": ";
 
  546           for(
size_t jf=0;jf<size_vector_fragments;++jf){
 
  547         G4int af= v_frag[jf]->GetA();
 
  548         G4int zf= v_frag[jf]->GetZ();
 
  549         G4double ex=v_frag[jf]->GetExcitationEnergy();
 
  550         G4cout<<
"(a="<<af<<
", z="<<zf<<
", ex="<<ex<<
")  ";
 
  553           G4cout<<
"-----------------------------------------------------"<<
G4endl;    
 
  566   nz = listextra.size();
 
  568     for(
size_t j=0; j<nz; ++j) {
 
  570       if(Z == conf->
GetZ() && A == conf->
GetA() && 
 
  576       G4cout<<
"Total number of configurations = "<<nconf<<
" for A= " 
  577         <<A<<
"   Z= "<<Z<<
"   E*= "<< ExEn<<
" MeV"<<
G4endl;
 
  578       size_t size_vector_conf=v->size();
 
  579       for(
size_t jc=0; jc<size_vector_conf; ++jc) {     
 
  580         std::vector<const G4VFermiFragment*> v_frag = (*v)[jc]->GetFragmentList();
 
  581         size_t size_vector_fragments=v_frag.size();
 
  582         G4cout<<
"Found exotic configuration -> configuration "<<jc+1<<
": ";
 
  583         for(
size_t jf=0;jf<size_vector_fragments;++jf){
 
  584           G4int af= v_frag[jf]->GetA();
 
  585           G4int zf= v_frag[jf]->GetZ();
 
  586           G4double ex=v_frag[jf]->GetExcitationEnergy();
 
  587           G4cout<<
"(a="<<af<<
", z="<<zf<<
", ex="<<ex<<
")  ";
 
  590         G4cout<<
"-----------------------------------------------------"<<
G4endl;    
 
  602     std::vector<const G4VFermiFragment*>  newvec;
 
  604     for(
G4int i=0; i<A; ++i) {
 
  605       if(i == Z) { idx = 0; }
 
  606       newvec.push_back(fragment_pool[idx]);
 
  609     listextra.push_back(conf);
 
  613       G4cout<<
"Total number of configurations = "<<nconf<<
G4cout;
 
  615       G4cout<<
"Total number of configurations = "<<nconf<<
" for A= " 
  616         <<A<<
"   Z= "<<Z<<
"   E*= "<< ExEn<<
" MeV"<<
G4endl;
 
  617       size_t size_vector_conf=v->size();
 
  618       for(
size_t jc=0; jc<size_vector_conf; ++jc) {     
 
  619     std::vector<const G4VFermiFragment*> v_frag = (*v)[jc]->GetFragmentList();
 
  620     size_t size_vector_fragments=v_frag.size();
 
  621     G4cout<<
"New exotic configuration -> configuration "<<jc+1<<
": ";
 
  622     for(
size_t jf=0;jf<size_vector_fragments;++jf){
 
  623       G4int af= v_frag[jf]->GetA();
 
  624       G4int zf= v_frag[jf]->GetZ();
 
  625       G4double ex=v_frag[jf]->GetExcitationEnergy();
 
  626       G4cout<<
"(a="<<af<<
", z="<<zf<<
", ex="<<ex<<
")  ";
 
  629     G4cout<<
"-----------------------------------------------------"<<
G4endl;    
 
  640       G4cout<<
"Total number of configurations = "<<nconf<<
G4endl;
 
  642       G4cout<<
"Total number of configurations = "<<nconf<<
" for A= " 
  643         <<A<<
"   Z= "<<Z<<
"   E*= "<< ExEn<<
" MeV"<<
G4endl;
 
  644       size_t size_vector_conf=v->size();
 
  645       for(
size_t jc=0; jc<size_vector_conf; ++jc) {     
 
  646     std::vector<const G4VFermiFragment*> v_frag = (*v)[jc]->GetFragmentList();
 
  647     size_t size_vector_fragments=v_frag.size();
 
  648     G4cout<<
"Only evaporation is possible -> configuration  "<<jc+1<<
": ";
 
  649     for(
size_t jf=0;jf<size_vector_fragments;++jf){
 
  650       G4int af= v_frag[jf]->GetA();
 
  651       G4int zf= v_frag[jf]->GetZ();
 
  652       G4double ex=v_frag[jf]->GetExcitationEnergy();
 
  653       G4cout<<
"(a="<<af<<
", z="<<zf<<
", ex="<<ex<<
")  ";
 
  656     G4cout<<
"-----------------------------------------------------"<<
G4endl;    
 
  664     G4cout << 
"G4FermiFragmentsPool::GetConfigurationList: WARNING: not " 
  665        << 
"able decay fragment Z= " << Z << 
" A= " << A
 
  672 G4FermiFragmentsPool::IsExist(
G4int Z, 
G4int A, 
 
  673                   std::vector<const G4VFermiFragment*>& newconf)
 
  675   size_t nn = newconf.size();
 
  677   for(
size_t i=0; i<
nn; ++i) { mass +=  newconf[i]->GetTotalEnergy(); }
 
  680     size_t nz = list2[A].size();
 
  682       for(
size_t j=0; j<nz; ++j) {
 
  684     if(Z == conf->
GetZ() && A == conf->
GetA() && 
 
  685        std::fabs(mass - conf->
GetMass()) < 
keV) {
return true; }
 
  692     size_t nz = list3[A].size();
 
  694       for(
size_t j=0; j<nz; ++j) {
 
  696     if(Z == conf->
GetZ() && A == conf->
GetA() && 
 
  697        std::fabs(mass - conf->
GetMass()) < 
keV) { 
return true; }
 
  704     size_t nz = list4[A].size();
 
  706       for(
size_t j=0; j<nz; ++j) {
 
  708     if(Z == conf->
GetZ() && A == conf->
GetA() && 
 
  709        std::fabs(mass - conf->
GetMass()) < 
keV) { 
return true; }
 
  721   if(Z >= maxZ || A >= maxA) { 
return f; }
 
  722   size_t nz = list1[A].size();
 
  724     for(
size_t j=0; j<nz; ++j) {