Geant4-11
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes
G4GEMProbabilityVI Class Referencefinal

#include <G4GEMProbabilityVI.hh>

Inheritance diagram for G4GEMProbabilityVI:
G4VEmissionProbability

Public Member Functions

G4double ComputeProbability (G4double ekin, G4double CB) override
 
G4double ComputeTotalProbability (const G4Fragment &, G4double CB)
 
virtual G4double EmissionProbability (const G4Fragment &fragment, G4double anEnergy)
 
 G4GEMProbabilityVI (G4int anA, G4int aZ, const G4LevelManager *)
 
G4int GetA (void) const
 
G4double GetProbability () const
 
G4double GetRecoilExcitation () const
 
G4int GetZ (void) const
 
void Initialise ()
 
void ResetProbability ()
 
G4double SampleEnergy ()
 
G4FragmentSampleEvaporationFragment ()
 
void SetDecayKinematics (G4int Z, G4int A, G4double rmass, G4double fmass)
 
void SetEvapExcitation (G4double exc)
 
 ~G4GEMProbabilityVI () final
 

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)
 
 G4GEMProbabilityVI (const G4GEMProbabilityVI &right)
 
G4double I0 (G4double t)
 
G4double I1 (G4double t, G4double tx)
 
G4double I2 (G4double s0, G4double sx)
 
G4double I3 (G4double s0, G4double sx)
 
G4double Integrated2DProbability ()
 
G4bool operator!= (const G4GEMProbabilityVI &right) const
 
const G4GEMProbabilityVIoperator= (const G4GEMProbabilityVI &right)
 
G4bool operator== (const G4GEMProbabilityVI &right) const
 
G4double ProbabilityDistributionFunction (G4double exc, G4double resExc)
 
G4FragmentSample2DDistribution ()
 

Private Attributes

G4double a0
 
G4double a1
 
G4double A13
 
G4double accuracy
 
G4double alphaP
 
G4double bCoulomb
 
G4double betaP
 
G4double coeff
 
G4double delta0
 
G4double delta1
 
G4double eCoulomb
 
G4double elimit
 
G4double emax
 
G4double emin
 
G4double fExc
 
G4double fExcRes
 
G4bool fFD
 
G4int fragA
 
G4int fragZ
 
G4double Gamma
 
G4bool isExcited
 
size_t length
 
const G4LevelManagerlManager
 
size_t nbin
 
G4double pcoeff
 
G4double probmax
 
G4double resA13
 
G4double U
 
G4double Umax
 

Detailed Description

Definition at line 38 of file G4GEMProbabilityVI.hh.

Constructor & Destructor Documentation

◆ G4GEMProbabilityVI() [1/2]

G4GEMProbabilityVI::G4GEMProbabilityVI ( G4int  anA,
G4int  aZ,
const G4LevelManager p 
)
explicit

Definition at line 69 of file G4GEMProbabilityVI.cc.

70 : G4VEmissionProbability(aZ, anA), lManager(p)
71{
72 fragA = fragZ = 0;
73 resA13 = U = delta0 = delta1 = a0 = a1 = probmax = alphaP = betaP = 0.0;
74 Umax = bCoulomb = 0.0;
75 Gamma = 1.0;
79
80 isExcited = (!lManager || 0.0 == lManager->MaxLevelEnergy()) ? false : true;
81 A13 = pG4pow->Z13(theA);
82
83 if(0 == aZ) {
84 ResetIntegrator(30, 0.25*CLHEP::MeV, 0.02);
85 } else {
86 ResetIntegrator(30, 0.5*CLHEP::MeV, 0.03);
87 }
88}
const G4LevelManager * lManager
G4double MaxLevelEnergy() const
G4double Z13(G4int Z) const
Definition: G4Pow.hh:123
G4VEmissionProbability(G4int Z, G4int A)
void ResetIntegrator(size_t nbin, G4double de, G4double eps)
static constexpr double millibarn
Definition: SystemOfUnits.h:87
static constexpr double MeV
static constexpr double hbarc
static constexpr double pi
Definition: SystemOfUnits.h:55
static constexpr double fermi
Definition: SystemOfUnits.h:84

