Geant4  10.02.p03
G4EvaporationProbability Class Referenceabstract

#include <G4EvaporationProbability.hh>

Inheritance diagram for G4EvaporationProbability:
Collaboration diagram for G4EvaporationProbability:

Public Member Functions

 G4EvaporationProbability (G4int anA, G4int aZ, G4double aGamma, G4VCoulombBarrier *)
 
virtual ~G4EvaporationProbability ()
 
G4int GetZ (void) const
 
G4int GetA (void) const
 
G4double EmissionProbability (const G4Fragment &fragment, G4double maxKineticEnergy)
 
G4double TotalProbability (const G4Fragment &fragment, G4double minKineticEnergy, G4double maxKineticEnergy)
 
G4double ProbabilityDistributionFunction (G4double K)
 
G4double SampleKineticEnergy (G4double minKineticEnergy, G4double maxKineticEnergy)
 
- Public Member Functions inherited from G4VEmissionProbability
 G4VEmissionProbability ()
 
virtual ~G4VEmissionProbability ()
 
void SetOPTxs (G4int opt)
 
void UseSICB (G4bool use)
 

Protected Member Functions

virtual G4double CalcAlphaParam (const G4Fragment &fragment)=0
 
virtual G4double CalcBetaParam (const G4Fragment &fragment)=0
 

Private Member Functions

G4double IntegrateEmissionProbability (G4double low, G4double up)
 
G4double CrossSection (G4double K)
 
 G4EvaporationProbability (const G4EvaporationProbability &right)
 
const G4EvaporationProbabilityoperator= (const G4EvaporationProbability &right)
 
G4bool operator== (const G4EvaporationProbability &right) const
 
G4bool operator!= (const G4EvaporationProbability &right) const
 

Private Attributes

G4int theA
 
G4int theZ
 
G4int fragA
 
G4int fragZ
 
G4int resA
 
G4int resZ
 
G4int index
 
G4int nbins
 
G4double resA13
 
G4double muu
 
G4double partMass
 
G4double resMass
 
G4double fragMass
 
G4double U
 
G4double delta0
 
G4double delta1
 
G4double a0
 
G4double Gamma
 
G4double probability [11]
 

Additional Inherited Members

- Protected Attributes inherited from G4VEmissionProbability
G4int OPTxs
 
G4bool useSICB
 
G4PowfG4pow
 
G4PairingCorrectionfPairCorr
 
G4EvaporationLevelDensityParametertheEvapLDPptr
 

Detailed Description

Definition at line 42 of file G4EvaporationProbability.hh.

Constructor & Destructor Documentation

◆ G4EvaporationProbability() [1/2]

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

Definition at line 56 of file G4EvaporationProbability.cc.

59  : theA(anA),
60  theZ(aZ),
61  Gamma(aGamma)
62 {
63  resZ = resA = fragA = fragZ = nbins = 0;
64  resA13 = muu = resMass = fragMass = U = delta0 = delta1 = a0 = 0.0;
66  index = 0;
67  if(1 == theZ) { index = theA; }
68  else { index = theA + 1; }
69  for(G4int i=0; i<11; ++i) { probability[i] = 0.0; }
70 }
static G4double GetNuclearMass(const G4double A, const G4double Z)
int G4int
Definition: G4Types.hh:78
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~G4EvaporationProbability()

G4EvaporationProbability::~G4EvaporationProbability ( )
virtual

Definition at line 72 of file G4EvaporationProbability.cc.

73 {}

◆ G4EvaporationProbability() [2/2]

G4EvaporationProbability::G4EvaporationProbability ( const G4EvaporationProbability right)
private

Member Function Documentation

◆ CalcAlphaParam()

virtual G4double G4EvaporationProbability::CalcAlphaParam ( const G4Fragment fragment)
protectedpure virtual

Implemented in G4DeuteronEvaporationProbability, G4NeutronEvaporationProbability, G4TritonEvaporationProbability, G4AlphaEvaporationProbability, G4He3EvaporationProbability, and G4ProtonEvaporationProbability.

Here is the caller graph for this function:

◆ CalcBetaParam()

virtual G4double G4EvaporationProbability::CalcBetaParam ( const G4Fragment fragment)
protectedpure virtual

Implemented in G4DeuteronEvaporationProbability, G4NeutronEvaporationProbability, G4TritonEvaporationProbability, G4AlphaEvaporationProbability, G4He3EvaporationProbability, and G4ProtonEvaporationProbability.

