Geant4 10.7.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 SampleKineticEnergy (G4double minKinEnergy, G4double maxKinEnergy, G4double CB)
 
- Public Member Functions inherited from G4VEmissionProbability
 G4VEmissionProbability (G4int Z, G4int A)
 
virtual ~G4VEmissionProbability ()
 
void Initialise ()
 
virtual G4double EmissionProbability (const G4Fragment &fragment, G4double anEnergy)
 
virtual G4double ComputeProbability (G4double anEnergy, G4double CB)
 
G4int GetZ (void) const
 
G4int GetA (void) const
 
void SetDecayKinematics (G4int Z, G4int A, G4double rmass, G4double fmass)
 
G4double GetRecoilExcitation () const
 
void SetEvapExcitation (G4double exc)
 
G4double GetProbability () const
 
void ResetProbability ()
 
G4double SampleEnergy ()
 

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
G4int OPTxs
 
G4int pVerbose
 
G4int theZ
 
G4int theA
 
G4int resZ
 
G4int resA
 
G4double pMass
 
G4double pEvapMass
 
G4double pResMass
 
G4double pProbability
 
G4NuclearLevelDatapNuclearLevelData
 
G4PowpG4pow
 

Detailed Description

Definition at line 41 of file G4EvaporationProbability.hh.

Constructor & Destructor Documentation

◆ G4EvaporationProbability()

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

Definition at line 59 of file G4EvaporationProbability.cc.

61 : G4VEmissionProbability(aZ, anA), fGamma(aGamma)
62{
63 resA13 = muu = freeU = a0 = delta1 = 0.0;
64 pcoeff = fGamma*pEvapMass*CLHEP::millibarn
65 /((CLHEP::pi*CLHEP::hbarc)*(CLHEP::pi*CLHEP::hbarc));
66
67 if(0 == theZ) { index = 0; }
68 else if(1 == theZ) { index = theA; }
69 else { index = theA + 1; }
70 if(0 == aZ) {
71 ResetIntegrator(30, 0.25*CLHEP::MeV, 0.02);
72 } else {
73 ResetIntegrator(30, 0.5*CLHEP::MeV, 0.03);
74 }
75 // G4cout << "G4EvaporationProbability: Z= " << theZ << " A= " << theA
76 // << " M(GeV)= " << pEvapMass/GeV << G4endl;
77}
void ResetIntegrator(size_t nbin, G4double de, G4double eps)

◆ ~G4EvaporationProbability()

G4EvaporationProbability::~G4EvaporationProbability ( )
override

Definition at line 79 of file G4EvaporationProbability.cc.

80{}

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

152{
153 //G4cout << "### G4EvaporationProbability::ProbabilityDistributionFunction"
154 // << G4endl;
155
156 G4double E0 = freeU;
157 // abnormal case - should never happens
158 if(pMass < pEvapMass + pResMass) { return 0.0; }
159
160 G4double m02 = pMass*pMass;
162 G4double mres = sqrt(m02 + m12 - 2.*pMass*(pEvapMass + K));
163
164 G4double excRes = mres - pResMass;
165 G4double E1 = excRes - delta1;
166 if(E1 <= 0.0) { return 0.0; }
168 G4double xs = CrossSection(K, CB);
169 G4double prob = pcoeff*G4Exp(2.0*(std::sqrt(a1*E1) - std::sqrt(a0*E0)))*K*xs;
170 /*
171 G4cout << "PDF: Z= " << theZ << " A= " << theA
172 << " K= " << K << " E0= " << E0 << " E1= " << E1 << G4endl;
173 G4cout << " prob= " << prob << " pcoeff= " << pcoeff
174 << " xs= " << xs << G4endl;
175 */
176 return prob;
177}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
double G4double
Definition: G4Types.hh:83
G4double GetLevelDensity(G4int Z, G4int A, G4double U)
G4NuclearLevelData * pNuclearLevelData

◆ SampleKineticEnergy()

G4double G4EvaporationProbability::SampleKineticEnergy ( G4double  minKinEnergy,
G4double  maxKinEnergy,
G4double  CB 
)

Definition at line 196 of file G4EvaporationProbability.cc.