References a0, a1, A13, alphaP, bCoulomb, betaP, coeff, delta0, delta1, CLHEP::fermi, fragA, fragZ, Gamma, CLHEP::hbarc, isExcited, lManager, G4LevelManager::MaxLevelEnergy(), CLHEP::MeV, CLHEP::millibarn, pcoeff, G4VEmissionProbability::pEvapMass, G4VEmissionProbability::pG4pow, CLHEP::pi, probmax, resA13, G4VEmissionProbability::ResetIntegrator(), G4VEmissionProbability::theA, U, Umax, and G4Pow::Z13().

◆ ~G4GEMProbabilityVI()

G4GEMProbabilityVI::~G4GEMProbabilityVI ( )
final

Definition at line 90 of file G4GEMProbabilityVI.cc.

91{}

◆ G4GEMProbabilityVI() [2/2]

G4GEMProbabilityVI::G4GEMProbabilityVI ( const G4GEMProbabilityVI right)
private

Member Function Documentation

◆ ComputeProbability()

G4double G4GEMProbabilityVI::ComputeProbability ( G4double  ekin,
G4double  CB 
)
overridevirtual

Reimplemented from G4VEmissionProbability.

Definition at line 151 of file G4GEMProbabilityVI.cc.

152{
153 // abnormal case - should never happens
154 if(pMass < pEvapMass + pResMass) { return 0.0; }
155
156 const G4double m02 = pMass*pMass;
157 const G4double m12 = pEvapMass*pEvapMass;
158 const G4double mres = std::sqrt(m02 + m12 - 2.*pMass*(pEvapMass + ekin));
159
160 G4double excRes = std::max(mres - pResMass, 0.0);
162 G4double prob = ProbabilityDistributionFunction(0.0, excRes);
163
164 //G4cout<<"### G4GEMProbabilityVI::ComputeProbability: Ekin(MeV)= "<<ekin
165 //<< " excRes(MeV)= " << excRes << " prob= " << prob << << G4endl;
166 return prob;
167}
double G4double
Definition: G4Types.hh:83
G4double ProbabilityDistributionFunction(G4double exc, G4double resExc)
G4double GetLevelDensity(G4int Z, G4int A, G4double U)
G4NuclearLevelData * pNuclearLevelData
T max(const T t1, const T t2)
brief Return the largest of the two arguments

References a1, G4NuclearLevelData::GetLevelDensity(), G4INCL::Math::max(), G4VEmissionProbability::pEvapMass, G4VEmissionProbability::pMass, G4VEmissionProbability::pNuclearLevelData, G4VEmissionProbability::pResMass, ProbabilityDistributionFunction(), G4VEmissionProbability::resA, and G4VEmissionProbability::resZ.

◆ ComputeTotalProbability()

G4double G4GEMProbabilityVI::ComputeTotalProbability ( const G4Fragment fragment,
G4double  CB 
)

Definition at line 93 of file G4GEMProbabilityVI.cc.