Here is the caller graph for this function:

◆ CrossSection()

G4double G4EvaporationProbability::CrossSection ( G4double  K)
private

Definition at line 193 of file G4EvaporationProbability.cc.

194 {
195  G4double res;
196  if(OPTxs <= 2) {
198  index, theZ,
199  resZ, resA);
200  } else {
202  index, theZ, theA,
203  resZ, resA);
204  }
205  return res;
206 }
static G4double ComputeCrossSection(G4double K, G4double resA13, G4double amu1, G4int idx, G4int Z, G4int resZ, G4int resA)
double G4double
Definition: G4Types.hh:76
static G4double ComputeCrossSection(G4double K, G4double resA13, G4double amu1, G4int idx, G4int Z, G4int A, G4int resZ, G4int resA)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ EmissionProbability()

G4double G4EvaporationProbability::EmissionProbability ( const G4Fragment fragment,
G4double  maxKineticEnergy 
)
virtual

Implements G4VEmissionProbability.

Definition at line 76 of file G4EvaporationProbability.cc.

78 {
79  return 0.0;
80 }
Here is the caller graph for this function:

◆ GetA()

G4int G4EvaporationProbability::GetA ( void  ) const
inline

Definition at line 53 of file G4EvaporationProbability.hh.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetZ()

G4int G4EvaporationProbability::GetZ ( void  ) const
inline

Definition at line 51 of file G4EvaporationProbability.hh.

Here is the caller graph for this function:

◆ IntegrateEmissionProbability()

G4double G4EvaporationProbability::IntegrateEmissionProbability ( G4double  low,
G4double  up 
)
private

Definition at line 146 of file G4EvaporationProbability.cc.

147 {
148  G4double sum = 0.0;
149  G4double del = up - low;
150  nbins = std::min(10, G4int(del*invmev));
151  nbins = std::max(nbins, 2);
152  del /= G4double(nbins);
153  G4double T = low - del*0.5;
154  for(G4int i=1; i<=nbins; ++i) {
155  T += del;
157  probability[i] = sum;
158  }
159  sum *= del;
160  return sum;
161 }
static const G4double invmev
int G4int
Definition: G4Types.hh:78
double G4double
Definition: G4Types.hh:76
G4double ProbabilityDistributionFunction(G4double K)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator!=()

G4bool G4EvaporationProbability::operator!= ( const G4EvaporationProbability right) const
private
Here is the caller graph for this function:

◆ operator=()

const G4EvaporationProbability& G4EvaporationProbability::operator= ( const G4EvaporationProbability right)
private
Here is the caller graph for this function:

◆ operator==()

G4bool G4EvaporationProbability::operator== ( const G4EvaporationProbability right) const
private
Here is the caller graph for this function:

◆ ProbabilityDistributionFunction()

G4double G4EvaporationProbability::ProbabilityDistributionFunction ( G4double  K)

Definition at line 163 of file G4EvaporationProbability.cc.

164 {
165  //G4cout << "### G4EvaporationProbability::ProbabilityDistributionFunction"
166  // << G4endl;
167 
168  G4double E0 = U - delta0;
169  G4double E1 = U + fragMass - partMass - resMass - delta1 - K;
170  /*
171  G4cout << "PDF: FragZ= " << fragment.GetZ_asInt() << " FragA= "
172  << fragment.GetA_asInt()
173  << " Z= " << theZ << " A= " << theA
174  << " K= " << K << " E0= " << E0 << " E1= " << E1 << G4endl;
175  */
176  if(E1 < 0.0) { return 0.0; }
177 
179 
180  //JMQ 14/02/09 BUG fixed: hbarc should be in the denominator instead
181  // of hbar_Planck; without 1/hbar_Panck remains as a width
182 
183  static const G4double pcoeff = millibarn/((pi*hbarc)*(pi*hbarc));
184 
185  // Fixed numerical problem
186  G4double Prob = pcoeff*Gamma*partMass
187  *G4Exp(2*(std::sqrt(a1*E1) - std::sqrt(a0*E0)))*K*CrossSection(K);
188 
189  return Prob;
190 }
G4double LevelDensityParameter(G4int A, G4int Z, G4double U) const
static const G4double a1
G4EvaporationLevelDensityParameter * theEvapLDPptr
float hbarc
Definition: hepunit.py:265
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
static const double pi
Definition: G4SIunits.hh:74
static const double millibarn
Definition: G4SIunits.hh:105
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SampleKineticEnergy()

