Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4EvaporationProbability Class Reference

#include <G4EvaporationProbability.hh>

Inheritance diagram for G4EvaporationProbability:

Public Member Functions

 G4EvaporationProbability (G4int anA, G4int aZ, G4double aGamma)
 ~G4EvaporationProbability () override
virtual G4double TotalProbability (const G4Fragment &fragment, G4double minKinEnergy, G4double maxKinEnergy, G4double CB, G4double exEnergy)
G4double ComputeProbability (G4double K, G4double CB) override
G4double CrossSection (G4double K, G4double CB)
G4double RecentXS () const
 G4EvaporationProbability (const G4EvaporationProbability &right)=delete
const G4EvaporationProbabilityoperator= (const G4EvaporationProbability &right)=delete
G4bool operator== (const G4EvaporationProbability &right) const =delete
G4bool operator!= (const G4EvaporationProbability &right) const =delete
Public Member Functions inherited from G4VEmissionProbability
 G4VEmissionProbability (G4int Z, G4int A)
 ~G4VEmissionProbability () override=default
G4double ProbabilityDensityFunction (G4double energy) override
virtual void Initialise ()
virtual G4double EmissionProbability (const G4Fragment &fragment, G4double anEnergy)
G4int GetZ (void) const
G4int GetA (void) const
void SetDecayKinematics (G4int rZ, G4int rA, G4double rmass, G4double fmass)
G4double GetRecoilExcitation () const
void SetEvapExcitation (G4double exc)
G4double GetProbability () const
void ResetProbability ()
G4double SampleEnergy ()
 G4VEmissionProbability (const G4VEmissionProbability &right)=delete
const G4VEmissionProbabilityoperator= (const G4VEmissionProbability &right)=delete
G4bool operator== (const G4VEmissionProbability &right) const =delete
G4bool operator!= (const G4VEmissionProbability &right) const =delete

Protected Member Functions

virtual G4double CalcAlphaParam (const G4Fragment &fragment)
virtual G4double CalcBetaParam (const G4Fragment &fragment)
Protected Member Functions inherited from G4VEmissionProbability
void ResetIntegrator (G4double de, G4double eps)
G4double IntegrateProbability (G4double elow, G4double ehigh, G4double CB)

Additional Inherited Members

Protected Attributes inherited from G4VEmissionProbability
G4NuclearLevelDatapNuclearLevelData
G4PowpG4pow
G4int OPTxs
G4int pVerbose
G4int theZ
G4int theA
G4int resZ = 0
G4int resA = 0
G4double pMass = 0.0
G4double pEvapMass = 0.0
G4double pResMass = 0.0
G4double pProbability = 0.0
G4double pTolerance = 0.0
G4double pWidth = 0.0

Detailed Description

Definition at line 42 of file G4EvaporationProbability.hh.

Constructor & Destructor Documentation

◆ G4EvaporationProbability() [1/2]

G4EvaporationProbability::G4EvaporationProbability ( G4int anA,
G4int aZ,
G4double aGamma )
explicit

Definition at line 71 of file G4EvaporationProbability.cc.

73 : G4VEmissionProbability(aZ, anA), fGamma(aGamma)
74{
75 resA13 = lastA = muu = freeU = a0 = a1 = delta0 = delta1 = 0.0;
76 pcoeff = fGamma*pEvapMass*CLHEP::millibarn
77 /((CLHEP::pi*CLHEP::hbarc)*(CLHEP::pi*CLHEP::hbarc));
78
79 if (1 == theZ && 1 == theA) { index = 1; }
80 else if (1 == theZ && 2 == theA) { index = 2; }
81 else if (1 == theZ && 3 == theA) { index = 3; }
82 else if (2 == theZ && 3 == theA) { index = 4; }
83 else if (2 == theZ && 4 == theA) { index = 5; }
84
85 if (OPTxs == 1) {
86 const G4ParticleDefinition* part = nullptr;
87 if (index == 1) { part = G4Proton::Proton(); }
88 else if (index == 2) { part = G4Deuteron::Deuteron(); }
89 else if (index == 3) { part = G4Triton::Triton(); }
90 else if (index == 4) { part = G4He3::He3(); }
91 else if (index == 5) { part = G4Alpha::Alpha(); }
92 else { part = G4Neutron::Neutron(); }
93 fXSection = new G4InterfaceToXS(part, index);
94 }
95
96 if (0 == aZ) {
97 ResetIntegrator(0.15*CLHEP::MeV, 0.01);
98 } else {
99 ResetIntegrator(0.20*CLHEP::MeV, 0.01);
100 }
101}
static G4Alpha * Alpha()
Definition G4Alpha.cc:83
static G4Deuteron * Deuteron()
Definition G4Deuteron.cc:90
static G4He3 * He3()
Definition G4He3.cc:90
static G4Neutron * Neutron()
Definition G4Neutron.cc:101
static G4Proton * Proton()
Definition G4Proton.cc:90
static G4Triton * Triton()
Definition G4Triton.cc:90
G4VEmissionProbability(G4int Z, G4int A)
void ResetIntegrator(G4double de, G4double eps)

