42 : OPTxs(3), pVerbose(1), theZ(Z), theA(
A), elimit(
CLHEP::MeV)
60 if(de > 0.0) { elimit = de; }
61 if(eps > 0.0) { accuracy = eps; }
85 const G4double edeltamin = 0.1*CLHEP::MeV;
86 const G4double edeltamax = 2*CLHEP::MeV;
87 G4double edelta = std::min(std::min(elimit, edeltamax), edeltamin);
88 G4double xbin = (emax - emin)/edelta + 1.0;
93 edelta = (emax - emin)/ibin;
100 G4cout <<
"### G4VEmissionProbability::IntegrateProbability: "
101 <<
"probmax=" << probmax <<
" Emin=" << emin
102 <<
" Emax=" << emax <<
" QB=" << cb <<
" nbin=" << nbin
105 fE1 = fE2 = fP2 = 0.0;
108 for(
G4int i=0; i<nbin; ++i) {
116 G4cout <<
" " << i <<
". E= " << x <<
" prob= " << y
117 <<
" Edel= " << edelta <<
G4endl;
121 }
else if(0.0 == fE1 && 2*y < probmax) {
125 G4double del = (y + problast)*edelta*0.5;
133 0.7*edelta > edeltamin) {
135 }
else if(del < 0.1*
pProbability && 1.5*edelta < edeltamax) {
139 if(fE1 > emin && fE1 < emax) {
140 fE2 = std::max(0.5*(fE1 + emax), emax - edelta);
146 << probmax <<
" emin=" << emin <<
" emax=" << emax
147 <<
" E1=" << fE1 <<
" E2=" << fE2 <<
G4endl;
166 if(fE1 > 0.0 && fP2 > 0.0 && fP2 < 0.5*probmax) {
167 a0 =
G4Log(probmax/fP2)/(fE2 - fE1);
172 a1 = (x > alim) ? 1.0 -
G4Exp(-x) : x*(1.0 - 0.5*x);
180 G4cout <<
"### G4VEmissionProbability::SampleEnergy: "
181 <<
" Emin= " << emin <<
" Emax= " << emax
182 <<
"/n E1=" << fE1 <<
" p1=" << p1
183 <<
" probmax=" << probmax <<
" P2=" << fP2 <<
G4endl;
187 const G4int nmax = 1000;
195 ekin = del*q/p1 + emin;
197 ekin = fE1 -
G4Log(1.0 - (q - p1)*a1/p2)/
a0;
201 gmax = probmax*((x > alim) ?
G4Exp(-x) : 1.0 - x*(1.0 - 0.5*x));
207 <<
". prob= " << g <<
" probmax= " << probmax
208 <<
" Ekin= " << ekin <<
G4endl;
210 if((g > gmax || n > nmax) &&
pVerbose > 1) {
211 G4cout <<
"### G4VEmissionProbability::SampleEnergy for Z= " <<
theZ
212 <<
" A= " <<
theA <<
" Eex(MeV)=" << fExc <<
" p1=" << p1
213 <<
"\n Warning n= " << n
214 <<
" prob/gmax=" << g/gmax
215 <<
" prob=" << g <<
" gmax=" << gmax <<
" probmax=" << probmax
216 <<
"\n Ekin= " << ekin <<
" Emin= " << emin
217 <<
" Emax= " << emax <<
G4endl;
219 }
while(gmax*rndm->
flat() > g && n < nmax);
220 G4double enew = FindRecoilExcitation(ekin);
222 G4cout <<
"### SampleEnergy: Efinal= "
223 << enew <<
" E=" << ekin <<
" Eexc=" << fExcRes <<
G4endl;
240 G4cout <<
"### FindRecoilExcitation for resZ= "
242 <<
" evaporated Z= " <<
theZ <<
" A= " <<
theA
243 <<
" Ekin= " << e <<
" Eexc= " << fExcRes <<
G4endl;
249 return std::max(0.5*(m02 + m12 - m22)/
pMass - mass, 0.0);
251 if(!fFD) {
return e; }
255 if(
nullptr == lManager) {
return e; }
258 if(fExcRes > lManager->MaxLevelEnergy() +
pTolerance) {
return e; }
269 return std::max(0.5*(m02 + m12 - mr2)/
pMass - mass, 0.0);
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double G4Log(G4double x)
G4GLOB_DLL std::ostream G4cout
G4bool GetDiscreteExcitationFlag() const
G4int GetDeexModelType() const
G4double GetMinExcitation() const
G4double NearestLevelEnergy(const G4double energy, const std::size_t index=0) const
G4DeexPrecoParameters * GetParameters()
const G4LevelManager * GetLevelManager(G4int Z, G4int A)
static G4NuclearLevelData * GetInstance()
static G4double GetNuclearMass(const G4double A, const G4double Z)
static G4Pow * GetInstance()
G4VEmissionProbability(G4int Z, G4int A)
void ResetIntegrator(size_t nbin, G4double de, G4double eps)
G4double IntegrateProbability(G4double elow, G4double ehigh, G4double CB)
virtual G4double ComputeProbability(G4double anEnergy, G4double CB)
virtual G4double EmissionProbability(const G4Fragment &fragment, G4double anEnergy)
G4NuclearLevelData * pNuclearLevelData