95{
96 fragA = fragment.GetA_asInt();
97 fragZ = fragment.GetZ_asInt();
98
99 bCoulomb = CB;
100 U = fragment.GetExcitationEnergy();
103 Umax = pMass - pEvapMass - pResMass - CB;
104 if(0.0 >= Umax) { return 0.0; }
105
106 resA13 = pG4pow->Z13(resA);
108
109 G4double C = 0.0;
110 G4int Z2 = theZ*theZ;
111 G4int Z3 = Z2*theZ;
112 G4int Z4 = Z2*Z2;
113
114 if(resA >= 50) {
115 C = -0.10/(G4double)theA;
116 } else if(resZ > 20) {
117 C = (0.123482-0.00534691*theZ-0.0000610624*Z2+5.93719*1e-7*Z3+
118 1.95687*1e-8*Z4)/(G4double)theA;
119 }
120 if(0 == theZ) {
121 alphaP = 0.76+1.93/resA13;
122 betaP = (1.66/(resA13*resA13)-0.05)*CLHEP::MeV/alphaP;
123 } else {
124 alphaP = 1.0 + C;
125 betaP = - bCoulomb;
126 }
127 if(isExcited) {
129
130 } else {
131 const G4double twoMass = pMass + pMass;
132 const G4double evapMass2 = pEvapMass*pEvapMass;
133 G4double ekinmax =
134 ((pMass-pResMass)*(pMass+pResMass) + evapMass2)/twoMass - pEvapMass;
136 std::max((CB*(twoMass - CB) + evapMass2)/twoMass - pEvapMass,0.0);
137 if(ekinmax <= ekinmin) { return 0.0; }
139 }
140 /*
141 G4cout << "G4GEMProbabilityVI: Z= " << theZ << " A= " << theA
142 << " resZ= " << resZ << " resA= " << resA
143 << " fragZ= " << fragZ << " fragA= " << fragA
144 << " prob= " << pProbability
145 << "\n U= " << U << " Umax= " << Umax << " d0= " << delta0
146 << " a0= " << a0 << G4endl;
147 */
148 return pProbability;
149}
G4double C(G4double temp)
static const G4double ekinmin
int G4int
Definition: G4Types.hh:85
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:299
G4int GetZ_asInt() const
Definition: G4Fragment.hh:276
G4int GetA_asInt() const
Definition: G4Fragment.hh:271
G4double Integrated2DProbability()
G4PairingCorrection * GetPairingCorrection()
G4double IntegrateProbability(G4double elow, G4double ehigh, G4double CB)

References a0, alphaP, bCoulomb, betaP, C(), delta0, delta1, ekinmin, fragA, fragZ, G4Fragment::GetA_asInt(), G4Fragment::GetExcitationEnergy(), G4NuclearLevelData::GetLevelDensity(), G4NuclearLevelData::GetPairingCorrection(), G4Fragment::GetZ_asInt(), Integrated2DProbability(), G4VEmissionProbability::IntegrateProbability(), isExcited, G4INCL::Math::max(), CLHEP::MeV, G4VEmissionProbability::pEvapMass, G4VEmissionProbability::pG4pow, G4VEmissionProbability::pMass, G4VEmissionProbability::pNuclearLevelData, G4VEmissionProbability::pProbability, G4VEmissionProbability::pResMass, G4VEmissionProbability::resA, resA13, G4VEmissionProbability::resZ, G4VEmissionProbability::theA, G4VEmissionProbability::theZ, U, Umax, and G4Pow::Z13().

Referenced by G4GEMChannelVI::GetEmissionProbability().

◆ EmissionProbability()

G4double G4VEmissionProbability::EmissionProbability ( const G4Fragment fragment,
G4double  anEnergy 
)
virtualinherited

Reimplemented in G4FissionProbability, and G4GEMProbability.

Definition at line 71 of file G4VEmissionProbability.cc.

72{
73 return 0.0;
74}

Referenced by G4CompetitiveFission::GetEmissionProbability().

◆ 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)
static constexpr double keV

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

◆ I0()

G4double G4GEMProbabilityVI::I0 ( G4double  t)
private

Definition at line 262 of file G4GEMProbabilityVI.cc.

263{
264 return G4Exp(t) - 1.0;
265}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179

References G4Exp().

Referenced by ProbabilityDistributionFunction().

◆ I1()

G4double G4GEMProbabilityVI::I1 ( G4double  t,
G4double  tx 
)
private

Definition at line 267 of file G4GEMProbabilityVI.cc.

268{
269 return (t - tx + 1.0)*G4Exp(tx) - t - 1.0;
270}

References G4Exp().

Referenced by ProbabilityDistributionFunction().

◆ I2()

G4double G4GEMProbabilityVI::I2 ( G4double  s0,
G4double  sx 
)
private

Definition at line 272 of file G4GEMProbabilityVI.cc.

