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;
195 for(
G4int ia=0; ia<Amax; ++ia) {
200 if(
A <= 1) {
break; }
209 if(Eex <= minExcitation &&
210 (abun > 0.0 || (
A == 3 && (
Z == 1 ||
Z == 2)))) {
break; }
213 maxchannel = nChannels;
215 G4cout <<
"Evaporation# " << ia <<
" Z= " <<
Z <<
" A= " <<
A
217 <<
" aban= " << abun <<
G4endl;
220 for(i=0; i<nChannels; ++i) {
221 prob = (*theChannels)[i]->GetEmissionProbability(theResidualNucleus);
222 if(fVerbose > 1 && prob > 0.0) {
223 G4cout <<
" Channel# " << i <<
" prob= " << prob <<
G4endl;
226 probabilities[i] = totprob;
229 if(i>=8 && prob > 0.0) {
230 if(prob <= totprob*1.e-8 && oldprob <= totprob*1.e-8) {
240 if(0.0 < totprob && probabilities[0] == totprob) {
242 G4cout <<
"$$$ Start chain of gamma evaporation" <<
G4endl;
244 (*theChannels)[0]->BreakUpChain(theResult, theResidualNucleus);
260 if(0.0 == totprob &&
A < 30) {
266 if(unstableBreakUp->
BreakUpChain(theResult, theResidualNucleus)) {
274 totprob *= rndm->
flat();
277 for(i=0; i<maxchannel; ++i) {
if(probabilities[i] >= totprob) {
break; } }
279 if(fVerbose > 1) {
G4cout <<
"$$$ Channel # " << i <<
G4endl; }
280 G4Fragment* frag = (*theChannels)[i]->EmittedFragment(theResidualNucleus);
281 if(fVerbose > 2 && frag) {
G4cout <<
" " << *frag <<
G4endl; }
284 if(
nullptr != frag) { theResult->push_back(frag); }
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
G4bool IsLongLived() const
void SetLongLived(G4bool value)
static G4NistManager * Instance()
G4double GetIsotopeAbundance(G4int Z, G4int N) const
G4DeexPrecoParameters * GetParameters()
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