G4double G4EvaporationProbability::SampleKineticEnergy ( G4double  minKineticEnergy,
G4double  maxKineticEnergy 
)

Definition at line 209 of file G4EvaporationProbability.cc.

211 {
212  if(maxKinEnergy <= minKinEnergy) { return 0.0; }
213 
214  G4double T = 0.0;
215  if (OPTxs==0) {
216  // JMQ:
217  // It uses Dostrovsky's approximation for the inverse reaction cross
218  // in the probability for fragment emission
219  // MaximalKineticEnergy energy in the original version (V.Lara) was
220  // calculated at the Coulomb barrier.
221 
222  G4double Rb = 4.0*a0*maxKinEnergy;
223  G4double RbSqrt = std::sqrt(Rb);
224  G4double PEX1 = 0.0;
225  if (RbSqrt < 160.0) PEX1 = G4Exp(-RbSqrt);
226  G4double Rk = 0.0;
227  G4double FRk = 0.0;
228  do {
229  G4double RandNumber = G4UniformRand();
230  Rk = 1.0 + (1./RbSqrt)*G4Log(RandNumber + (1.0-RandNumber)*PEX1);
231  G4double Q1 = 1.0;
232  G4double Q2 = 1.0;
233  if (theZ == 0) { // for emitted neutron
234  G4double Beta = (2.12/(resA*resA) - 0.05)*MeV/(0.76 + 2.2/resA13);
235  Q1 = 1.0 + Beta/maxKinEnergy;
236  Q2 = Q1*std::sqrt(Q1);
237  }
238 
239  FRk = ssqr3 * Rk * (Q1 - Rk*Rk)/Q2;
240 
241  // Loop checking, 05-Aug-2015, Vladimir Ivanchenko
242  } while (FRk < G4UniformRand());
243 
244  T = maxKinEnergy * (1.0-Rk*Rk) + minKinEnergy;
245 
246  } else {
247 
249  G4int i = 0;
250  for(; i<nbins; ++i) { if(p <= probability[i+1]) { break; } }
251  G4double delta = (maxKinEnergy - minKinEnergy)/G4double(nbins);
252  T = minKinEnergy + delta*i
253  + delta*(p - probability[i])/(probability[i+1] - probability[i]);
254 
255  }
256  //G4cout << " T= " << T << G4endl;
257  return T;
258 }
static const double MeV
Definition: G4SIunits.hh:211
static const G4double ssqr3
int G4int
Definition: G4Types.hh:78
#define G4UniformRand()
Definition: Randomize.hh:97
G4double G4Log(G4double x)
Definition: G4Log.hh:230
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ TotalProbability()

G4double G4EvaporationProbability::TotalProbability ( const G4Fragment fragment,
G4double  minKineticEnergy,
G4double  maxKineticEnergy 
)

Definition at line 82 of file G4EvaporationProbability.cc.

