87 : maxZForFermiBreakUp(9),maxAForFermiBreakUp(17),
88 fVerbose(0),isInitialised(false),isEvapLocal(true)
139 G4cout <<
"G4ExcitationHandler::Initialise() started " <<
this <<
G4endl;
197 if(!evap) {
return; }
202 }
else if(val ==
fGEM) {
207 G4cout <<
"Number of de-excitation channels is changed to "
220 G4cout <<
"@@@@@@@@@@ Start G4Excitation Handler @@@@@@@@@@@@@ " <<
G4endl;
242 }
else if(exEnergy < minExcitation && nist->GetIsotopeAbundance(Z, A) > 0.0) {
258 size_t nsec = theTempResult->size();
266 G4bool deletePrimary =
true;
267 G4FragmentVector::iterator j;
268 for (j = theTempResult->begin(); j != theTempResult->end(); ++j) {
270 if((*j) == theInitialStatePtr) { deletePrimary =
false; }
271 A = (*j)->GetA_asInt();
279 G4double exEnergy1 = (*j)->GetExcitationEnergy();
283 Z = (*j)->GetZ_asInt();
295 if( deletePrimary ) {
delete theInitialStatePtr; }
297 delete theTempResult;
310 static const G4int countmax = 1000;
321 ed <<
"Infinite loop in the de-excitation module: " << kk
323 <<
" Initial fragment: \n" << theInitialState
324 <<
"\n Current fragment: \n" << *frag;
326 ed,
"Stop execution");
341 for(
size_t j=0; j<nsec; ++j) {
342 exEnergy =
results[j]->GetExcitationEnergy();
360 for (
size_t j = 0; j<nsec; ++j) {
370 exEnergy =
results[j]->GetExcitationEnergy();
401 for (kk=0; kk<kkmax; ++kk) {
428 theReactionProductVector->reserve(
theResults.size() );
430 G4int theFragmentA, theFragmentZ;
434 <<
" evaporated products:" <<
G4endl;
437 for (kk=0; kk<kkmax; ++kk) {
447 : std::sqrt((etot - mass)*(etot + mass))/ptot;
454 G4cout << kk <<
"-th fragment " << frag;
455 if(frag->NuclearPolarization()) {
456 G4cout <<
" " << frag->NuclearPolarization();
467 if (theFragmentA == 0) {
469 }
else if (theFragmentA == 1 && theFragmentZ == 0) {
471 }
else if (theFragmentA == 1 && theFragmentZ == 1) {
473 }
else if (theFragmentA == 2 && theFragmentZ == 1) {
475 }
else if (theFragmentA == 3 && theFragmentZ == 1) {
477 }
else if (theFragmentA == 3 && theFragmentZ == 2) {
479 }
else if (theFragmentA == 4 && theFragmentZ == 2) {
494 G4cout <<
"### EXCH: Find ion Z= " << theFragmentZ <<
" A= " << theFragmentA
495 <<
" Eexc(MeV)= " << eexc/
MeV <<
" idx= " << idxf
496 <<
" " << theKindOfFragment <<
G4endl;
500 if(theKindOfFragment) {
506 theReactionProductVector->push_back(theNew);
512 if(theKindOfFragment) {
515 if(etot <= ionmass) {
518 G4double ptot = std::sqrt((etot - ionmass)*(etot + ionmass));
525 theReactionProductVector->push_back(theNew);
527 G4cout <<
"### Find ion Z= " << theFragmentZ <<
" A= " << theFragmentA
528 <<
" ground state, energy corrected E(MeV)= " << etot <<
G4endl;
536 G4cout <<
"@@@@@@@@@@ End G4Excitation Handler "<<
G4endl;
538 return theReactionProductVector;
543 outFile <<
"G4ExcitationHandler description\n"
544 <<
"This class samples de-excitation of excited nucleus using\n"
545 <<
"Fermi Break-up model for light fragments (Z < 9, A < 17), "
546 <<
"evaporation, fission, and photo-evaporation models. Evaporated\n"
547 <<
"particle may be proton, neutron, and other light fragment \n"
548 <<
"(Z < 13, A < 29). During photon evaporation produced gamma \n"
549 <<
"or electrons due to internal conversion \n";
G4VEvaporation * theEvaporation
G4double GetCreationTime() const
static G4Triton * TritonDefinition()
const G4LorentzVector & GetMomentum() const
void SetMultiFragmentation(G4VMultiFragmentation *ptr)
void SetFermiModel(G4VFermiBreakUp *ptr)
std::ostringstream G4ExceptionDescription
static G4ParticleTable * GetParticleTable()
static constexpr double MeV
const G4ParticleDefinition * electron
static G4Deuteron * DeuteronDefinition()
G4DeexPrecoParameters * GetParameters()
void SetMomentum(const G4double x, const G4double y, const G4double z)
static G4NuclearLevelData * GetInstance()
G4int GetInternalConversionID() const
G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState)
G4IonTable * GetIonTable() const
std::vector< G4Fragment * > theEvapList
G4double GetMinExPerNucleounForMF() const
G4double GetGroundStateMass() const
G4VMultiFragmentation * theMultiFragmentation
G4VEvaporationChannel * GetPhotonEvaporation()
virtual void BreakFragment(G4FragmentVector *results, G4Fragment *theNucleus)=0
G4double GetMinExcitation() const
std::vector< G4Fragment * > theResults
G4double GetPDGMass() const
void SetTotalEnergy(const G4double en)
void SetEvaporation(G4VEvaporation *ptr, G4bool isLocal=false)
std::vector< G4Fragment * > results
void SetFermiBreakUp(G4VFermiBreakUp *ptr)
static G4Pow * GetInstance()
virtual void Initialise()=0
virtual void InitialiseChannels() final
std::vector< G4Fragment * > thePhotoEvapList
static G4Proton * ProtonDefinition()
virtual G4bool BreakUpChain(G4FragmentVector *theResult, G4Fragment *theNucleus)
G4double GetIsotopeAbundance(G4int Z, G4int N) const
G4double minEForMultiFrag
G4int maxZForFermiBreakUp
double A(double temperature)
void SetMomentum(const G4LorentzVector &value)
virtual G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)=0
static G4Electron * Electron()
std::vector< G4ReactionProduct * > G4ReactionProductVector
G4DeexChannelType GetDeexChannelsType() const
G4int maxAForFermiBreakUp
static G4Alpha * AlphaDefinition()
G4VFermiBreakUp * theFermiModel
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
void ModelDescription(std::ostream &outFile) const
virtual void BreakFragment(G4FragmentVector *, G4Fragment *theNucleus)
virtual void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
G4VEvaporationChannel * thePhotonEvaporation
static const G4double fac
G4IonTable * theTableOfIons
static G4Neutron * NeutronDefinition()
G4GLOB_DLL std::ostream G4cout
void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
G4int GetFloatingLevelNumber() const
const G4ParticleDefinition * GetParticleDefinition() const
void SetFormationTime(G4double aTime)
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
virtual void InitialiseChannels()
static G4Ions::G4FloatLevelBase FloatLevelBase(char flbChar)
G4double GetExcitationEnergy() const
std::vector< G4Fragment * > G4FragmentVector
void SetDeexChannelsType(G4DeexChannelType val)
void SetCreatorModel(const G4int mod)
void SetCombinedChannel()
virtual G4bool IsApplicable(G4int Z, G4int A, G4double mass) const =0
static G4NistManager * Instance()
size_t GetNumberOfChannels() const
static G4He3 * He3Definition()