65 : fLevelManager(nullptr), fTransition(p), fPolarization(nullptr),
66 fVerbose(1), fPoints(0), vShellNumber(-1), fIndex(0), fSecID(-1),
68 fICM(true), fRDM(false), fSampleTime(true),
69 fCorrelatedGamma(false), fIsomerFlag(false), isInitialised(false)
108 G4cout <<
"### G4PhotonEvaporation is initialized " <<
this <<
G4endl;
114#ifdef G4MULTITHREADED
115 G4MUTEXLOCK(&G4PhotonEvaporation::PhotonEvaporationMutex);
119 const G4float GRWfactor = 0.3f;
125#ifdef G4MULTITHREADED
151 G4cout <<
"G4PhotonEvaporation::EmittedFragment: "
164 G4cout <<
"G4PhotonEvaporation::EmittedFragment: remove "
173 G4cout <<
"G4PhotonEvaporation::EmittedFragment: RDM= "
191 products->push_back(aNucleus);
200 G4cout <<
"G4PhotonEvaporation::BreakUpChain RDM= " <<
fRDM <<
" "
218 products->push_back(gamma);
220 G4cout <<
"G4PhotonEvaporation::BreakUpChain: "
249 G4cout <<
"G4PhotonEvaporation::GetEmissionProbability: Z="
261 static const G4float GREfactor = 5.0f;
297 G4double p0 =
G4Exp(-2.0*xsqr)*gammaR2*gammaE2/(egdp2*egdp2 + gammaR2);
303 gammaR2 = gammaE2*wres2;
304 egdp2 = gammaE2 - eres2;
305 p1 =
G4Exp(2.0*(std::sqrt(levelDensity*std::abs(
fExcEnergy - egam)) - xsqr))
306 *gammaR2*gammaE2/(egdp2*egdp2 + gammaR2);
311 <<
" p0= " << p0 <<
" p1= " << p1 <<
" sum= "
361 G4bool isDiscrete =
false;
367 G4cout <<
"GenerateGamma: " <<
" Eex= " << eexc
388 G4cout <<
" ntrans= " << ntrans <<
" JP= " << JP1
401 if(0 == ntrans) { isDiscrete =
false; }
406 <<
" Exc= " << eexc <<
" Emax= "
409 <<
" Ntr= " << ntrans <<
" discrete: " << isDiscrete
440 G4cout <<
"Continues proposes Efinal= " << efinal <<
G4endl;
447 if(efinal >= eexc && 0 <
fIndex) {
461 G4cout <<
"Continues emission efinal(MeV)= " << efinal <<
G4endl;
471 G4cout <<
"Discrete emission from level Index= " <<
fIndex
488 G4cout <<
"Ntrans= " << ntrans <<
" idx= " << idx
489 <<
" ICM= " <<
fICM <<
" JP1= " << JP1 <<
G4endl;
493 if(
fICM && prob < 1.0) {
497 rndm = (rndm - prob)/(1.0 - prob);
517 if(std::abs(efinal - eexc) <=
Tolerance) {
return result; }
521 isDiscrete, isGamma);
530 if(efinal == 0.0 &&
fIndex > 0) {
536 G4cout <<
"Final level E= " << efinal <<
" time= " << time
537 <<
" idxFinal= " <<
fIndex <<
" isDiscrete: " << isDiscrete
538 <<
" isGamma: " << isGamma <<
" multiP= " << multiP
540 <<
" JP1= " << JP1 <<
" JP2= " << JP2 <<
G4endl;
static const G4double emax
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
std::vector< G4Fragment * > G4FragmentVector
G4double G4Log(G4double x)
#define G4MUTEX_INITIALIZER
#define G4MUTEXLOCK(mutex)
#define G4MUTEXUNLOCK(mutex)
G4GLOB_DLL std::ostream G4cout
G4bool CorrelatedGamma() const
G4double GetMaxLifeTime() const
G4bool IsomerProduction() const
G4double GetMinExcitation() const
G4bool GetInternalConversionFlag() const
void SetFloatingLevelNumber(G4int value)
G4double GetGroundStateMass() const
G4NuclearPolarization * GetNuclearPolarization() const
G4double ComputeGroundStateMass(G4int Z, G4int A, G4int numberOfLambdas=0) const
G4double GetExcitationEnergy() const
void SetCreatorModelID(G4int value)
G4double GetCreationTime() const
void SetNuclearPolarization(G4NuclearPolarization *)
void SetCreationTime(G4double time)
void SetSpin(G4double value)
void SetPolarizationFlag(G4bool val)
void SetTwoJMAX(G4int val)
void SetVerbose(G4int val)
virtual G4Fragment * SampleTransition(G4Fragment *nucleus, G4double newExcEnergy, G4double mpRatio, G4int JP1, G4int JP2, G4int MP, G4int shell, G4bool isDiscrete, G4bool isGamma)
G4double LifeTime(size_t i) const
const G4NucLevel * GetLevel(size_t i) const
size_t NearestLevelIndex(G4double energy, size_t index=0) const
G4double NearestLevelEnergy(G4double energy, size_t index=0) const
G4int FloatingLevel(size_t i) const
G4int SpinTwo(size_t i) const
size_t NumberOfTransitions() const
G4double LevelEnergy(size_t i) const
G4int TransitionType(size_t idx) const
G4float MultipolarityRatio(size_t idx) const
G4float GammaProbability(size_t idx) const
size_t NumberOfTransitions() const
size_t FinalExcitationIndex(size_t idx) const
size_t SampleGammaTransition(G4double rndm) const
G4int SampleShell(size_t idx, G4double rndm) const
G4double GetLevelDensity(G4int Z, G4int A, G4double U)
G4DeexPrecoParameters * GetParameters()
static G4NuclearLevelData * GetInstance()
static G4NuclearPolarizationStore * GetInstance()
void RemoveMe(G4NuclearPolarization *ptr)
G4NuclearPolarization * FindOrBuild(G4int Z, G4int A, G4double Eexc)
void SetExcitationEnergy(G4double val)
virtual G4double GetFinalLevelEnergy(G4int Z, G4int A, G4double energy) final
static G4float GRWidth[MAXGRDATA]
static G4float GREnergy[MAXGRDATA]
G4NuclearLevelData * fNuclearLevelData
virtual G4Fragment * EmittedFragment(G4Fragment *theNucleus) final
void InitialiseLevelManager(G4int Z, G4int A)
virtual G4double GetEmissionProbability(G4Fragment *theNucleus) final
virtual void Initialise() final
G4NuclearPolarization * fPolarization
virtual void SetICM(G4bool)
G4double fCummProbability[MAXDEPOINT]
const G4LevelManager * fLevelManager
virtual ~G4PhotonEvaporation()
G4Fragment * GenerateGamma(G4Fragment *nucleus)
virtual G4double GetUpperLevelEnergy(G4int Z, G4int A) final
void SetGammaTransition(G4GammaTransition *)
G4GammaTransition * fTransition
G4PhotonEvaporation(G4GammaTransition *ptr=nullptr)
G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)
virtual void RDMForced(G4bool)
virtual G4bool BreakUpChain(G4FragmentVector *theResult, G4Fragment *theNucleus) final
static G4int GetModelID(const G4int modelIndex)
static G4Pow * GetInstance()
G4double powZ(G4int Z, G4double y) const
static constexpr double millibarn
static constexpr double pi2
static constexpr double neutron_mass_c2
static constexpr double MeV
static constexpr double eV
static constexpr double hbarc
G4double energy(const ThreeVector &p, const G4double m)
T max(const T t1, const T t2)
brief Return the largest of the two arguments
T min(const T t1, const T t2)
brief Return the smallest of the two arguments