Referenced by G4AlphaEvaporationProbability::G4AlphaEvaporationProbability(), G4DeuteronEvaporationProbability::G4DeuteronEvaporationProbability(), G4EvaporationProbability(), G4He3EvaporationProbability::G4He3EvaporationProbability(), G4NeutronEvaporationProbability::G4NeutronEvaporationProbability(), G4ProtonEvaporationProbability::G4ProtonEvaporationProbability(), G4TritonEvaporationProbability::G4TritonEvaporationProbability(), operator!=(), operator=(), and operator==().

◆ ~G4EvaporationProbability()

G4EvaporationProbability::~G4EvaporationProbability ( )
override

Definition at line 103 of file G4EvaporationProbability.cc.

104{
105 delete fXSection;
106}

◆ G4EvaporationProbability() [2/2]

G4EvaporationProbability::G4EvaporationProbability ( const G4EvaporationProbability & right)
delete

Member Function Documentation

◆ CalcAlphaParam()

G4double G4EvaporationProbability::CalcAlphaParam ( const G4Fragment & fragment)
protectedvirtual

◆ CalcBetaParam()

G4double G4EvaporationProbability::CalcBetaParam ( const G4Fragment & fragment)
protectedvirtual

◆ ComputeProbability()

G4double G4EvaporationProbability::ComputeProbability ( G4double K,
G4double CB )
overridevirtual

Reimplemented from G4VEmissionProbability.

Definition at line 175 of file G4EvaporationProbability.cc.

176{
177 G4double K = std::max(kinE, kmin);
178 // abnormal case - should never happens
179 if(pMass < pEvapMass + pResMass + K) { return 0.0; }
180
181 G4double K1 = pMass - pEvapMass - K;
182 G4double mres = std::sqrt(K1*K1 - K*(2*pEvapMass + K));
183
184 G4double excRes = mres - pResMass;
185 if (excRes < 0.0) { return 0.0; }
186 G4double K2 = 0.5*(pMass + pEvapMass + mres)*(pMass - pEvapMass - mres)/mres;
187 G4double xs = CrossSection(K2, CB);
188 if (xs <= 0.0) { return 0.0; }
189
190 a1 = pNuclearLevelData->GetLevelDensity(resZ, resA, excRes);
191 G4double E0 = std::max(freeU - delta0, 0.0);
192 G4double E1 = std::max(excRes - delta1, 0.0);
193 G4double prob = pcoeff*G4Exp(2.0*(std::sqrt(a1*E1) - std::sqrt(a0*E0)))*K*xs;
194 return prob;
195}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition G4Exp.hh:132
double G4double
Definition G4Types.hh:83
G4double CrossSection(G4double K, G4double CB)
G4NuclearLevelData * pNuclearLevelData

◆ CrossSection()

G4double G4EvaporationProbability::CrossSection ( G4double K,
G4double CB )

Definition at line 198 of file G4EvaporationProbability.cc.

199{
200 G4double K = std::max(kine, kmin);
201 // compute power once
202 if (OPTxs > 1 && 0 < index && resA != lastA) {
203 lastA = resA;
205 }
206 // In the case of OPTxs = 0 this method is not called
207 if (OPTxs == 1) {
208 G4int Z = std::min(resZ, ZMAXNUCLEARDATA);
209 if (0 == index) {
210 G4double e1 = lowEnergyLimitMeV[Z];
211 if (e1 == 0.0) { e1 = lim; }
212 K = std::max(K, e1);
213 } else {
214 if (K < 0.5*CB) {
215 recentXS = 0.0;
216 return recentXS;
217 }
218 K = std::max(K, 2*CB);
219 }
220 G4double corr = G4DeexPrecoUtility::CorrectionFactor(index, theZ, resA13, CB, kine);
221 recentXS = corr*fXSection->GetElementCrossSection(K, Z)/CLHEP::millibarn;
222
223 } else if (OPTxs == 2) {
224 recentXS = G4ChatterjeeCrossSection::ComputeCrossSection(K, CB, resA13, muu,
225 index, theZ, resA);
226 } else if (OPTxs == 3) {
227 recentXS = G4KalbachCrossSection::ComputeCrossSection(K, CB, resA13, muu,
228 index, theZ, theA, resA);
229 }
230 return recentXS;
231}
int G4int
Definition G4Types.hh:85
static G4double ComputeCrossSection(G4double K, G4double cb, G4double resA13, G4double amu1, G4int idx, G4int Z, G4int resA)
static G4double CorrectionFactor(const G4int index, const G4int Z, const G4double A13, const G4double bCoulomb, const G4double ekin)
static G4double ComputePowerParameter(G4int resA, G4int idx)
static G4double ComputeCrossSection(G4double K, G4double cb, G4double resA13, G4double amu1, G4int idx, G4int Z, G4int A, G4int resA)