273{
274 G4double S = 1.0/std::sqrt(s0);
275 G4double Sx = 1.0/std::sqrt(sx);
276
277 G4double p1 = S*S*S*( 1.0 + S*S*( 1.5 + 3.75*S*S) );
278 G4double p2 = Sx*Sx*Sx*( 1.0 + Sx*Sx*( 1.5 + 3.75*Sx*Sx) )*G4Exp(sx-s0);
279
280 return p1-p2;
281}
G4double S(G4double temp)

References G4Exp(), S(), and G4InuclParticleNames::s0.

Referenced by ProbabilityDistributionFunction().

◆ I3()

G4double G4GEMProbabilityVI::I3 ( G4double  s0,
G4double  sx 
)
private

Definition at line 283 of file G4GEMProbabilityVI.cc.

284{
285 G4double s2 = s0*s0;
286 G4double sx2 = sx*sx;
287 G4double S = 1.0/std::sqrt(s0);
288 G4double S2 = S*S;
289 G4double Sx = 1.0/std::sqrt(sx);
290 G4double Sx2 = Sx*Sx;
291
292 G4double p1 = S *(2.0 + S2 *( 4.0 + S2 *( 13.5 + S2 *( 60.0 + S2 * 325.125 ))));
293 G4double p2 = Sx*Sx2 *((s2-sx2) + Sx2 *((1.5*s2+0.5*sx2)
294 + Sx2 *((3.75*s2+0.25*sx2) + Sx2 *((12.875*s2+0.625*sx2)
295 + Sx2 *((59.0625*s2+0.9375*sx2) + Sx2 *(324.8*s2+3.28*sx2))))));
296 p2 *= G4Exp(sx-s0);
297 return p1-p2;
298}

References G4Exp(), S(), and G4InuclParticleNames::s0.

Referenced by ProbabilityDistributionFunction().

◆ Initialise()

void G4VEmissionProbability::Initialise ( )
inherited

◆ Integrated2DProbability()

G4double G4GEMProbabilityVI::Integrated2DProbability ( )
private

Definition at line 179 of file G4GEMProbabilityVI.cc.

180{
181 return 0.0;
182}

Referenced by ComputeTotalProbability().

◆ 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)

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 ComputeTotalProbability(), and G4EvaporationProbability::TotalProbability().

◆ operator!=()

G4bool G4GEMProbabilityVI::operator!= ( const G4GEMProbabilityVI right) const
private

◆ operator=()

const G4GEMProbabilityVI & G4GEMProbabilityVI::operator= ( const G4GEMProbabilityVI right)
private

◆ operator==()

G4bool G4GEMProbabilityVI::operator== ( const G4GEMProbabilityVI right) const
private

◆ ProbabilityDistributionFunction()

G4double G4GEMProbabilityVI::ProbabilityDistributionFunction ( G4double  exc,
G4double  resExc 
)
private

Definition at line 184 of file G4GEMProbabilityVI.cc.

