60 resZ = resA = fragA = fragZ = 0;
61 resA13 = muu = resMass = Mass = U = delta0 = delta1 = a0 = probmax = 0.0;
66 if(0 == theZ) { index = 0; }
67 else if(1 == theZ) { index = theA; }
68 else { index = theA + 1; }
104 if(U < delta0 || maxEnergy <= minEnergy) {
return 0.0; }
109 G4double SystemEntropy = 2.0*std::sqrt(a0*(U-delta0));
119 G4double GlobalFactor = Gamma*Alpha*partMass*RN2*resA13*resA13/(a1*a1);
122 G4double Term1 = Beta*a1 - 1.5 + maxea;
123 G4double Term2 = (2.0*Beta*a1-3.0)*std::sqrt(maxea) + 2*maxea;
125 static const G4double explim = 350.;
126 G4double ExpTerm1 = (SystemEntropy <= explim) ?
G4Exp(-SystemEntropy) : 0.0;
128 G4double ExpTerm2 = 2.*std::sqrt(maxea) - SystemEntropy;
129 ExpTerm2 =
std::min(ExpTerm2, explim);
130 ExpTerm2 =
G4Exp(ExpTerm2);
132 Width = GlobalFactor*(Term1*ExpTerm1 + Term2*ExpTerm2);
144 Width = IntegrateEmissionProbability(minEnergy, maxEnergy,
150 G4double G4EvaporationProbability::IntegrateEmissionProbability(
163 for (
G4int i=0; i<nbins; ++i) {
169 if(ds < sum*0.01) {
break; }
186 G4double E1 = sqrt((Mass - partMass)*(Mass - partMass) - 2*Mass*K)
193 if(E1 < 0.0) {
return 0.0; }
200 G4double Prob = pcoeff*
G4Exp(2.0*(std::sqrt(a1*E1) - std::sqrt(a0*E0)))
201 *K*CrossSection(K, cb);
215 index, theZ, theA, resA);
233 static const G4int nmax = 100;
244 if (RbSqrt < 160.0) { PEX1 =
G4Exp(-RbSqrt); }
250 Rk = 1.0 + (1./RbSqrt)*
G4Log(RandNumber + (1.0-RandNumber)*PEX1);
254 G4double Beta = (2.12/(resA13*resA13) - 0.05)*
MeV/(0.76 + 2.2/resA13);
255 Q1 = 1.0 + Beta/maxKinEnergy;
256 Q2 = Q1*std::sqrt(Q1);
259 static const G4double ssqr3 = 1.5*std::sqrt(3.0);
260 FRk = ssqr3 * Rk * (Q1 - Rk*Rk)/Q2;
261 if(nn > nmax) {
break; }
264 }
while (FRk < rndm->
flat());
266 T = maxKinEnergy * (1.0-Rk*Rk) + minKinEnergy;
270 G4double delta = maxKinEnergy - minKinEnergy;
272 for(
G4int i=0; i<nmax; ++i) {
273 T = minKinEnergy + delta*rndm->
flat();
285 if(probmax*rndm->
flat() <= prob) {
break; }
static G4double GetNuclearMass(const G4double A, const G4double Z)
static constexpr double millibarn
static constexpr double hbarc
G4double ProbabilityDistributionFunction(G4double K, G4double CoulombBarrier=0.0)
static G4double ComputePowerParameter(G4int resA, G4int idx)
static G4double ComputePowerParameter(G4int resA, G4int idx)
static G4double ComputeCrossSection(G4double K, G4double cb, G4double resA13, G4double amu1, G4int idx, G4int Z, G4int resA)
static constexpr double twopi
G4double SampleKineticEnergy(G4double minKineticEnergy, G4double maxKineticEnergy, G4double CoulombBarrier=0.0)
G4double Z13(G4int Z) const
G4double TotalProbability(const G4Fragment &fragment, G4double minKineticEnergy, G4double maxKineticEnergy, G4double CoulombBarrier=0.0)
static G4double ComputeCrossSection(G4double K, G4double cb, G4double resA13, G4double amu1, G4int idx, G4int Z, G4int A, G4int resA)
static constexpr double MeV
virtual G4double CalcBetaParam(const G4Fragment &fragment)=0
G4double GetPairingCorrection(G4int A, G4int Z) const
G4double EmissionProbability(const G4Fragment &fragment, G4double maxKineticEnergy)
G4EvaporationProbability(G4int anA, G4int aZ, G4double aGamma, G4VCoulombBarrier *)
G4double GetGroundStateMass() const
virtual G4double CalcAlphaParam(const G4Fragment &fragment)=0
virtual ~G4EvaporationProbability()
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
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
static constexpr double MeV
G4PairingCorrection * fPairCorr
static constexpr double fermi
static constexpr double hbar_Planck
static G4NuclearLevelData * GetInstance()
static constexpr double pi
G4double GetExcitationEnergy() const