Referenced by ComputeProbability().

◆ operator!=()

G4bool G4EvaporationProbability::operator!= ( const G4EvaporationProbability & right) const
delete

◆ operator=()

const G4EvaporationProbability & G4EvaporationProbability::operator= ( const G4EvaporationProbability & right)
delete

◆ operator==()

G4bool G4EvaporationProbability::operator== ( const G4EvaporationProbability & right) const
delete

◆ RecentXS()

G4double G4EvaporationProbability::RecentXS ( ) const
inline

Definition at line 62 of file G4EvaporationProbability.hh.

62{ return recentXS; };

◆ TotalProbability()

G4double G4EvaporationProbability::TotalProbability ( const G4Fragment & fragment,
G4double minKinEnergy,
G4double maxKinEnergy,
G4double CB,
G4double exEnergy )
virtual

Definition at line 118 of file G4EvaporationProbability.cc.

121{
122 G4int fragA = fragment.GetA_asInt();
123 G4int fragZ = fragment.GetZ_asInt();
124 freeU = exEnergy;
125 a0 = pNuclearLevelData->GetLevelDensity(fragZ, fragA, freeU);
126 delta0 = pNuclearLevelData->GetPairingCorrection(fragZ, fragA);
127 delta1 = pNuclearLevelData->GetPairingCorrection(resZ, resA);
128 resA13 = pG4pow->Z13(resA);
129 /*
130 G4cout << "G4EvaporationProbability: Z= " << theZ << " A= " << theA
131 << " resZ= " << resZ << " resA= " << resA
132 << " fragZ= " << fragZ << " fragA= " << fragA
133 << "\n freeU= " << freeU
134 << " a0= " << a0 << " OPT= " << OPTxs << " emin= "
135 << minEnergy << " emax= " << maxEnergy
136 << " CB= " << CB << G4endl;
137 */
138 if (OPTxs==0) {
139
140 G4double SystemEntropy = 2.0*std::sqrt(a0*freeU);
141 const G4double RN2 = 2.25*CLHEP::fermi*CLHEP::fermi
142 /(CLHEP::twopi*CLHEP::hbar_Planck*hbar_Planck);
143
144 G4double Alpha = CalcAlphaParam(fragment);
145 G4double Beta = CalcBetaParam(fragment);
146
147 // to be checked where to use a0, where - a1
148 a1 = pNuclearLevelData->GetLevelDensity(resZ,resA,freeU);
149 G4double GlobalFactor = fGamma*Alpha*pEvapMass*RN2*resA13*resA13/(a1*a1);
150
151 G4double maxea = maxEnergy*a1;
152 G4double Term1 = Beta*a1 - 1.5 + maxea;
153 G4double Term2 = (2.0*Beta*a1-3.0)*std::sqrt(maxea) + 2*maxea;
154
155 G4double ExpTerm1 = (SystemEntropy <= explim) ? G4Exp(-SystemEntropy) : 0.0;
156
157 G4double ExpTerm2 = 2.*std::sqrt(maxea) - SystemEntropy;
158 ExpTerm2 = std::min(ExpTerm2, explim);
159 ExpTerm2 = G4Exp(ExpTerm2);
160
161 pProbability = GlobalFactor*(Term1*ExpTerm1 + Term2*ExpTerm2);
162
163 } else {
164 // if Coulomb barrier cutoff is superimposed for all cross sections
165 // then the limit is the Coulomb Barrier
166 pProbability = IntegrateProbability(minEnergy, maxEnergy, CB);
167 }
168 /*
169 G4cout << "TotalProbability: Emin=" << minEnergy << " Emax= " << maxEnergy
170 << " CB= " << CB << " prob=" << pProbability << G4endl;
171 */
172 return pProbability;
173}
virtual G4double CalcAlphaParam(const G4Fragment &fragment)
virtual G4double CalcBetaParam(const G4Fragment &fragment)
G4int GetZ_asInt() const
G4int GetA_asInt() const
G4double IntegrateProbability(G4double elow, G4double ehigh, G4double CB)

The documentation for this class was generated from the following files: