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();
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<<
"----------------------------------------------------------------"
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();
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<<
"----------------------------------------------------------------"
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();
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; }
466 for(
size_t j=0; j<nz; ++j) {
468 if(Z == conf->
GetZ() && mass >= conf->
GetMass()) {
return true; }
474 for(
size_t j=0; j<nz; ++j) {
476 if(Z == conf->
GetZ() && mass >= conf->
GetMass()) {
return true; }
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) {
517 for(
size_t j=0; j<nz; ++j) {
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;
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; }
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 #####"
679 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
double A(double temperature)
std::vector< const G4VFermiFragment * > fragment_pool
void DumpFragment(const G4VFermiFragment *f) const
static constexpr double GeV
G4double GetExcitationEnergy(void) const
G4double GetFragmentMass(void) const
static constexpr double MeV
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
static constexpr double keV
const std::vector< const G4FermiConfiguration * > * GetConfigurationList(G4int Z, G4int A, G4double mass) const
const G4FermiPhaseSpaceDecay * GetFermiPhaseSpaceDecay() const
std::vector< const G4FermiConfiguration * > list4[17]