Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4EvaporationProbability.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// J.M. Quesada (August2008). Based on:
27//
28// Hadronic Process: Nuclear De-excitations
29// by V. Lara (Oct 1998)
30//
31// Modif (03 September 2008) by J. M. Quesada for external choice of inverse
32// cross section option
33// JMQ (06 September 2008) Also external choices have been added for
34// superimposed Coulomb barrier (if useSICB is set true, by default is false)
35//
36// JMQ (14 february 2009) bug fixed in emission width: hbarc instead of
37// hbar_Planck in the denominator
38//
39// V.Ivanchenko general clean-up since 2010
40//
42#include "G4NuclearLevelData.hh"
43#include "G4VCoulombBarrier.hh"
45#include "G4SystemOfUnits.hh"
47#include "G4NucleiProperties.hh"
50#include "Randomize.hh"
51#include "G4Exp.hh"
52#include "G4Log.hh"
53#include "G4Pow.hh"
54
55static const G4double explim = 160.;
56
58 G4double aGamma)
59 : G4VEmissionProbability(aZ, anA), fGamma(aGamma)
60{
61 resA13 = lastA = muu = freeU = a0 = delta1 = 0.0;
62 pcoeff = fGamma*pEvapMass*CLHEP::millibarn
63 /((CLHEP::pi*CLHEP::hbarc)*(CLHEP::pi*CLHEP::hbarc));
64
65 if(0 == theZ) { index = 0; }
66 else if(1 == theZ) { index = theA; }
67 else { index = theA + 1; }
68 if(0 == aZ) {
69 ResetIntegrator(30, 0.25*CLHEP::MeV, 0.02);
70 } else {
71 ResetIntegrator(30, 0.5*CLHEP::MeV, 0.03);
72 }
73}
74
76{
77 return 1.0;
78}
79
81{
82 return 1.0;
83}
84
86 const G4Fragment& fragment, G4double minEnergy, G4double maxEnergy,
87 G4double CB, G4double exEnergy)
88{
89 G4int fragA = fragment.GetA_asInt();
90 G4int fragZ = fragment.GetZ_asInt();
91 G4double U = fragment.GetExcitationEnergy();
92 a0 = pNuclearLevelData->GetLevelDensity(fragZ,fragA,U);
93 freeU = exEnergy;
95 resA13 = pG4pow->Z13(resA);
96 /*
97 G4cout << "G4EvaporationProbability: Z= " << theZ << " A= " << theA
98 << " resZ= " << resZ << " resA= " << resA
99 << " fragZ= " << fragZ << " fragA= " << fragA
100 << "\n freeU= " << freeU
101 << " a0= " << a0 << " OPT= " << OPTxs << " emin= "
102 << minEnergy << " emax= " << maxEnergy
103 << " CB= " << CB << G4endl;
104 */
105 if (OPTxs==0) {
106
107 G4double SystemEntropy = 2.0*std::sqrt(a0*freeU);
108 const G4double RN2 = 2.25*CLHEP::fermi*CLHEP::fermi
109 /(CLHEP::twopi*CLHEP::hbar_Planck*hbar_Planck);
110
111 G4double Alpha = CalcAlphaParam(fragment);
112 G4double Beta = CalcBetaParam(fragment);
113
114 // to be checked where to use a0, where - a1
116 G4double GlobalFactor = fGamma*Alpha*pEvapMass*RN2*resA13*resA13/(a1*a1);
117
118 G4double maxea = maxEnergy*a1;
119 G4double Term1 = Beta*a1 - 1.5 + maxea;
120 G4double Term2 = (2.0*Beta*a1-3.0)*std::sqrt(maxea) + 2*maxea;
121
122 G4double ExpTerm1 = (SystemEntropy <= explim) ? G4Exp(-SystemEntropy) : 0.0;
123
124 G4double ExpTerm2 = 2.*std::sqrt(maxea) - SystemEntropy;
125 ExpTerm2 = std::min(ExpTerm2, explim);
126 ExpTerm2 = G4Exp(ExpTerm2);
127
128 pProbability = GlobalFactor*(Term1*ExpTerm1 + Term2*ExpTerm2);
129
130 } else {
131 // if Coulomb barrier cutoff is superimposed for all cross sections
132 // then the limit is the Coulomb Barrier
133 pProbability = IntegrateProbability(minEnergy, maxEnergy, CB);
134 }
135 /*
136 G4cout << "TotalProbability: Emin=" << minEnergy << " Emax= " << maxEnergy
137 << " CB= " << CB << " prob=" << pProbability << G4endl;
138 */
139 return pProbability;
140}
141
143{
144 G4double E0 = freeU;
145 // abnormal case - should never happens
146 if(pMass < pEvapMass + pResMass) { return 0.0; }
147
148 G4double m02 = pMass*pMass;
150 G4double mres = std::sqrt(m02 + m12 - 2.*pMass*(pEvapMass + K));
151
152 G4double excRes = mres - pResMass;
153 G4double E1 = excRes - delta1;
154 if(E1 <= 0.0) { return 0.0; }
156 G4double xs = CrossSection(K, CB);
157 G4double prob = pcoeff*G4Exp(2.0*(std::sqrt(a1*E1) - std::sqrt(a0*E0)))*K*xs;
158 return prob;
159}
160
163{
164 // compute power once
165 if(resA != lastA) {
166 lastA = resA;
167 if(0 < index)
169 }
170 G4double res = 0.0;
171 if(OPTxs <= 2) {
172 res = G4ChatterjeeCrossSection::ComputeCrossSection(K, CB, resA13, muu,
173 index, theZ, resA);
174 } else {
175 // added barrier penetration factor
176 G4double elim = 0.6*CB;
177 if(K > elim) {
178 res = G4KalbachCrossSection::ComputeCrossSection(K, elim, resA13, muu,
179 index, theZ, theA, resA);
180 res *= (1.0 - elim/K);
181 }
182 }
183 return res;
184}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:180
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
static G4double ComputeCrossSection(G4double K, G4double cb, G4double resA13, G4double amu1, G4int idx, G4int Z, G4int resA)
G4double CrossSection(G4double K, G4double CB)
G4EvaporationProbability(G4int anA, G4int aZ, G4double aGamma)
G4double ComputeProbability(G4double K, G4double CB) override
virtual G4double CalcAlphaParam(const G4Fragment &fragment)
virtual G4double TotalProbability(const G4Fragment &fragment, G4double minKinEnergy, G4double maxKinEnergy, G4double CB, G4double exEnergy)
virtual G4double CalcBetaParam(const G4Fragment &fragment)
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:312
G4int GetZ_asInt() const
Definition: G4Fragment.hh:289
G4int GetA_asInt() const
Definition: G4Fragment.hh:284
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)
G4double GetLevelDensity(G4int Z, G4int A, G4double U)
G4PairingCorrection * GetPairingCorrection()
G4double Z13(G4int Z) const
Definition: G4Pow.hh:123
void ResetIntegrator(size_t nbin, G4double de, G4double eps)
G4double IntegrateProbability(G4double elow, G4double ehigh, G4double CB)
G4NuclearLevelData * pNuclearLevelData