54 #include <CLHEP/Units/SystemOfUnits.h>
55 #include <CLHEP/Units/PhysicalConstants.h>
61 : fLevelManager(nullptr), fTransition(p), fVerbose(0), fPoints(0),
62 vShellNumber(-1), fIndex(0), fTimeLimit(
DBL_MAX), fMaxLifeTime(
DBL_MAX),
63 fICM(false), fRDM(false), fSampleTime(true), isInitialised(false)
72 char* env = getenv(
"G4AddTimeLimitToPhotonEvaporation");
81 static const G4float GRWfactor = 0.3f;
129 products->push_back(aNucleus);
137 G4cout <<
"G4PhotonEvaporation::BreakUpChain RDM= " <<
fRDM <<
" "
147 products->push_back(gamma);
149 G4cout <<
"G4PhotonEvaporation::BreakUpChain: "
171 G4cout <<
"G4PhotonEvaporation::GetEmissionProbability: Z="
183 static const G4float GREfactor = 5.0f;
218 G4double p0 =
G4Exp(-2.0*xsqr)*gammaR2*gammaE2/(egdp2*egdp2 + gammaR2);
224 gammaR2 = gammaE2*wres2;
225 egdp2 = gammaE2 - eres2;
227 *gammaR2*gammaE2/(egdp2*egdp2 + gammaR2);
280 G4bool isLongLived =
false;
281 G4bool isDiscrete =
false;
294 if(ntrans > 0) { isDiscrete =
true; }
300 if(ntrans > 0) { isDiscrete =
true; }
309 <<
" Exc= " << eexc <<
" Emax= "
312 <<
" Ntr= " << ntrans <<
" discrete: " << isDiscrete
342 if(efinal >= eexc && 0 <
fIndex) {
348 G4cout <<
"Continues emission efinal(MeV)= " << efinal <<
G4endl;
353 G4cout <<
"Discrete emission from level Index= " <<
fIndex
357 if(0 ==
fIndex || !level) {
return result; }
372 G4cout <<
"Ntrans= " << ntrans <<
" idx= " << idx
373 <<
" icm= " << icm <<
G4endl;
385 rndm = (rndm - prob)/(1.0 - prob);
405 if(std::abs(efinal - eexc) <=
Tolerance) {
return result; }
408 JP2, multiP, shell, isDiscrete,
409 isGamma, isLongLived);
414 G4cout <<
"Final level E= " << efinal <<
" time= " << time
415 <<
" idxFinal= " <<
fIndex <<
" isDiscrete: " << isDiscrete
416 <<
" isGamma: " << isGamma <<
" isLongLived: " << isLongLived
417 <<
" multiP= " << multiP <<
" shell= " << shell <<
G4endl;
virtual void SetICM(G4bool)
G4float GammaProbability(size_t idx) const
static G4Pow * GetInstance()
void SetMaxHalfLife(G4double)
G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)
G4GammaTransition * fTransition
virtual G4bool BreakUpChain(G4FragmentVector *theResult, G4Fragment *theNucleus) final
static G4float GREnergy[MAXGRDATA]
G4int SpinParity(size_t i) const
virtual void RDMForced(G4bool)
G4PhotonEvaporation(G4GammaTransition *ptr=nullptr)
G4float LifeTime(size_t i) const
virtual G4Fragment * EmittedFragment(G4Fragment *theNucleus) final
virtual void Initialise() final
static G4float GRWidth[MAXGRDATA]
static constexpr double second
G4double fCummProbability[MAXDEPOINT]
const G4LevelManager * fLevelManager
G4double GetLevelDensity() const
const G4NucLevel * GetLevel(size_t i) const
G4float MixingRatio(size_t idx) const
G4double GetMaxLifeTime() const
void SetPolarizationFlag(G4bool val)
G4double logZ(G4int Z) const
virtual G4double GetEmissionProbability(G4Fragment *theNucleus) final
G4bool CorrelatedGamma() const
G4float LevelEnergy(size_t i) const
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
G4double GetCreationTime() const
G4int IsFloatingLevel(size_t i) const
std::vector< G4Fragment * > G4FragmentVector
G4DeexPrecoParameters * GetParameters()
void SetGammaTransition(G4GammaTransition *)
G4double GetGroundStateMass() const
size_t SampleGammaTransition(G4double rndm) const
G4float NearestLevelEnergy(G4double energy, size_t index=0) const
size_t NearestLevelIndex(G4double energy, size_t index=0) const
virtual G4Fragment * SampleTransition(G4Fragment *nucleus, G4double newExcEnergy, G4double mpRatio, G4int JP1, G4int JP2, G4int MP, size_t shell, G4bool isDiscrete, G4bool isGamma, G4bool isLongLived)
static const G4double emax
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
void SetCreationTime(G4double time)
size_t NumberOfTransitions() const
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double energy(const ThreeVector &p, const G4double m)
G4Fragment * GenerateGamma(G4Fragment *nucleus)
G4int TransitionType(size_t idx) const
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
G4NuclearLevelData * fNuclearLevelData
size_t SampleShell(size_t idx, G4double rndm) const
static constexpr double MeV
size_t SampleGammaETransition(G4double rndm) const
G4double powZ(G4int Z, G4double y) const
G4float LifeTimeGamma(size_t i) const
size_t FinalExcitationIndex(size_t idx) const
void InitialiseLevelManager(G4int Z, G4int A)
static constexpr double keV
virtual G4double GetUpperLevelEnergy(G4int Z, G4int A) final
G4double ComputeGroundStateMass(G4int Z, G4int A) const
static G4NuclearLevelData * GetInstance()
G4double GetMinExcitation() const
static constexpr double millibarn
G4double GetExcitationEnergy() const
virtual ~G4PhotonEvaporation()
static constexpr double pi2
virtual G4double GetFinalLevelEnergy(G4int Z, G4int A, G4double energy) final