67 :
G4VEvaporation(),fVerbose(0),nChannels(0),minExcitation(0.1*keV),
89 delete unstableBreakUp;
94 if(isInitialised) {
return; }
107 isInitialised =
true;
110void G4Evaporation::InitialiseChannelFactory()
114 probabilities.resize(nChannels, 0.0);
117 G4cout <<
"### G4Evaporation::InitialiseChannelFactory for "
118 << nChannels <<
" channels " <<
this <<
G4endl;
120 for(
size_t i=0; i<nChannels; ++i) {
121 (*theChannels)[i]->SetOPTxs(
OPTxs);
122 (*theChannels)[i]->Initialise();
135 InitialiseChannelFactory();
148 InitialiseChannelFactory();
161 InitialiseChannelFactory();
175 InitialiseChannelFactory();
184 G4double totprob, prob, oldprob = 0.0;
185 size_t maxchannel, i;
189 G4cout <<
"### G4Evaporation::BreakItUp loop" <<
G4endl;
194 for(
G4int ia=0; ia<Amax; ++ia) {
199 if(
A <= 1) {
break; }
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 > 2 && prob > 0.0) {
222 G4cout <<
" Channel# " << i <<
" prob= " << prob <<
G4endl;
225 probabilities[i] = totprob;
228 if(i>=8 && prob > 0.0) {
229 if(prob <= totprob*1.e-8 && oldprob <= totprob*1.e-8) {
239 if(0.0 < totprob && probabilities[0] == totprob) {
241 G4cout <<
"$$$ Start chain of gamma evaporation" <<
G4endl;
243 (*theChannels)[0]->BreakUpChain(theResult, theResidualNucleus);
258 if(unstableBreakUp->
BreakUpChain(theResult, theResidualNucleus)) {
268 for(i=0; i<maxchannel; ++i) {
if(probabilities[i] >= totprob) {
break; } }
270 if(fVerbose > 1) {
G4cout <<
"$$$ Channel # " << i <<
G4endl; }
271 G4Fragment* frag = (*theChannels)[i]->EmittedFragment(theResidualNucleus);
272 if(fVerbose > 2 && frag) {
G4cout <<
" " << *frag <<
G4endl; }
275 if(frag) { theResult->push_back(frag); }
double A(double temperature)
std::vector< G4Fragment * > G4FragmentVector
G4GLOB_DLL std::ostream G4cout
G4DeexChannelType GetDeexChannelsType() const
G4double GetMinExcitation() const
G4Evaporation(G4VEvaporationChannel *photoEvaporation=nullptr)
virtual void InitialiseChannels() final
void SetCombinedChannel()
virtual void BreakFragment(G4FragmentVector *, G4Fragment *theNucleus) final
G4double GetExcitationEnergy() const
static G4NistManager * Instance()
G4double GetIsotopeAbundance(G4int Z, G4int N) const
G4DeexPrecoParameters * GetParameters()
const G4LevelManager * GetLevelManager(G4int Z, G4int A)
static G4NuclearLevelData * GetInstance()
G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()
virtual G4bool BreakUpChain(G4FragmentVector *, G4Fragment *) final
void SetVerbose(G4int val)
virtual std::vector< G4VEvaporationChannel * > * GetChannel()=0
G4VEvaporationChannel * thePhotonEvaporation
virtual void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
G4VEvaporationFactory * theChannelFactory
std::vector< G4VEvaporationChannel * > * theChannels
virtual G4bool IsApplicable(G4int Z, G4int A, G4double mass) const =0