Geant4 11.3.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)
 
virtual ~G4VEmissionProbability ()=default
 
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 (size_t nbin, 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 68 of file G4EvaporationProbability.cc.

70 : G4VEmissionProbability(aZ, anA), fGamma(aGamma)
71{
72 resA13 = lastA = muu = freeU = a0 = a1 = delta0 = delta1 = 0.0;
73 pcoeff = fGamma*pEvapMass*CLHEP::millibarn
74 /((CLHEP::pi*CLHEP::hbarc)*(CLHEP::pi*CLHEP::hbarc));
75
76 if (1 == theZ && 1 == theA) { index = 1; }
77 else if (1 == theZ && 2 == theA) { index = 2; }
78 else if (1 == theZ && 3 == theA) { index = 3; }
79 else if (2 == theZ && 3 == theA) { index = 4; }
80 else if (2 == theZ && 4 == theA) { index = 5; }
81
82 if (OPTxs == 1) {
83 const G4ParticleDefinition* part = nullptr;
84 if (index == 1) { part = G4Proton::Proton(); }
85 else if (index == 2) { part = G4Deuteron::Deuteron(); }
86 else if (index == 3) { part = G4Triton::Triton(); }
87 else if (index == 4) { part = G4He3::He3(); }
88 else if (index == 5) { part = G4Alpha::Alpha(); }
89 else { part = G4Neutron::Neutron(); }
90 fXSection = new G4InterfaceToXS(part, index);
91 }
92
93 if (0 == aZ) {
94 ResetIntegrator(30, 0.15*CLHEP::MeV, 0.02);
95 } else {
96 ResetIntegrator(30, 0.25*CLHEP::MeV, 0.03);
97 }
98}
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(size_t nbin, 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 100 of file G4EvaporationProbability.cc.

101{
102 delete fXSection;
103}

◆ 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 172 of file G4EvaporationProbability.cc.

173{
174 // abnormal case - should never happens
175 if(pMass < pEvapMass + pResMass + K) { return 0.0; }
176
177 G4double pEvapM2 = pEvapMass*pEvapMass;
178 G4double mres = std::sqrt(pMass*pMass + pEvapM2 - 2.*pMass*(pEvapMass + K));
179
180 G4double excRes = mres - pResMass;
181 if (excRes < 0.0) { return 0.0; }
182 G4double K1 = (pMass*(K + pEvapMass) - pEvapM2)/mres - pEvapMass;
183 K1 = std::max(K1, 0.0);
184 G4double xs = CrossSection(K1, CB);
185 if (xs <= 0.0) { return 0.0; }
186
187 a1 = pNuclearLevelData->GetLevelDensity(resZ, resA, excRes);
188 G4double E0 = std::max(freeU - delta0, 0.0);
189 G4double E1 = std::max(excRes - delta1, 0.0);
190 G4double prob = pcoeff*G4Exp(2.0*(std::sqrt(a1*E1) - std::sqrt(a0*E0)))*K1*xs;
191 return prob;
192}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition G4Exp.hh:180
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 195 of file G4EvaporationProbability.cc.

196{
197 // compute power once
198 if (OPTxs > 1 && 0 < index && resA != lastA) {
199 lastA = resA;
201 }
202 if (OPTxs == 1) {
203 recentXS = fXSection->GetElementCrossSection(K, resZ)/CLHEP::millibarn;
204
205 } else if (OPTxs == 2) {
206 recentXS = G4ChatterjeeCrossSection::ComputeCrossSection(K, CB, resA13, muu,
207 index, theZ, resA);
208 } else if (OPTxs == 3) {
209 recentXS = G4KalbachCrossSection::ComputeCrossSection(K, CB, resA13, muu,
210 index, theZ, theA, resA);
211 }
212 return recentXS;
213}
static G4double ComputeCrossSection(G4double K, G4double cb, G4double resA13, G4double amu1, G4int idx, G4int Z, G4int resA)
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 115 of file G4EvaporationProbability.cc.

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