182 G4double totprob, prob, oldprob = 0.0;
184 std::size_t maxchannel, i;
188 G4cout <<
"### G4Evaporation::BreakItUp loop" <<
G4endl;
194 for(
G4int ia=0; ia<Amax; ++ia) {
199 if(
A <= 1) {
break; }
203 if(
theFBU->IsApplicable(Z,
A, Eex)) {
break; }
206 G4double abun = nist->GetIsotopeAbundance(Z,
A);
208 if(Eex <= minExcitation &&
209 (abun > 0.0 || (
A == 3 && (Z == 1 || Z == 2)))) {
break; }
212 maxchannel = nChannels;
214 G4cout <<
"Evaporation# " << ia <<
" Z= " << Z <<
" A= " <<
A
216 <<
" aban= " << abun <<
G4endl;
219 for(i=0; i<nChannels; ++i) {
220 prob = (*theChannels)[i]->GetEmissionProbability(theResidualNucleus);
221 if (fVerbose > 1 && prob > 0.0) {
222 G4cout <<
" Channel# " << i <<
" prob= " << prob <<
G4endl;
225 probabilities[i] = totprob;
229 if (prob <= totprob*limFact && oldprob <= totprob*limFact) {
239 if(0.0 < totprob && probabilities[0] == totprob) {
241 G4cout <<
"$$$ Start chain of gamma evaporation" <<
G4endl;
243 (*theChannels)[0]->BreakUpChain(theResult, theResidualNucleus);
252 if(
theFBU->IsApplicable(Z,
A, Eex)) {
break; }
259 if(0.0 == totprob &&
A < 30) {
265 if(unstableBreakUp->BreakUpChain(theResult, theResidualNucleus)) {
273 totprob *= rndm->
flat();
276 for (i=0; i<maxchannel; ++i) {
277 if (probabilities[i] >= totprob) {
break; }
281 G4cout <<
"$$$ Selected Channel# " << i <<
" MaxChannel="
284 G4Fragment* frag = (*theChannels)[i]->EmittedFragment(theResidualNucleus);
285 if(fVerbose > 2 && frag) {
G4cout <<
" " << *frag <<
G4endl; }
288 if(
nullptr != frag) { theResult->push_back(frag); }
G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()