84 {
85  if (maxEnergy <= minEnergy) { return 0.0; }
86 
87  fragA = fragment.GetA_asInt();
88  fragZ = fragment.GetZ_asInt();
89  resA = fragA - theA;
90  resZ = fragZ - theZ;
91 
92  U = fragment.GetExcitationEnergy();
94  if(U < delta0) { return 0.0; }
95 
96  fragMass = fragment.GetGroundStateMass();
99  resA13 = fG4pow->Z13(resA);
100 
101  G4double Width = 0.0;
102  if (OPTxs==0) {
103 
104  G4double SystemEntropy = 2.0*std::sqrt(
106 
107  static const G4double RN2 =
109 
110  G4double Alpha = CalcAlphaParam(fragment);
111  G4double Beta = CalcBetaParam(fragment);
112 
114  G4double GlobalFactor = Gamma*Alpha*partMass*RN2*resA13*resA13/(a0*a0);
115 
116  G4double maxea = maxEnergy*a0;
117  G4double Term1 = Beta*a0 - 1.5 + maxea;
118  G4double Term2 = (2.0*Beta*a0-3.0)*std::sqrt(maxea) + 2*maxea;
119 
120  G4double ExpTerm1 = 0.0;
121  if (SystemEntropy <= explim) { ExpTerm1 = G4Exp(-SystemEntropy); }
122 
123  G4double ExpTerm2 = 2.*std::sqrt(maxea) - SystemEntropy;
124  ExpTerm2 = std::min(ExpTerm2, explim);
125  ExpTerm2 = G4Exp(ExpTerm2);
126 
127  Width = GlobalFactor*(Term1*ExpTerm1 + Term2*ExpTerm2);
128 
129  } else {
130 
132  // compute power once
133  if(OPTxs <= 2) {
135  } else {
137  }
138  // if Coulomb barrier cutoff is superimposed for all cross sections
139  // then the limit is the Coulomb Barrier
140  Width = IntegrateEmissionProbability(minEnergy, maxEnergy);
141  }
142  return Width;
143 }
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:273
G4double GetPairingCorrection(G4int A, G4int Z) const
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double LevelDensityParameter(G4int A, G4int Z, G4double U) const
G4int GetA_asInt() const
Definition: G4Fragment.hh:256
G4double GetGroundStateMass() const
Definition: G4Fragment.hh:278
static G4double ComputePowerParameter(G4int resA, G4int idx)
static G4double ComputePowerParameter(G4int resA, G4int idx)
G4EvaporationLevelDensityParameter * theEvapLDPptr
G4int GetZ_asInt() const
Definition: G4Fragment.hh:261
static const G4double explim
static const double twopi
Definition: G4SIunits.hh:75
virtual G4double CalcBetaParam(const G4Fragment &fragment)=0
virtual G4double CalcAlphaParam(const G4Fragment &fragment)=0
G4double Z13(G4int Z) const
Definition: G4Pow.hh:127
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
float hbar_Planck
Definition: hepunit.py:264
G4PairingCorrection * fPairCorr
double G4double
Definition: G4Types.hh:76
G4double IntegrateEmissionProbability(G4double low, G4double up)
static const double fermi
Definition: G4SIunits.hh:102
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ a0

G4double G4EvaporationProbability::a0
private

Definition at line 102 of file G4EvaporationProbability.hh.

◆ delta0

G4double G4EvaporationProbability::delta0
private

Definition at line 102 of file G4EvaporationProbability.hh.

◆ delta1

G4double G4EvaporationProbability::delta1
private

Definition at line 102 of file G4EvaporationProbability.hh.

◆ fragA

G4int G4EvaporationProbability::fragA
private

Definition at line 90 of file G4EvaporationProbability.hh.

◆ fragMass

G4double G4EvaporationProbability::fragMass
private

Definition at line 101 of file G4EvaporationProbability.hh.

◆ fragZ

G4int G4EvaporationProbability::fragZ
private

Definition at line 91 of file G4EvaporationProbability.hh.

◆ Gamma

G4double G4EvaporationProbability::Gamma
private

Definition at line 106 of file G4EvaporationProbability.hh.

◆ index

G4int G4EvaporationProbability::index
private

Definition at line 94 of file G4EvaporationProbability.hh.

◆ muu

G4double G4EvaporationProbability::muu
private

Definition at line 98 of file G4EvaporationProbability.hh.

◆ nbins

G4int G4EvaporationProbability::nbins
private

Definition at line 95 of file G4EvaporationProbability.hh.

◆ partMass

G4double G4EvaporationProbability::partMass
private

Definition at line 99 of file G4EvaporationProbability.hh.

◆ probability

G4double G4EvaporationProbability::probability[11]
private

Definition at line 108 of file G4EvaporationProbability.hh.

◆ resA

G4int G4EvaporationProbability::resA
private

Definition at line 92 of file G4EvaporationProbability.hh.

◆ resA13

G4double G4EvaporationProbability::resA13
private

Definition at line 97 of file G4EvaporationProbability.hh.

◆ resMass

G4double G4EvaporationProbability::resMass
private

Definition at line 100 of file G4EvaporationProbability.hh.

◆ resZ

G4int G4EvaporationProbability::resZ
private

Definition at line 93 of file G4EvaporationProbability.hh.

◆ theA

G4int G4EvaporationProbability::theA
private

Definition at line 88 of file G4EvaporationProbability.hh.

◆ theZ

G4int G4EvaporationProbability::theZ
private

Definition at line 89 of file G4EvaporationProbability.hh.

◆ U

G4double G4EvaporationProbability::U
private

Definition at line 102 of file G4EvaporationProbability.hh.


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