Geant4-11
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes
G4FissionProbability Class Reference

#include <G4FissionProbability.hh>

Inheritance diagram for G4FissionProbability:
G4VEmissionProbability

Public Member Functions

virtual G4double ComputeProbability (G4double anEnergy, G4double CB)
 
G4double EmissionProbability (const G4Fragment &fragment, G4double MaximalKineticEnergy) override
 
 G4FissionProbability ()
 
 G4FissionProbability (const G4FissionProbability &right)=delete
 
G4int GetA (void) const
 
G4double GetProbability () const
 
G4double GetRecoilExcitation () const
 
G4int GetZ (void) const
 
void Initialise ()
 
G4bool operator!= (const G4FissionProbability &right) const =delete
 
const G4FissionProbabilityoperator= (const G4FissionProbability &right)=delete
 
G4bool operator== (const G4FissionProbability &right) const =delete
 
void ResetProbability ()
 
G4double SampleEnergy ()
 
void SetDecayKinematics (G4int Z, G4int A, G4double rmass, G4double fmass)
 
void SetEvapExcitation (G4double exc)
 
void SetEvaporationLevelDensityParameter (G4VLevelDensityParameter *aLevelDensity)
 
void SetFissionLevelDensityParameter (G4VLevelDensityParameter *aLevelDensity)
 
 ~G4FissionProbability () override
 

Protected Member Functions

G4double IntegrateProbability (G4double elow, G4double ehigh, G4double CB)
 
void ResetIntegrator (size_t nbin, G4double de, G4double eps)
 

Protected Attributes

G4int OPTxs
 
G4double pEvapMass
 
G4PowpG4pow
 
G4double pMass
 
G4NuclearLevelDatapNuclearLevelData
 
G4double pProbability
 
G4double pResMass
 
G4int pVerbose
 
G4int resA
 
G4int resZ
 
G4int theA
 
G4int theZ
 

Private Member Functions

G4double FindRecoilExcitation (G4double e)
 

Private Attributes

G4double accuracy
 
G4double eCoulomb
 
G4double elimit
 
G4double emax
 
G4double emin
 
G4double fExc
 
G4double fExcRes
 
G4bool fFD
 
G4PairingCorrectionfPairCorr
 
size_t length
 
size_t nbin
 
bool ownEvapLDP
 
bool ownFissLDP
 
G4double probmax
 
G4VLevelDensityParametertheEvapLDP
 
G4VLevelDensityParametertheFissLDP
 

Detailed Description

Definition at line 39 of file G4FissionProbability.hh.

Constructor & Destructor Documentation

◆ G4FissionProbability() [1/2]

G4FissionProbability::G4FissionProbability ( )
explicit

◆ ~G4FissionProbability()

G4FissionProbability::~G4FissionProbability ( )
override

Definition at line 54 of file G4FissionProbability.cc.

55{
56 if (ownEvapLDP) delete theEvapLDP;
57 if (ownFissLDP) delete theFissLDP;
58}

References ownEvapLDP, ownFissLDP, theEvapLDP, and theFissLDP.

◆ G4FissionProbability() [2/2]

G4FissionProbability::G4FissionProbability ( const G4FissionProbability right)
delete

Member Function Documentation

◆ ComputeProbability()

G4double G4VEmissionProbability::ComputeProbability ( G4double  anEnergy,
G4double  CB 
)
virtualinherited

◆ EmissionProbability()

G4double G4FissionProbability::EmissionProbability ( const G4Fragment fragment,
G4double  MaximalKineticEnergy 
)
overridevirtual

Reimplemented from G4VEmissionProbability.

Definition at line 61 of file G4FissionProbability.cc.

