75 InitialiseChannelFactory();
84 delete unstableBreakUp;
89 if(isInitialised) {
return; }
102 void G4Evaporation::InitialiseChannelFactory()
106 probabilities.resize(nChannels, 0.0);
109 G4cout <<
"### G4Evaporation::InitialiseChannelFactory for "
110 << nChannels <<
" channels " <<
this <<
G4endl;
112 for(
size_t i=0; i<nChannels; ++i) {
113 (*theChannels)[i]->SetOPTxs(
OPTxs);
114 (*theChannels)[i]->Initialise();
125 InitialiseChannelFactory();
136 InitialiseChannelFactory();
147 InitialiseChannelFactory();
156 G4double totprob, prob, oldprob = 0.0;
157 size_t maxchannel, i;
163 for(
G4int ia=0; ia<Amax; ++ia) {
176 G4cout <<
"### G4Evaporation::BreakItUp step " << ia <<
" Z= " << Z
177 <<
" A= " << A <<
" Eex(MeV)= "
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 std::vector< G4VEvaporationChannel * > * GetChannel()=0
G4DeexChannelType GetDeexChannelsType() const
virtual G4bool IsApplicable(G4int Z, G4int A, G4double mass) const =0
virtual G4bool BreakUpChain(G4FragmentVector *, G4Fragment *) final
G4VEvaporationChannel * thePhotonEvaporation
static G4NistManager * Instance()
G4Evaporation(G4VEvaporationChannel *photoEvaporation=nullptr)
std::vector< G4VEvaporationChannel * > * theChannels
G4IonTable * GetIonTable() const
virtual void InitialiseChannels() final
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
std::vector< G4Fragment * > G4FragmentVector
G4DeexPrecoParameters * GetParameters()
G4double GetIsotopeAbundance(G4int Z, G4int N) const
virtual void BreakFragment(G4FragmentVector *, G4Fragment *theNucleus) final
void SetCombinedChannel()
static G4ParticleTable * GetParticleTable()
virtual void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
G4VEvaporationFactory * theChannelFactory
static constexpr double keV
static G4NuclearLevelData * GetInstance()
G4double GetMinExcitation() const
G4double GetExcitationEnergy() const