87 : icID(0),maxZForFermiBreakUp(9),maxAForFermiBreakUp(17),
88 fVerbose(1),fWarnings(0),minEForMultiFrag(1.*
CLHEP::
TeV),
90 isInitialised(false),isEvapLocal(true),isActive(true)
128 if(
fDummy == param->GetDeexChannelsType()) {
134 for(
auto & elm : *table) { Zmax =
std::max(Zmax, elm->GetZasInt()); }
154 G4cout <<
"G4ExcitationHandler::SetParameters() done " <<
this <<
G4endl;
162 G4cout <<
"G4ExcitationHandler::Initialise() started " <<
this <<
G4endl;
185 G4cout <<
"G4ExcitationHandler::SetEvaporation() for " <<
this <<
G4endl;
216 G4cout <<
"G4ExcitationHandler::SetPhotonEvaporation() " << ptr
217 <<
" for handler " <<
this <<
G4endl;
226 G4cout <<
"G4ExcitationHandler::SetDeexChannelsType " << val
227 <<
" for " <<
this <<
G4endl;
233 if(!evap) {
return; }
238 }
else if(val ==
fGEM) {
240 }
else if(val ==
fGEMVI) {
246 G4cout <<
"Number of de-excitation channels is changed to: "
284 G4cout <<
"@@@@@@@@@@ Start G4Excitation Handler @@@@@@@@@@@@@ " <<
G4endl;
305 ed <<
"High excitation Fragment Z= " <<
Z <<
" A= " <<
A
306 <<
" Eex/A(MeV)= " << exEnergy/
A;
316 }
else if(exEnergy < minExcitation && nist->GetIsotopeAbundance(
Z,
A) > 0.0) {
332 size_t nsec = theTempResult->size();
340 G4bool deletePrimary =
true;
341 for (
auto ptr : *theTempResult) {
342 if(ptr == theInitialStatePtr) { deletePrimary =
false; }
345 if( deletePrimary ) {
delete theInitialStatePtr; }
347 delete theTempResult;
360 static const G4int countmax = 1000;
370 ed <<
"Infinite loop in the de-excitation module: " << kk
372 <<
" Initial fragment: \n" << theInitialState
373 <<
"\n Current fragment: \n" << *frag;
375 ed,
"Stop execution");
382 G4cout <<
"G4ExcitationHandler# " << kk <<
" Z= " <<
Z <<
" A= " <<
A
432 theReactionProductVector->reserve(
theResults.size() );
436 <<
" evaporated products:" <<
G4endl;
443 G4double mass = frag->GetGroundStateMass();
444 G4double ptot = (frag->GetMomentum()).vect().mag();
445 G4double etot = (frag->GetMomentum()).e();
447 : std::sqrt((etot - mass)*(etot + mass))/ptot;
449 (frag->GetMomentum()).py()*
fac,
450 (frag->GetMomentum()).pz()*
fac, etot);
451 frag->SetMomentum(lv);
455 if(frag->NuclearPolarization()) {
456 G4cout <<
" " << frag->NuclearPolarization();
461 G4int fragmentA = frag->GetA_asInt();
462 G4int fragmentZ = frag->GetZ_asInt();
463 G4double etot= frag->GetMomentum().e();
466 if (fragmentA == 0) {
467 theKindOfFragment = frag->GetParticleDefinition();
468 }
else if (fragmentA == 1 && fragmentZ == 0) {
470 }
else if (fragmentA == 1 && fragmentZ == 1) {
472 }
else if (fragmentA == 2 && fragmentZ == 1) {
474 }
else if (fragmentA == 3 && fragmentZ == 1) {
476 }
else if (fragmentA == 3 && fragmentZ == 2) {
477 theKindOfFragment =
theHe3;
478 }
else if (fragmentA == 4 && fragmentZ == 2) {
483 eexc = frag->GetExcitationEnergy();
484 G4int idxf = frag->GetFloatingLevelNumber();
493 G4cout <<
"### EXCH: Find ion Z= " << fragmentZ
494 <<
" A= " << fragmentA
495 <<
" Eexc(MeV)= " << eexc/
MeV <<
" idx= " << idxf
500 if(theKindOfFragment) {
510 theReactionProductVector->push_back(theNew);
516 if(theKindOfFragment) {
519 if(etot <= ionmass) {
522 G4double ptot = std::sqrt((etot - ionmass)*(etot + ionmass));
523 mom = (frag->GetMomentum().vect().unit())*ptot;
530 theReactionProductVector->push_back(theNew);
532 G4cout <<
" ground state, energy corrected E(MeV)= "
540 G4cout <<
"@@@@@@@@@@ End G4Excitation Handler "<<
G4endl;
542 return theReactionProductVector;
547 outFile <<
"G4ExcitationHandler description\n"
548 <<
"This class samples de-excitation of excited nucleus using\n"
549 <<
"Fermi Break-up model for light fragments (Z < 9, A < 17), "
550 <<
"evaporation, fission, and photo-evaporation models. Evaporated\n"
551 <<
"particle may be proton, neutron, and other light fragment \n"
552 <<
"(Z < 13, A < 29). During photon evaporation produced gamma \n"
553 <<
"or electrons due to internal conversion \n";
std::vector< G4Element * > G4ElementTable
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
std::vector< G4Fragment * > G4FragmentVector
static const G4double fac
std::vector< G4ReactionProduct * > G4ReactionProductVector
static constexpr double eV
static constexpr double MeV
static constexpr double TeV
G4GLOB_DLL std::ostream G4cout
static G4Alpha * AlphaDefinition()
static G4Deuteron * DeuteronDefinition()
static G4Electron * Electron()
static G4ElementTable * GetElementTable()
virtual void InitialiseChannels() final
void SetCombinedChannel()
G4int maxZForFermiBreakUp
const G4ParticleDefinition * theAlpha
const G4ParticleDefinition * theHe3
G4VEvaporationChannel * GetPhotonEvaporation()
G4int maxAForFermiBreakUp
G4VEvaporation * GetEvaporation()
G4VEvaporation * theEvaporation
void SetEvaporation(G4VEvaporation *ptr, G4bool isLocal=false)
void SetFermiModel(G4VFermiBreakUp *ptr)
const G4ParticleDefinition * theProton
void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
std::vector< G4Fragment * > results
void ModelDescription(std::ostream &outFile) const
void SortSecondaryFragment(G4Fragment *)
G4VFermiBreakUp * theFermiModel
G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState)
void SetMultiFragmentation(G4VMultiFragmentation *ptr)
std::vector< G4Fragment * > theEvapList
const G4ParticleDefinition * theTriton
G4VMultiFragmentation * theMultiFragmentation
G4IonTable * theTableOfIons
G4VMultiFragmentation * GetMultiFragmentation()
const G4ParticleDefinition * theDeuteron
G4VEvaporationChannel * thePhotonEvaporation
const G4ParticleDefinition * theElectron
const G4ParticleDefinition * theNeutron
G4VFermiBreakUp * GetFermiModel()
G4double minEForMultiFrag
std::vector< G4Fragment * > theResults
void SetDeexChannelsType(G4DeexChannelType val)
G4double GetExcitationEnergy() const
static G4He3 * He3Definition()
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
static G4Ions::G4FloatLevelBase FloatLevelBase(char flbChar)
static G4Neutron * NeutronDefinition()
static G4NistManager * Instance()
G4DeexPrecoParameters * GetParameters()
void UploadNuclearLevelData(G4int Z)
static G4NuclearLevelData * GetInstance()
G4double GetPDGMass() const
G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()
static G4int GetModelID(const G4int modelIndex)
static G4Pow * GetInstance()
static G4Proton * ProtonDefinition()
void SetMomentum(const G4double x, const G4double y, const G4double z)
void SetTotalEnergy(const G4double en)
void SetCreatorModelID(const G4int mod)
void SetFormationTime(G4double aTime)
static G4Triton * TritonDefinition()
virtual void BreakFragment(G4FragmentVector *, G4Fragment *theNucleus)
size_t GetNumberOfChannels() const
G4VEvaporationChannel * GetPhotonEvaporation()
virtual void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
void SetFermiBreakUp(G4VFermiBreakUp *ptr)
virtual void InitialiseChannels()
virtual void Initialise()=0
virtual G4bool IsApplicable(G4int Z, G4int A, G4double mass) const =0
virtual void BreakFragment(G4FragmentVector *results, G4Fragment *theNucleus)=0
void SetVerbose(G4int val)
virtual G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)=0
T max(const T t1, const T t2)
brief Return the largest of the two arguments