64{
65 if (MaximalKineticEnergy <= 0.0) { return 0.0; }
66 G4int A = fragment.GetA_asInt();
67 G4int Z = fragment.GetZ_asInt();
68 G4double U = fragment.GetExcitationEnergy();
69
70 G4double Ucompound = U - fPairCorr->GetPairingCorrection(A,Z);
72 if(Ucompound < 0.0 || Ufission < 0.0) { return 0.0; }
73
74 G4double SystemEntropy =
75 2.0*std::sqrt(theEvapLDP->LevelDensityParameter(A,Z,Ucompound)*Ucompound);
76
77 G4double afission = theFissLDP->LevelDensityParameter(A,Z,Ufission);
78
79 G4double Cf = 2.0*std::sqrt(afission*MaximalKineticEnergy);
80 G4double Exp1 = (SystemEntropy <= 160.0) ? G4Exp(-SystemEntropy) : 0.0;
81 G4double Exp2 = (SystemEntropy-Cf <= 160.0) ? G4Exp(-SystemEntropy+Cf) : 0.0;
82
83 // JMQ 14/02/09 BUG fixed in fission probability (missing parenthesis
84 // at denominator)
85 G4double probability = (Exp1 + (Cf-1.0)*Exp2) / (4.0*pi*afission);
86
87 return probability;
88}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
static constexpr double pi
Definition: G4SIunits.hh:55
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
const G4double A[17]
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:299
G4int GetZ_asInt() const
Definition: G4Fragment.hh:276
G4int GetA_asInt() const
Definition: G4Fragment.hh:271
G4double GetFissionPairingCorrection(G4int A, G4int Z) const
G4double GetPairingCorrection(G4int A, G4int Z) const
virtual G4double LevelDensityParameter(G4int A, G4int Z, G4double U) const =0

References A, fPairCorr, G4Exp(), G4Fragment::GetA_asInt(), G4Fragment::GetExcitationEnergy(), G4PairingCorrection::GetFissionPairingCorrection(), G4PairingCorrection::GetPairingCorrection(), G4Fragment::GetZ_asInt(), G4VLevelDensityParameter::LevelDensityParameter(), pi, theEvapLDP, theFissLDP, and Z.

◆ FindRecoilExcitation()

G4double G4VEmissionProbability::FindRecoilExcitation ( G4double  e)
privateinherited

Definition at line 187 of file G4VEmissionProbability.cc.

188{
189 fExcRes = 0.0;
190 G4double mass = pEvapMass + fExc;
191 // abnormal case - should never happens
192 if(pMass < mass + pResMass) { return 0.0; }
193
194 G4double m02 = pMass*pMass;
195 G4double m12 = mass*mass;
197 G4double mres = std::sqrt(m02 + m12 - 2.*pMass*(mass + e));
198
199 fExcRes = mres - pResMass;
200 const G4double tolerance = 0.1*CLHEP::keV;
201
202 if(pVerbose > 1) {
203 G4cout << "### G4VEmissionProbability::FindRecoilExcitation for resZ= "
204 << resZ << " resA= " << resA
205 << " evaporated Z= " << theZ << " A= " << theA
206 << " Ekin= " << e << " Eexc= " << fExcRes << G4endl;
207 }
208
209 // residual nucleus is in the ground state
210 if(fExcRes < tolerance) {
211 fExcRes = 0.0;
212 //G4cout<<"Ground state Ekin= "<< 0.5*(m02 + m12 - m22)/pMass - mass<<G4endl;
213 return std::max(0.5*(m02 + m12 - m22)/pMass - mass,0.0);
214 }
215 // select final state excitation
216 auto lManager = pNuclearLevelData->GetLevelManager(resZ, resA);
217 if(!lManager) { return e; }
218
219 //G4cout<<"ExcMax= "<< lManager->MaxLevelEnergy()<<" CB= "<<eCoulomb<<G4endl;
220 // levels are not known
221 if(fExcRes > lManager->MaxLevelEnergy() + tolerance) { return e; }
222
223 // find level
224 auto idx = lManager->NearestLevelIndex(fExcRes);
225 //G4cout << "idx= " << idx << " Exc= " << fExcRes
226 // << " Elevel= " << lManager->LevelEnergy(idx) << G4endl;
227 for(; idx > 0; --idx) {
228 fExcRes = lManager->LevelEnergy(idx);
229 // excited level
230 if(pMass > mass + pResMass + fExcRes && lManager->FloatingLevel(idx) == 0) {
231 G4double massR = pResMass + fExcRes;
232 G4double mr2 = massR*massR;
233 //G4cout << "Result idx= " << idx << " Eexc= " << fExcRes
234 // << " Ekin= " << 0.5*(m02 + m12 - mr2)/pMass - mass << G4endl;
235 return std::max(0.5*(m02 + m12 - mr2)/pMass - mass,0.0);
236 }
237 }
238 // ground level
239 fExcRes = 0.0;
240 //G4cout << "Ground state Ekin= " << 0.5*(m02 + m12 - m22)/pMass - mass << G4endl;
241 return std::max(0.5*(m02 + m12 - m22)/pMass - mass,0.0);
242}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
size_t NearestLevelIndex(G4double energy, size_t index=0) const
const G4LevelManager * GetLevelManager(G4int Z, G4int A)
G4NuclearLevelData * pNuclearLevelData
static constexpr double keV
T max(const T t1, const T t2)
brief Return the largest of the two arguments

