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]; }}
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; }
243 std::vector<const G4VFermiFragment*> newvec;
248 for(
G4int i=0; i<nfrag; ++i) {
255 G4cout <<
"### G4FermiFragmentPool: " << nfrag
256 <<
" fragments" <<
G4endl;
258 G4cout <<
" A= " <<
A <<
" : Z= ";
259 for(
size_t j=0; j<
list1[
A].size(); ++j) {
270 for(
G4int i=0; i<nfrag; ++i) {
273 for(
G4int j=0; j<nfrag; ++j) {
291 G4cout <<
"### Pairs of fragments: " << counter <<
G4endl;
294 for(
size_t j=0; j<
list2[
A].size(); ++j) {
295 const std::vector<const G4VFermiFragment*>* vec
296 = (
list2[
A])[j]->GetFragmentList();
298 G4int z1=(*vec)[0]->GetZ();
300 G4int z2=(*vec)[1]->GetZ();
301 G4cout <<
"("<<a1<<
","<<z1<<
")("<<a2<<
","<<z2<<
") % ";
304 G4cout<<
"----------------------------------------------------------------"
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) {
326 newvec[0] = (*vec2)[0];
327 newvec[1] = (*vec2)[1];
331 list3[
A].push_back(conf3);
340 G4cout <<
"### Triples of fragments: " << counter <<
G4endl;
343 for(
size_t j=0; j<
list3[
A].size(); ++j) {
344 const std::vector<const G4VFermiFragment*>* vec
345 = (
list3[
A])[j]->GetFragmentList();
347 G4int z1=(*vec)[0]->GetZ();
349 G4int z2=(*vec)[1]->GetZ();
351 G4int z3=(*vec)[2]->GetZ();
352 G4cout <<
"("<<a1<<
","<<z1<<
")("<<a2<<
","<<z2<<
")("<<a3<<
","<<z3<<
") % ";
355 G4cout<<
"----------------------------------------------------------------"
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) {
377 newvec[0] = (*vec3)[0];
378 newvec[1] = (*vec3)[1];
379 newvec[2] = (*vec3)[2];
383 list4[
A].push_back(conf4);
392 size_t nz1 =
list2[A1].size();
393 for(
size_t id1=0; id1<nz1; ++id1) {
396 const std::vector<const G4VFermiFragment*>* vec1 =
399 size_t nz2 =
list2[A2].size();
400 for(
size_t id2=0; id2<nz2; ++id2) {
403 const std::vector<const G4VFermiFragment*>* vec2 =
408 newvec[0] = (*vec1)[0];
409 newvec[1] = (*vec1)[1];
410 newvec[2] = (*vec2)[0];
411 newvec[3] = (*vec2)[1];
415 list4[
A].push_back(conf4);
426 G4cout <<
"### Quartets of fragments: " << counter <<
G4endl;
429 for(
size_t j=0; j<
list4[
A].size(); ++j) {
430 const std::vector<const G4VFermiFragment*>* vec
431 = (
list4[
A])[j]->GetFragmentList();
433 G4int z1=(*vec)[0]->GetZ();
435 G4int z2=(*vec)[1]->GetZ();
437 G4int z3=(*vec)[2]->GetZ();
439 G4int z4=(*vec)[3]->GetZ();
441 G4cout <<
"("<<a1<<
","<<z1<<
")("<<a2<<
","<<z2<<
")("<<a3<<
","<<z3<<
")("
442 <<a4<<
","<<z4<<
") % ";
445 G4cout<<
"----------------------------------------------------------------"
455 size_t nz =
list2[
A].size();
457 for(
size_t j=0; j<nz; ++j) {
459 if(Z == conf->
GetZ() && mass >= conf->
GetMass()) {
return true; }
465 for(
size_t j=0; j<nz; ++j) {
467 if(Z == conf->
GetZ() && mass >= conf->
GetMass()) {
return true; }
473 for(
size_t j=0; j<nz; ++j) {
475 if(Z == conf->
GetZ() && mass >= conf->
GetMass()) {
return true; }
482 for(
size_t j=0; j<nz; ++j) {
492 const std::vector<const G4FermiConfiguration*>*
495 std::vector<const G4FermiConfiguration*>* v =
496 new std::vector<const G4FermiConfiguration*>;
497 if(Z >=
maxZ || A >=
maxA) {
return v; }
503 size_t nz =
list2[
A].size();
505 for(
size_t j=0; j<nz; ++j) {
516 for(
size_t j=0; j<nz; ++j) {
527 for(
size_t j=0; j<nz; ++j) {
539 G4cout<<
"Total number of configurations = "<<v->size()<<
" 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 const std::vector<const G4VFermiFragment*>* v_frag =
544 (*v)[jc]->GetFragmentList();
545 size_t size_vector_fragments = v_frag->size();
546 G4cout<<size_vector_fragments<<
"-body configuration "<<jc+1<<
": ";
547 for(
size_t jf=0;jf<size_vector_fragments;++jf){
548 G4int af= (*v_frag)[jf]->GetA();
549 G4int zf= (*v_frag)[jf]->GetZ();
550 G4double ex=(*v_frag)[jf]->GetExcitationEnergy();
551 G4cout<<
"(a="<<af<<
", z="<<zf<<
", ex="<<ex<<
") ";
554 G4cout<<
"-----------------------------------------------------"<<
G4endl;
563 for(
size_t j=0; j<nz; ++j) {
573 G4cout<<
"Only 1 configurations for A= "
574 <<A<<
" Z= "<<Z<<
" E*= "<< ExEn<<
" MeV"<<
G4endl;
575 const std::vector<const G4VFermiFragment*>* v_frag
576 = (*v)[0]->GetFragmentList();
577 size_t size_vector_fragments=v_frag->size();
578 G4cout<<
"1 Fragment configuration: ";
579 for(
size_t jf=0;jf<size_vector_fragments;++jf){
580 G4int af= (*v_frag)[jf]->GetA();
581 G4int zf= (*v_frag)[jf]->GetZ();
582 G4double ex=(*v_frag)[jf]->GetExcitationEnergy();
583 G4cout<<
"(a="<<af<<
", z="<<zf<<
", ex="<<ex<<
") ";
586 G4cout<<
"-----------------------------------------------------"<<
G4endl;
595 G4cout <<
"G4FermiFragmentsPool::GetConfigurationList: WARNING: not "
596 <<
"able decay fragment Z= " << Z <<
" A= " << A
603 std::vector<const G4VFermiFragment*>& newconf)
const
605 size_t nn = newconf.size();
607 for(
size_t i=0; i<
nn; ++i) { mass += newconf[i]->GetTotalEnergy(); }
610 size_t nz =
list2[
A].size();
612 for(
size_t j=0; j<nz; ++j) {
614 if(Z == conf->
GetZ() && A == conf->
GetA() &&
615 std::fabs(mass - conf->
GetMass()) <
keV) {
return true; }
622 size_t nz =
list3[
A].size();
624 for(
size_t j=0; j<nz; ++j) {
626 if(Z == conf->
GetZ() && A == conf->
GetA() &&
627 std::fabs(mass - conf->
GetMass()) <
keV) {
return true; }
634 size_t nz =
list4[
A].size();
636 for(
size_t j=0; j<nz; ++j) {
638 if(Z == conf->
GetZ() && A == conf->
GetA() &&
639 std::fabs(mass - conf->
GetMass()) <
keV) {
return true; }
652 size_t nz =
list1[
A].size();
653 for(
size_t j=0; j<nz; ++j) {
655 if(Z == conf->
GetZ()) {
675 G4cout <<
"##### List of Fragments in the Fermi Fragment Pool #####"
678 for(
G4int i=0; i<nfrag; ++i) {
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4FermiPhaseSpaceDecay thePhaseSpace
std::vector< const G4FermiConfiguration * > list3[17]
std::vector< const G4FermiConfiguration * > list1[17]
static G4FermiFragmentsPool * theInstance
const G4VFermiFragment * GetFragment(G4int Z, G4int A) const
G4bool IsAvailable(G4int Z, G4int A) const
G4bool IsApplicable(G4int Z, G4int A, G4double mass) const
G4GLOB_DLL std::ostream G4cout
std::vector< const G4VFermiFragment * > fragment_pool
void DumpFragment(const G4VFermiFragment *f) const
static const G4double A[nN]
G4double GetExcitationEnergy(void) const
G4double GetFragmentMass(void) const
static MCTruthManager * instance
std::vector< const G4FermiConfiguration * > list2[17]
G4bool IsExist(G4int Z, G4int A, std::vector< const G4VFermiFragment * > &) const
static G4FermiFragmentsPool * Instance()
const std::vector< const G4VFermiFragment * > * GetFragmentList() const
const std::vector< const G4FermiConfiguration * > * GetConfigurationList(G4int Z, G4int A, G4double mass) const
const G4FermiPhaseSpaceDecay * GetFermiPhaseSpaceDecay() const
std::vector< const G4FermiConfiguration * > list4[17]