156 G4double totprob, prob, oldprob = 0.0;
157 size_t maxchannel, i;
159 G4int Amax = theResidualNucleus->GetA_asInt();
163 for(
G4int ia=0; ia<Amax; ++ia) {
166 G4int Z = theResidualNucleus->GetZ_asInt();
167 G4int A = theResidualNucleus->GetA_asInt();
168 G4double Eex = theResidualNucleus->GetExcitationEnergy();
176 G4cout <<
"### G4Evaporation::BreakItUp step " << ia <<
" Z= " << Z
177 <<
" A= " << A <<
" Eex(MeV)= "
178 << theResidualNucleus->GetExcitationEnergy()
179 <<
" aban= " << abun <<
G4endl;
182 if(Eex <= minExcitation && abun > 0.0) {
break; }
185 maxchannel = nChannels;
187 G4cout <<
"### Evaporation loop #" << ia
188 <<
" Fragment: " << theResidualNucleus <<
G4endl;
191 for(i=0; i<nChannels; ++i) {
192 prob = (*theChannels)[i]->GetEmissionProbability(theResidualNucleus);
193 if(fVerbose > 0 && prob > 0.0) {
194 G4cout <<
" Channel# " << i <<
" prob= " << prob <<
G4endl;
197 probabilities[i] = totprob;
200 if(i>=8 && prob > 0.0) {
201 if(prob <= totprob*1.e-8 && oldprob <= totprob*1.e-8) {
211 if(0.0 < totprob && probabilities[0] == totprob) {
215 (*theChannels)[0]->BreakUpChain(theResult, theResidualNucleus);
224 if(!unstableBreakUp->
BreakUpChain(theResult, theResidualNucleus))
226 if(fVerbose > 1) {
G4cout <<
"$$$ Decay exotic fragment" <<
G4endl; }
235 for(i=0; i<maxchannel; ++i) {
if(probabilities[i] >= totprob) {
break; } }
237 if(fVerbose > 1) {
G4cout <<
"Channel # " << i <<
G4endl; }
238 G4Fragment* frag = (*theChannels)[i]->EmittedFragment(theResidualNucleus);
239 if(fVerbose > 1 && frag) {
G4cout <<
" " << *frag <<
G4endl; }
242 if(frag) { theResult->push_back(frag); }
246 theResult->push_back(theResidualNucleus);
virtual G4bool IsApplicable(G4int Z, G4int A, G4double mass) const =0
virtual G4bool BreakUpChain(G4FragmentVector *, G4Fragment *) final
virtual void InitialiseChannels() final
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
G4double GetIsotopeAbundance(G4int Z, G4int N) const