199{
200 /*
201 G4cout << "### Sample probability Emin= " << minKinEnergy
202 << " Emax= " << maxKinEnergy
203 << " Z= " << theZ << " A= " << theA << G4endl;
204 */
205 G4double T = 0.0;
206 CLHEP::HepRandomEngine* rndm = G4Random::getTheEngine();
207 if (OPTxs==0 || (OPTxs==4 && freeU < 10.)) {
208 // JMQ:
209 // It uses Dostrovsky's approximation for the inverse reaction cross
210 // in the probability for fragment emission
211 // MaximalKineticEnergy energy in the original version (V.Lara) was
212 // calculated at the Coulomb barrier.
213
214 G4double Rb = 4.0*a0*maxKinEnergy;
215 G4double RbSqrt = std::sqrt(Rb);
216 G4double PEX1 = (RbSqrt < explim) ? G4Exp(-RbSqrt) : 0.0;
217 G4double Rk = 0.0;
218 G4double FRk = 0.0;
219 G4int nn = 0;
220 const G4int nmax = 100;
221 const G4double ssqr3 = 1.5*std::sqrt(3.0);
222 do {
223 G4double RandNumber = rndm->flat();
224 Rk = 1.0 + (1./RbSqrt)*G4Log(RandNumber + (1.0-RandNumber)*PEX1);
225 G4double Q1 = 1.0;
226 G4double Q2 = 1.0;
227 if (theZ == 0) { // for emitted neutron
228 G4double Beta = (2.12/(resA13*resA13) - 0.05)*MeV/(0.76 + 2.2/resA13);
229 Q1 = 1.0 + Beta/maxKinEnergy;
230 Q2 = Q1*std::sqrt(Q1);
231 }
232
233 FRk = ssqr3 * Rk * (Q1 - Rk*Rk)/Q2;
234 if(nn > nmax) { break; }
235 ++nn;
236 // Loop checking, 05-Aug-2015, Vladimir Ivanchenko
237 } while (FRk < rndm->flat());
238
239 T = std::max(maxKinEnergy * (1.0-Rk*Rk), 0.0) + minKinEnergy;
240
241 } else {
242 T = SampleEnergy();
243 }
244 //G4cout<<"-- new Z= "<<theZ<<" A= "<< theA << " ekin= " << T << G4endl;
245 return T;
246}
G4double G4Log(G4double x)
Definition: G4Log.hh:226
int G4int
Definition: G4Types.hh:85
virtual double flat()=0
double flat()
Definition: G4AblaRandom.cc:48

◆ TotalProbability()

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

Definition at line 92 of file G4EvaporationProbability.cc.

95{
96 G4int fragA = fragment.GetA_asInt();
97 G4int fragZ = fragment.GetZ_asInt();
98 G4double U = fragment.GetExcitationEnergy();
99 a0 = pNuclearLevelData->GetLevelDensity(fragZ,fragA,U);
100 freeU = exEnergy;
101 resA13 = pG4pow->Z13(resA);
103 /*
104 G4cout << "G4EvaporationProbability: Z= " << theZ << " A= " << theA
105 << " resZ= " << resZ << " resA= " << resA
106 << " fragZ= " << fragZ << " fragA= " << fragA
107 << "\n freeU= " << freeU
108 << " a0= " << a0 << " OPT= " << OPTxs << " emin= "
109 << minEnergy << " emax= " << maxEnergy
110 << " CB= " << CB << G4endl;
111 */
112 if (OPTxs==0 || (OPTxs==4 && freeU < 10.)) {
113
114 G4double SystemEntropy = 2.0*std::sqrt(a0*freeU);
115
116 const G4double RN2 = 2.25*CLHEP::fermi*CLHEP::fermi
117 /(CLHEP::twopi*CLHEP::hbar_Planck*hbar_Planck);
118
119 G4double Alpha = CalcAlphaParam(fragment);
120 G4double Beta = CalcBetaParam(fragment);
121
122 // to be checked where to use a0, where - a1
124 G4double GlobalFactor = fGamma*Alpha*pEvapMass*RN2*resA13*resA13/(a1*a1);
125
126 G4double maxea = maxEnergy*a1;
127 G4double Term1 = Beta*a1 - 1.5 + maxea;
128 G4double Term2 = (2.0*Beta*a1-3.0)*std::sqrt(maxea) + 2*maxea;
129
130 G4double ExpTerm1 = (SystemEntropy <= explim) ? G4Exp(-SystemEntropy) : 0.0;
131
132 G4double ExpTerm2 = 2.*std::sqrt(maxea) - SystemEntropy;
133 ExpTerm2 = std::min(ExpTerm2, explim);
134 ExpTerm2 = G4Exp(ExpTerm2);
135
136 pProbability = GlobalFactor*(Term1*ExpTerm1 + Term2*ExpTerm2);
137
138 } else {
139
140 // compute power once
141 if(0 < index) {
143 }
144 // if Coulomb barrier cutoff is superimposed for all cross sections
145 // then the limit is the Coulomb Barrier
146 pProbability = IntegrateProbability(minEnergy, maxEnergy, CB);
147 }
148 return pProbability;
149}
virtual G4double CalcAlphaParam(const G4Fragment &fragment)
virtual G4double CalcBetaParam(const G4Fragment &fragment)
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:275
G4int GetZ_asInt() const
Definition: G4Fragment.hh:263
G4int GetA_asInt() const
Definition: G4Fragment.hh:258
static G4double ComputePowerParameter(G4int resA, G4int idx)
G4PairingCorrection * GetPairingCorrection()
G4double Z13(G4int Z) const
Definition: G4Pow.hh:123
G4double IntegrateProbability(G4double elow, G4double ehigh, G4double CB)

Referenced by G4EvaporationChannel::GetEmissionProbability().


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