207 G4cout <<
"@@@@@@@@@@ Start G4Excitation Handler @@@@@@@@@@@@@ " <<
G4endl;
216 thePhotoEvapList.clear();
226 theResults.push_back( theInitialStatePtr );
229 }
else if(exEnergy < minExcitation && nist->GetIsotopeAbundance(Z, A) > 0.0) {
230 theResults.push_back( theInitialStatePtr );
235 if((A<maxAForFermiBreakUp && Z<maxZForFermiBreakUp)
236 || exEnergy <= minEForMultiFrag*A) {
237 theEvapList.push_back(theInitialStatePtr);
241 theTempResult = theMultiFragmentation->
BreakItUp(theInitialState);
243 theEvapList.push_back(theInitialStatePtr);
245 size_t nsec = theTempResult->size();
249 theEvapList.push_back(theInitialStatePtr);
253 G4bool deletePrimary =
true;
254 G4FragmentVector::iterator j;
255 for (j = theTempResult->begin(); j != theTempResult->end(); ++j) {
257 if((*j) == theInitialStatePtr) { deletePrimary =
false; }
258 A = (*j)->GetA_asInt();
262 theResults.push_back(*j);
266 G4double exEnergy1 = (*j)->GetExcitationEnergy();
269 if(exEnergy1 < minExcitation) {
270 Z = (*j)->GetZ_asInt();
272 theResults.push_back(*j);
274 theEvapList.push_back(*j);
278 theEvapList.push_back(*j);
282 if( deletePrimary ) {
delete theInitialStatePtr; }
284 delete theTempResult;
289 G4cout <<
"## After first step " << theEvapList.size() <<
" for evap; "
290 << thePhotoEvapList.size() <<
" for photo-evap; "
291 << theResults.size() <<
" results. " <<
G4endl;
297 static const G4int countmax = 1000;
300 for (kk=0; kk<theEvapList.size(); ++kk) {
301 frag = theEvapList[kk];
308 ed <<
"Infinite loop in the de-excitation module: " << kk
310 <<
" Initial fragment: \n" << theInitialState
311 <<
"\n Current fragment: \n" << *frag;
313 ed,
"Stop execution");
323 size_t nsec = results.size();
324 if(fVerbose > 2) {
G4cout <<
"FermiBreakUp Nsec= " << nsec <<
G4endl; }
328 for(
size_t j=0; j<nsec; ++j) {
329 exEnergy = results[j]->GetExcitationEnergy();
330 if(exEnergy < minExcitation) { theResults.push_back(results[j]); }
331 else { thePhotoEvapList.push_back(results[j]); }
337 size_t nsec = results.size();
338 if(fVerbose > 2) {
G4cout <<
"Evaporation Nsec= " << nsec <<
G4endl; }
342 theResults.push_back(frag);
347 for (
size_t j = 0; j<nsec; ++j) {
352 A = results[j]->GetA_asInt();
354 theResults.push_back(results[j]);
357 exEnergy = results[j]->GetExcitationEnergy();
360 if(exEnergy >= minExcitation) {
361 theEvapList.push_back(results[j]);
365 Z = results[j]->GetZ_asInt();
369 theResults.push_back(results[j]);
372 theEvapList.push_back(results[j]);
378 G4cout <<
"## After 2nd step " << theEvapList.size() <<
" was evap; "
379 << thePhotoEvapList.size() <<
" for photo-evap; "
380 << theResults.size() <<
" results. " <<
G4endl;
387 size_t kkmax = thePhotoEvapList.size();
388 for (kk=0; kk<kkmax; ++kk) {
389 frag = thePhotoEvapList[kk];
391 G4cout <<
"Next photon evaporate: " << thePhotonEvaporation <<
G4endl;
397 if(exEnergy > minExcitation) {
402 theResults.push_back(frag);
406 G4cout <<
"## After 3d step " << theEvapList.size() <<
" was evap; "
407 << thePhotoEvapList.size() <<
" was photo-evap; "
408 << theResults.size() <<
" results. " <<
G4endl;
415 theReactionProductVector->reserve( theResults.size() );
417 G4int theFragmentA, theFragmentZ;
420 G4cout <<
"### ExcitationHandler provides " << theResults.size()
421 <<
" evaporated products:" <<
G4endl;
423 kkmax = theResults.size();
424 for (kk=0; kk<kkmax; ++kk) {
425 frag = theResults[kk];
433 if (theFragmentA == 0) {
435 }
else if (theFragmentA == 1 && theFragmentZ == 0) {
437 }
else if (theFragmentA == 1 && theFragmentZ == 1) {
439 }
else if (theFragmentA == 2 && theFragmentZ == 1) {
441 }
else if (theFragmentA == 3 && theFragmentZ == 1) {
443 }
else if (theFragmentA == 3 && theFragmentZ == 2) {
445 }
else if (theFragmentA == 4 && theFragmentZ == 2) {
452 if(eexc < minExcitation) {
457 theKindOfFragment = theTableOfIons->
GetIon(theFragmentZ,theFragmentA,eexc,
460 G4cout <<
"### EXCH: Find ion Z= " << theFragmentZ <<
" A= " << theFragmentA
461 <<
" Eexc(MeV)= " << eexc/
MeV <<
" " << theKindOfFragment
466 if(theKindOfFragment) {
471 theReactionProductVector->push_back(theNew);
476 theTableOfIons->
GetIon(theFragmentZ,theFragmentA,0.0,
noFloat,0);
477 if(theKindOfFragment) {
480 if(etot <= ionmass) {
483 G4double ptot = std::sqrt((etot - ionmass)*(etot + ionmass));
490 theReactionProductVector->push_back(theNew);
492 G4cout <<
"### Find ion Z= " << theFragmentZ <<
" A= " << theFragmentA
493 <<
" ground state, energy corrected E(MeV)= " << etot <<
G4endl;
500 G4cout <<
"@@@@@@@@@@ End G4Excitation Handler "<<
G4endl;
502 return theReactionProductVector;
static G4Triton * TritonDefinition()
G4int GetFloatingLevelNumber() const
static G4He3 * He3Definition()
virtual void BreakFragment(G4FragmentVector *results, G4Fragment *theNucleus)=0
std::ostringstream G4ExceptionDescription
virtual G4bool BreakUpChain(G4FragmentVector *theResult, G4Fragment *theNucleus)
void SetMomentum(const G4double x, const G4double y, const G4double z)
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
static G4Proton * ProtonDefinition()
virtual void BreakFragment(G4FragmentVector *, G4Fragment *theNucleus)
const G4ParticleDefinition * GetParticleDefinition() const
virtual G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)=0
virtual G4bool IsApplicable(G4int Z, G4int A, G4double mass) const =0
std::vector< G4ReactionProduct * > G4ReactionProductVector
static G4Ions::G4FloatLevelBase FloatLevelBase(char flbChar)
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
G4double GetCreationTime() const
const G4LorentzVector & GetMomentum() const
void SetTotalEnergy(const G4double en)
std::vector< G4Fragment * > G4FragmentVector
G4double GetIsotopeAbundance(G4int Z, G4int N) const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4double GetPDGMass() const
static constexpr double MeV
void SetFormationTime(G4double aTime)
static G4Deuteron * DeuteronDefinition()
static G4Alpha * AlphaDefinition()
static G4Neutron * NeutronDefinition()
G4double GetExcitationEnergy() const