186{
187 G4double Ux = (2.5 + 150.0/G4double(resA))*CLHEP::MeV;
188 G4double Ex = Ux + delta1;
189 G4double T = 1.0/(std::sqrt(a0/Ux) - 1.5/Ux);
190 G4double E0 = Ex - T*(G4Log(T) - G4Log(a0)*0.25
191 - 1.25*G4Log(Ux) + 2.0*std::sqrt(a0*Ux));
192
193 G4double UxCN = (2.5 + 150.0/(G4double)theA)*CLHEP::MeV;
194 G4double ExCN = UxCN + delta0;
195 G4double TCN = 1.0/(std::sqrt(a0/UxCN) - 1.5/UxCN);
196
197 G4double mass1 = pEvapMass + exc;
198 G4double mass2 = pResMass + resExc;
199
200 G4double maxKinEnergy = std::max(0.5*((pMass - mass2)*(pMass + mass2)
201 + mass1*mass1)/pMass - mass1, 0.0);
202
203 G4double Width = 0.0;
204 G4double t = maxKinEnergy/T;
205 if ( maxKinEnergy < Ex ) {
206 Width = (I1(t,t)*T + (betaP+bCoulomb)*I0(t))/G4Exp(E0/T);
207
208 } else {
209
210 G4double tx = Ex/T;
211 G4double s0 = 2.0*std::sqrt(a0*(maxKinEnergy-delta0));
212 G4double sx = 2.0*std::sqrt(a0*(Ex-delta0));
213
214 // VI: protection against FPE exception
215 s0 = std::min(s0, 350.);
216
217 G4double expE0T = G4Exp(E0/T);
218 G4double exps0 = G4Exp(s0);
219 const G4double sqrt2 = std::sqrt(2.0);
220
221 Width = I1(t,tx)*T/expE0T + I3(s0,sx)*exps0/(sqrt2*a0);
222
223 if (0 == theZ) {
224 Width += (betaP+bCoulomb)*(I0(tx)/expE0T + 2.0*sqrt2*I2(s0,sx)*exps0);
225 }
226 }
227 Width *= alphaP*pMass;
228
229 //JMQ 190709 fix on Rb and geometrical cross sections according to
230 // Furihata's paper (JAERI-Data/Code 2001-105, p6)
231 G4double Rb = 0.0;
232 if (theA > 4) {
233 Rb = 1.12*(resA13 + A13) - 0.86*((resA13 + A13)/(resA13*A13))+2.85;
234 } else if (theA > 1) {
235 Rb=1.5*(resA13 + A13);
236 } else {
237 Rb = 1.5*resA13;
238 }
239
240 G4double ild;
241 if (exc < ExCN ) {
242 G4double E0CN = ExCN - TCN*(G4Log(TCN) - 0.25*G4Log(a0)
243 - 1.25*G4Log(UxCN)
244 + 2.0*std::sqrt(a0*UxCN));
245 ild = G4Exp((exc-E0CN)/TCN)/TCN;
246 } else {
247 G4double x = exc - delta0;
248 G4double x1 = std::sqrt(a0*x);
249 ild = G4Exp(2*x1)/(x*std::sqrt(x1));
250 }
251
252 Width *= (Rb*Rb/ild);
253 return Width;
254}
G4double G4Log(G4double x)
Definition: G4Log.hh:226
G4double I0(G4double t)
G4double I2(G4double s0, G4double sx)
G4double I1(G4double t, G4double tx)
G4double I3(G4double s0, G4double sx)
T min(const T t1, const T t2)
brief Return the smallest of the two arguments

References a0, A13, alphaP, bCoulomb, betaP, delta0, delta1, G4Exp(), G4Log(), I0(), I1(), I2(), I3(), G4INCL::Math::max(), CLHEP::MeV, G4INCL::Math::min(), G4VEmissionProbability::pEvapMass, G4VEmissionProbability::pMass, G4VEmissionProbability::pResMass, G4VEmissionProbability::resA, resA13, G4InuclParticleNames::s0, G4VEmissionProbability::theA, and G4VEmissionProbability::theZ.

Referenced by ComputeProbability().

◆ 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().

◆ ResetProbability()

void G4VEmissionProbability::ResetProbability ( )
inlineinherited

◆ Sample2DDistribution()

G4Fragment * G4GEMProbabilityVI::Sample2DDistribution ( )
private

Definition at line 256 of file G4GEMProbabilityVI.cc.

257{
258 G4Fragment* aFragment = nullptr;
259 return aFragment;
260}

Referenced by SampleEvaporationFragment().

◆ 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(), SampleEvaporationFragment(), and G4EvaporationProbability::SampleKineticEnergy().

◆ SampleEvaporationFragment()

G4Fragment * G4GEMProbabilityVI::SampleEvaporationFragment ( )

Definition at line 169 of file G4GEMProbabilityVI.cc.

170{
171 if(isExcited) { return Sample2DDistribution(); }
172 G4double ekin = SampleEnergy();
173 G4LorentzVector lv(std::sqrt(ekin*(ekin + 2.0*pEvapMass))
174 *G4RandomDirection(), ekin + pEvapMass);
175 G4Fragment* evFragment = new G4Fragment(theA, theZ, lv);
176 return evFragment;
177}
G4ThreeVector G4RandomDirection()
G4Fragment * Sample2DDistribution()