References G4VEmissionProbability::fExc, G4VEmissionProbability::fExcRes, G4cout, G4endl, G4NuclearLevelData::GetLevelManager(), CLHEP::keV, G4INCL::Math::max(), G4LevelManager::NearestLevelIndex(), G4VEmissionProbability::pEvapMass, G4VEmissionProbability::pMass, G4VEmissionProbability::pNuclearLevelData, G4VEmissionProbability::pResMass, G4VEmissionProbability::pVerbose, G4VEmissionProbability::resA, G4VEmissionProbability::resZ, G4VEmissionProbability::theA, and G4VEmissionProbability::theZ.

Referenced by G4VEmissionProbability::SampleEnergy().

◆ GetA()

G4int G4VEmissionProbability::GetA ( void  ) const
inlineinherited

Definition at line 63 of file G4VEmissionProbability.hh.

63{ return theA; }

References G4VEmissionProbability::theA.

◆ GetProbability()

G4double G4VEmissionProbability::GetProbability ( ) const
inlineinherited

Definition at line 75 of file G4VEmissionProbability.hh.

75{ return pProbability; };

References G4VEmissionProbability::pProbability.

◆ GetRecoilExcitation()

G4double G4VEmissionProbability::GetRecoilExcitation ( ) const
inlineinherited

Definition at line 71 of file G4VEmissionProbability.hh.

71{ return fExcRes; };

References G4VEmissionProbability::fExcRes.

◆ GetZ()

G4int G4VEmissionProbability::GetZ ( void  ) const
inlineinherited

◆ Initialise()

void G4VEmissionProbability::Initialise ( )
inherited

◆ IntegrateProbability()

G4double G4VEmissionProbability::IntegrateProbability ( G4double  elow,
G4double  ehigh,
G4double  CB 
)
protectedinherited

Definition at line 81 of file G4VEmissionProbability.cc.

84{
85 pProbability = 0.0;
86 if(elow >= ehigh) { return pProbability; }
87
88 emin = elow;
89 emax = ehigh;
90 eCoulomb = cb;
91
92 G4double edelta = elimit;
93 nbin = (size_t)((emax - emin)/edelta) + 1;
94 const G4double edeltamin = 0.2*CLHEP::MeV;
95 const G4double edeltamax = 2*CLHEP::MeV;
96 if(nbin < 4) {
97 nbin = 4;
98 edelta = (emax - emin)/(G4double)nbin;
99 } else if(nbin > length) {
100 nbin = length;
101 }
102
103 G4double x(emin), del, y;
104 G4double edelmicro= edelta*0.02;
105 probmax = ComputeProbability(x + edelmicro, eCoulomb);
106 G4double problast = probmax;
107 if(pVerbose > 2) {
108 G4cout << "### G4VEmissionProbability::IntegrateProbability: "
109 << " Emax= " << emax << " QB= " << cb << " nbin= " << nbin
110 << G4endl;
111 G4cout << " 0. E= " << emin << " prob= " << probmax << G4endl;
112 }
113 for(size_t i=1; i<=nbin; ++i) {
114 x += edelta;
115 if(x > emax) {
116 edelta += (emax - x);
117 x = emax;
118 }
119 G4bool endpoint = (std::abs(x - emax) < edelmicro) ? true : false;
120 G4double xx = endpoint ? x - edelmicro : x;
122 if(pVerbose > 2) {
123 G4cout << " " << i << ". E= " << x << " prob= " << y
124 << " Edel= " << edelta << G4endl;
125 }
127 del = (y + problast)*edelta*0.5;
128 pProbability += del;
129 // end of the loop
130 if(del < accuracy*pProbability || endpoint) { break; }
131 problast = y;
132
133 // smart step definition
134 if(del != pProbability && del > 0.8*pProbability &&
135 0.7*edelta > edeltamin) {
136 edelta *= 0.7;
137 } else if(del < 0.1*pProbability && 1.5*edelta < edeltamax) {
138 edelta *= 1.5;
139 }
140 }
141
142 if(pVerbose > 1) {
143 G4cout << " Probability= " << pProbability << " probmax= "
144 << probmax << G4endl;
145 }
146 return pProbability;
147}
bool G4bool
Definition: G4Types.hh:86
virtual G4double ComputeProbability(G4double anEnergy, G4double CB)
static constexpr double MeV

