68 : fVerbose(0), minExcitation(0.1*
CLHEP::keV)
70 if (
nullptr != photoEvaporation) {
86 delete unstableBreakUp;
91 if (isInitialised) {
return; }
105 isInitialised =
true;
108void G4Evaporation::InitialiseChannelFactory()
116 probabilities.resize(nChannels, 0.0);
119 G4cout <<
"### G4Evaporation::InitialiseChannelFactory for "
120 << nChannels <<
" channels " <<
this <<
G4endl;
122 for (std::size_t i=0; i<nChannels; ++i) {
123 (*theChannels)[i]->SetOPTxs(
OPTxs);
124 (*theChannels)[i]->Initialise();
135 InitialiseChannelFactory();
146 InitialiseChannelFactory();
157 InitialiseChannelFactory();
169 InitialiseChannelFactory();
178 G4double totprob, prob, oldprob = 0.0;
179 size_t maxchannel, i;
183 G4cout <<
"### G4Evaporation::BreakItUp loop" <<
G4endl;
189 for(
G4int ia=0; ia<Amax; ++ia) {
194 if(
A <= 1) {
break; }
203 if(Eex <= minExcitation &&
204 (abun > 0.0 || (
A == 3 && (Z == 1 || Z == 2)))) {
break; }
207 maxchannel = nChannels;
209 G4cout <<
"Evaporation# " << ia <<
" Z= " << Z <<
" A= " <<
A
211 <<
" aban= " << abun <<
G4endl;
214 for(i=0; i<nChannels; ++i) {
215 prob = (*theChannels)[i]->GetEmissionProbability(theResidualNucleus);
216 if(fVerbose > 1 && prob > 0.0) {
217 G4cout <<
" Channel# " << i <<
" prob= " << prob <<
G4endl;
220 probabilities[i] = totprob;
223 if(i>=8 && prob > 0.0) {
224 if(prob <= totprob*1.e-8 && oldprob <= totprob*1.e-8) {
234 if(0.0 < totprob && probabilities[0] == totprob) {
236 G4cout <<
"$$$ Start chain of gamma evaporation" <<
G4endl;
238 (*theChannels)[0]->BreakUpChain(theResult, theResidualNucleus);
254 if(0.0 == totprob &&
A < 30) {
260 if(unstableBreakUp->
BreakUpChain(theResult, theResidualNucleus)) {
268 totprob *= rndm->
flat();
271 for (i=0; i<maxchannel; ++i) {
272 if (probabilities[i] >= totprob) {
break; }
275 if(fVerbose > 1) {
G4cout <<
"$$$ Channel # " << i <<
G4endl; }
276 G4Fragment* frag = (*theChannels)[i]->EmittedFragment(theResidualNucleus);
277 if(fVerbose > 2 && frag) {
G4cout <<
" " << *frag <<
G4endl; }
280 if(
nullptr != frag) { theResult->push_back(frag); }
std::vector< G4Fragment * > G4FragmentVector
G4GLOB_DLL std::ostream G4cout
G4DeexChannelType GetDeexChannelsType() const
G4double GetMinExcitation() const
~G4Evaporation() override
G4Evaporation(G4VEvaporationChannel *photoEvaporation=nullptr)
void SetCombinedChannel()
void InitialiseChannels() override
void BreakFragment(G4FragmentVector *, G4Fragment *theNucleus) override
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 void Initialise()=0
virtual G4bool IsApplicable(G4int Z, G4int A, G4double eexc) const =0