51 #include "G4Evaporation.hh" 65 G4Evaporation::G4Evaporation()
71 char* env = getenv(
"G4UsePhotonEvaporationOLD");
74 SetPhotonEvaporation(gammaEvap);
78 InitialiseEvaporation();
85 if(photoEvaporation) { SetPhotonEvaporation(photoEvaporation); }
91 InitialiseEvaporation();
95 G4Evaporation::~G4Evaporation()
98 void G4Evaporation::SetParameters()
102 maxZforFBU = thePool->GetMaxZ();
103 maxAforFBU = thePool->GetMaxA();
104 probabilities.reserve(68);
107 void G4Evaporation::InitialiseEvaporation()
110 theChannels = theChannelFactory->GetChannel();
111 nChannels = theChannels->size();
112 probabilities.resize(nChannels, 0.0);
113 InitialiseChannels();
116 void G4Evaporation::InitialiseChannels()
118 for(
size_t i=0; i<nChannels; ++i) {
119 (*theChannels)[i]->SetOPTxs(OPTxs);
120 (*theChannels)[i]->UseSICB(useSICB);
121 (*theChannels)[i]->Initialise();
125 void G4Evaporation::SetDefaultChannel()
127 delete theChannelFactory;
129 InitialiseEvaporation();
132 void G4Evaporation::SetGEMChannel()
134 delete theChannelFactory;
136 InitialiseEvaporation();
139 void G4Evaporation::SetCombinedChannel()
141 delete theChannelFactory;
143 InitialiseEvaporation();
150 BreakFragment(theResult, theResidualNucleus);
157 G4double totprob, prob, oldprob = 0.0;
158 size_t maxchannel, i;
164 for(
G4int ia=0; ia<Amax; ++ia) {
173 if(maxZforFBU > Z && maxAforFBU > A && Z > 0 && A > Z) {
174 if(thePool->IsApplicable(Z, A, mass+Eex)) {
175 theResult->push_back(theResidualNucleus);
180 G4double abun = nist->GetIsotopeAbundance(Z, A);
188 if(Eex <= minExcitation && abun > 0.0) {
189 theResult->push_back(theResidualNucleus);
194 maxchannel = nChannels;
200 for(i=0; i<nChannels; ++i) {
201 prob = (*theChannels)[i]->GetEmissionProbability(theResidualNucleus);
205 probabilities[i] = totprob;
209 if(prob <= totprob*1.
e-8 && oldprob <= totprob*1.
e-8) {
219 if(0.0 < totprob && probabilities[0] == totprob) {
221 (*theChannels)[0]->BreakUpChain(theResult, theResidualNucleus);
229 if(0.0 == abun && Z < 20) {
231 unstableBreakUp.BreakUpChain(theResult, theResidualNucleus);
233 theResult->push_back(theResidualNucleus);
241 for(i=0; i<maxchannel; ++i) {
if(probabilities[i] >= totprob) {
break; } }
244 G4Fragment* frag = (*theChannels)[i]->EmittedFragment(theResidualNucleus);
246 if(frag) { theResult->push_back(frag); }
249 theResult->push_back(theResidualNucleus);
255 theResult->push_back(theResidualNucleus);
G4double GetExcitationEnergy() const
G4double GetGroundStateMass() const
static G4NistManager * Instance()
double A(double temperature)
G4IonTable * GetIonTable() const
std::vector< G4Fragment * > G4FragmentVector
static G4ParticleTable * GetParticleTable()
static G4FermiFragmentsPool * Instance()