References G4VEmissionProbability::accuracy, G4VEmissionProbability::ComputeProbability(), G4VEmissionProbability::eCoulomb, G4VEmissionProbability::elimit, G4VEmissionProbability::emax, G4VEmissionProbability::emin, G4cout, G4endl, G4VEmissionProbability::length, G4INCL::Math::max(), CLHEP::MeV, G4VEmissionProbability::nbin, G4VEmissionProbability::pProbability, G4VEmissionProbability::probmax, and G4VEmissionProbability::pVerbose.

Referenced by G4GEMProbabilityVI::ComputeTotalProbability(), and G4EvaporationProbability::TotalProbability().

◆ operator!=()

G4bool G4FissionProbability::operator!= ( const G4FissionProbability right) const
delete

◆ operator=()

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

◆ operator==()

G4bool G4FissionProbability::operator== ( const G4FissionProbability right) const
delete

◆ ResetIntegrator()

void G4VEmissionProbability::ResetIntegrator ( size_t  nbin,
G4double  de,
G4double  eps 
)
protectedinherited

Definition at line 64 of file G4VEmissionProbability.cc.

65{
66 if(nbins > 0) { length = nbins; }
67 if(de > 0.0) { elimit = de; }
68 if(eps > 0.0) { accuracy = eps; }
69}
static const G4double eps

References G4VEmissionProbability::accuracy, G4VEmissionProbability::elimit, eps, and G4VEmissionProbability::length.

Referenced by G4EvaporationProbability::G4EvaporationProbability(), and G4GEMProbabilityVI::G4GEMProbabilityVI().

◆ ResetProbability()

void G4VEmissionProbability::ResetProbability ( )
inlineinherited

◆ SampleEnergy()

G4double G4VEmissionProbability::SampleEnergy ( )
inherited

Definition at line 149 of file G4VEmissionProbability.cc.

150{
151 static const G4double fact = 1.05;
152 probmax *= fact;
153
154 if(pVerbose > 1) {
155 G4cout << "### G4VEmissionProbability::SampleEnergy: "
156 << " Emin= " << emin << " Emax= " << emax
157 << " probmax= " << probmax << G4endl;
158 }
159
160 CLHEP::HepRandomEngine* rndm = G4Random::getTheEngine();
161 const G4int nmax = 100;
162 G4double del = emax - emin;
163 G4double ekin, g;
164 G4int n = 0;
165 do {
166 ekin = del*rndm->flat() + emin;
167 ++n;
169 if(pVerbose > 2) {
170 G4cout << " " << n
171 << ". prob= " << g << " probmax= " << probmax
172 << " Ekin= " << ekin << G4endl;
173 }
174 if((g > probmax || n > nmax) && pVerbose > 1) {
175 G4cout << "### G4VEmissionProbability::SampleEnergy for Z= " << theZ
176 << " A= " << theA
177 << "\n Warning n= " << n
178 << " prob/probmax= " << g/probmax
179 << " prob= " << g << " probmax= " << probmax
180 << "\n Ekin= " << ekin << " Emin= " << emin
181 << " Emax= " << emax << G4endl;
182 }
183 } while(probmax*rndm->flat() > g && n < nmax);
184 return (fFD) ? FindRecoilExcitation(ekin) : ekin;
185}
static constexpr double g
Definition: G4SIunits.hh:168
virtual double flat()=0
G4double FindRecoilExcitation(G4double e)

References G4VEmissionProbability::ComputeProbability(), G4VEmissionProbability::eCoulomb, G4VEmissionProbability::emax, G4VEmissionProbability::emin, G4VEmissionProbability::fFD, G4VEmissionProbability::FindRecoilExcitation(), CLHEP::HepRandomEngine::flat(), g, G4cout, G4endl, CLHEP::detail::n, G4VEmissionProbability::probmax, G4VEmissionProbability::pVerbose, G4VEmissionProbability::theA, and G4VEmissionProbability::theZ.

