86 : icID(0),maxZForFermiBreakUp(9),maxAForFermiBreakUp(17),
87 fVerbose(1),fWarnings(0),minEForMultiFrag(1.*CLHEP::
TeV),
88 minExcitation(1.*CLHEP::
eV),maxExcitation(100.*CLHEP::
MeV),
127 if(
fDummy == param->GetDeexChannelsType()) {
133 for(
auto & elm : *table) { Zmax =
std::max(Zmax, elm->GetZasInt()); }
139 icID = param->GetInternalConversionID();
153 G4cout <<
"G4ExcitationHandler::SetParameters() done " <<
this <<
G4endl;
161 G4cout <<
"G4ExcitationHandler::Initialise() started " <<
this <<
G4endl;
184 G4cout <<
"G4ExcitationHandler::SetEvaporation() for " <<
this <<
G4endl;
215 G4cout <<
"G4ExcitationHandler::SetPhotonEvaporation() " << ptr
216 <<
" for handler " <<
this <<
G4endl;
225 G4cout <<
"G4ExcitationHandler::SetDeexChannelsType " << val
226 <<
" for " <<
this <<
G4endl;
232 if(!evap) {
return; }
237 }
else if(val ==
fGEM) {
239 }
else if(val ==
fGEMVI) {
245 G4cout <<
"Number of de-excitation channels is changed to: "
283 G4cout <<
"@@@@@@@@@@ Start G4Excitation Handler @@@@@@@@@@@@@ " <<
G4endl;
304 ed <<
"High excitation Fragment Z= " << Z <<
" A= " << A
305 <<
" Eex/A(MeV)= " << exEnergy/
A;
315 }
else if(exEnergy < minExcitation && nist->GetIsotopeAbundance(Z, A) > 0.0) {
331 size_t nsec = theTempResult->size();
339 G4bool deletePrimary =
true;
340 for (
auto ptr : *theTempResult) {
341 if(ptr == theInitialStatePtr) { deletePrimary =
false; }
344 if( deletePrimary ) {
delete theInitialStatePtr; }
346 delete theTempResult;
359 static const G4int countmax = 1000;
369 ed <<
"Infinite loop in the de-excitation module: " << kk
371 <<
" Initial fragment: \n" << theInitialState
372 <<
"\n Current fragment: \n" << *frag;
374 ed,
"Stop execution");
381 G4cout <<
"G4ExcitationHandler# " << kk <<
" Z= " << Z <<
" A= " << A
431 theReactionProductVector->reserve(
theResults.size() );
435 <<
" evaporated products:" <<
G4endl;
443 G4double ptot = (frag->GetMomentum()).vect().mag();
444 G4double etot = (frag->GetMomentum()).
e();
446 : std::sqrt((etot - mass)*(etot +
mass))/ptot;
448 (frag->GetMomentum()).py()*
fac,
449 (frag->GetMomentum()).pz()*
fac, etot);
450 frag->SetMomentum(lv);
454 if(frag->NuclearPolarization()) {
455 G4cout <<
" " << frag->NuclearPolarization();
460 G4int fragmentA = frag->GetA_asInt();
461 G4int fragmentZ = frag->GetZ_asInt();
462 G4double etot= frag->GetMomentum().e();
465 if (fragmentA == 0) {
466 theKindOfFragment = frag->GetParticleDefinition();
467 }
else if (fragmentA == 1 && fragmentZ == 0) {
469 }
else if (fragmentA == 1 && fragmentZ == 1) {
471 }
else if (fragmentA == 2 && fragmentZ == 1) {
473 }
else if (fragmentA == 3 && fragmentZ == 1) {
475 }
else if (fragmentA == 3 && fragmentZ == 2) {
476 theKindOfFragment =
theHe3;
477 }
else if (fragmentA == 4 && fragmentZ == 2) {
482 eexc = frag->GetExcitationEnergy();
483 G4int idxf = frag->GetFloatingLevelNumber();
492 G4cout <<
"### EXCH: Find ion Z= " << fragmentZ
493 <<
" A= " << fragmentA
494 <<
" Eexc(MeV)= " << eexc/
MeV <<
" idx= " << idxf
499 if(theKindOfFragment) {
505 theReactionProductVector->push_back(theNew);
511 if(theKindOfFragment) {
514 if(etot <= ionmass) {
517 G4double ptot = std::sqrt((etot - ionmass)*(etot + ionmass));
518 mom = (frag->GetMomentum().vect().unit())*ptot;
524 theReactionProductVector->push_back(theNew);
526 G4cout <<
" ground state, energy corrected E(MeV)= "
534 G4cout <<
"@@@@@@@@@@ End G4Excitation Handler "<<
G4endl;
536 return theReactionProductVector;
541 outFile <<
"G4ExcitationHandler description\n"
542 <<
"This class samples de-excitation of excited nucleus using\n"
543 <<
"Fermi Break-up model for light fragments (Z < 9, A < 17), "
544 <<
"evaporation, fission, and photo-evaporation models. Evaporated\n"
545 <<
"particle may be proton, neutron, and other light fragment \n"
546 <<
"(Z < 13, A < 29). During photon evaporation produced gamma \n"
547 <<
"or electrons due to internal conversion \n";