References G4RandomDirection(), isExcited, G4VEmissionProbability::pEvapMass, Sample2DDistribution(), G4VEmissionProbability::SampleEnergy(), G4VEmissionProbability::theA, and G4VEmissionProbability::theZ.

Referenced by G4GEMChannelVI::EmittedFragment().

◆ 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.

Field Documentation

◆ a0

G4double G4GEMProbabilityVI::a0
private

◆ a1

G4double G4GEMProbabilityVI::a1
private

Definition at line 81 of file G4GEMProbabilityVI.hh.

Referenced by ComputeProbability(), and G4GEMProbabilityVI().

◆ A13

G4double G4GEMProbabilityVI::A13
private

Definition at line 83 of file G4GEMProbabilityVI.hh.

Referenced by G4GEMProbabilityVI(), and ProbabilityDistributionFunction().

◆ accuracy

G4double G4VEmissionProbability::accuracy
privateinherited

◆ alphaP

G4double G4GEMProbabilityVI::alphaP
private

◆ bCoulomb

G4double G4GEMProbabilityVI::bCoulomb
private

◆ betaP

G4double G4GEMProbabilityVI::betaP
private

◆ coeff

G4double G4GEMProbabilityVI::coeff
private

Definition at line 89 of file G4GEMProbabilityVI.hh.

Referenced by G4GEMProbabilityVI().

◆ delta0

G4double G4GEMProbabilityVI::delta0
private

◆ delta1

G4double G4GEMProbabilityVI::delta1
private

◆ 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

◆ fragA

G4int G4GEMProbabilityVI::fragA
private

Definition at line 76 of file G4GEMProbabilityVI.hh.

Referenced by ComputeTotalProbability(), and G4GEMProbabilityVI().

◆ fragZ

G4int G4GEMProbabilityVI::fragZ
private

Definition at line 77 of file G4GEMProbabilityVI.hh.

Referenced by ComputeTotalProbability(), and G4GEMProbabilityVI().

◆ Gamma

G4double G4GEMProbabilityVI::Gamma
private

Definition at line 88 of file G4GEMProbabilityVI.hh.

Referenced by G4GEMProbabilityVI().

◆ isExcited

G4bool G4GEMProbabilityVI::isExcited
private

◆ length

size_t G4VEmissionProbability::length
privateinherited

◆ lManager

const G4LevelManager* G4GEMProbabilityVI::lManager
private

Definition at line 74 of file G4GEMProbabilityVI.hh.

Referenced by G4GEMProbabilityVI().

◆ nbin

size_t G4VEmissionProbability::nbin
privateinherited

◆ OPTxs

G4int G4VEmissionProbability::OPTxs
protectedinherited

◆ pcoeff

G4double G4GEMProbabilityVI::pcoeff
private

Definition at line 90 of file G4GEMProbabilityVI.hh.

Referenced by G4GEMProbabilityVI().

◆ 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 G4GEMProbabilityVI::probmax
private

Definition at line 92 of file G4GEMProbabilityVI.hh.

Referenced by G4GEMProbabilityVI().

◆ pVerbose

G4int G4VEmissionProbability::pVerbose
protectedinherited

◆ resA

G4int G4VEmissionProbability::resA
protectedinherited

◆ resA13

G4double G4GEMProbabilityVI::resA13
private

◆ resZ

G4int G4VEmissionProbability::resZ
protectedinherited

◆ theA

G4int G4VEmissionProbability::theA
protectedinherited

◆ theZ

G4int G4VEmissionProbability::theZ
protectedinherited

◆ U

G4double G4GEMProbabilityVI::U
private

Definition at line 81 of file G4GEMProbabilityVI.hh.

Referenced by ComputeTotalProbability(), and G4GEMProbabilityVI().

◆ Umax

G4double G4GEMProbabilityVI::Umax
private

Definition at line 83 of file G4GEMProbabilityVI.hh.

Referenced by ComputeTotalProbability(), and G4GEMProbabilityVI().


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