Referenced by G4EvaporationChannel::EmittedFragment(), G4GEMProbabilityVI::SampleEvaporationFragment(), and G4EvaporationProbability::SampleKineticEnergy().

◆ SetDecayKinematics()

void G4VEmissionProbability::SetDecayKinematics ( G4int  Z,
G4int  A,
G4double  rmass,
G4double  fmass 
)
inlineinherited

◆ SetEvapExcitation()

void G4VEmissionProbability::SetEvapExcitation ( G4double  exc)
inlineinherited

Definition at line 73 of file G4VEmissionProbability.hh.

73{ fExc = exc; };

References G4VEmissionProbability::fExc.

◆ SetEvaporationLevelDensityParameter()

void G4FissionProbability::SetEvaporationLevelDensityParameter ( G4VLevelDensityParameter aLevelDensity)
inline

Definition at line 51 of file G4FissionProbability.hh.

52 {
53 if (ownEvapLDP) delete theEvapLDP;
54 theEvapLDP = aLevelDensity;
55 ownEvapLDP = false;
56 }

References ownEvapLDP, and theEvapLDP.

◆ SetFissionLevelDensityParameter()

void G4FissionProbability::SetFissionLevelDensityParameter ( G4VLevelDensityParameter aLevelDensity)
inline

Definition at line 59 of file G4FissionProbability.hh.

60 {
61 if (ownFissLDP) delete theFissLDP;
62 theFissLDP = aLevelDensity;
63 ownFissLDP = false;
64 }

References ownFissLDP, and theFissLDP.

Referenced by G4INCLXXInterface::G4INCLXXInterface().

Field Documentation

◆ accuracy

G4double G4VEmissionProbability::accuracy
privateinherited

◆ eCoulomb

G4double G4VEmissionProbability::eCoulomb
privateinherited

◆ elimit

G4double G4VEmissionProbability::elimit
privateinherited

◆ emax

G4double G4VEmissionProbability::emax
privateinherited

◆ emin

G4double G4VEmissionProbability::emin
privateinherited

◆ fExc

G4double G4VEmissionProbability::fExc
privateinherited

◆ fExcRes

G4double G4VEmissionProbability::fExcRes
privateinherited

◆ fFD

G4bool G4VEmissionProbability::fFD
privateinherited

◆ fPairCorr

G4PairingCorrection* G4FissionProbability::fPairCorr
private

Definition at line 76 of file G4FissionProbability.hh.

Referenced by EmissionProbability(), and G4FissionProbability().

◆ length

size_t G4VEmissionProbability::length
privateinherited

◆ nbin

size_t G4VEmissionProbability::nbin
privateinherited

◆ OPTxs

G4int G4VEmissionProbability::OPTxs
protectedinherited

◆ ownEvapLDP

bool G4FissionProbability::ownEvapLDP
private

◆ ownFissLDP

bool G4FissionProbability::ownFissLDP
private

◆ pEvapMass

G4double G4VEmissionProbability::pEvapMass
protectedinherited

◆ pG4pow

G4Pow* G4VEmissionProbability::pG4pow
protectedinherited

◆ pMass

G4double G4VEmissionProbability::pMass
protectedinherited

◆ pNuclearLevelData

G4NuclearLevelData* G4VEmissionProbability::pNuclearLevelData
protectedinherited

◆ pProbability

G4double G4VEmissionProbability::pProbability
protectedinherited

◆ pResMass

G4double G4VEmissionProbability::pResMass
protectedinherited

◆ probmax

G4double G4VEmissionProbability::probmax
privateinherited

◆ pVerbose

G4int G4VEmissionProbability::pVerbose
protectedinherited

◆ resA

G4int G4VEmissionProbability::resA
protectedinherited

◆ resZ

G4int G4VEmissionProbability::resZ
protectedinherited

◆ theA

G4int G4VEmissionProbability::theA
protectedinherited

◆ theEvapLDP

G4VLevelDensityParameter* G4FissionProbability::theEvapLDP
private

◆ theFissLDP

G4VLevelDensityParameter* G4FissionProbability::theFissLDP
private

◆ theZ

G4int G4VEmissionProbability::theZ
protectedinherited

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