65 : theChannels(0),nChannels(0)
70 InitialiseEvaporation();
75 : theChannels(0),nChannels(0)
82 InitialiseEvaporation();
90 delete theChannelFactory;
93 void G4Evaporation::CleanChannels()
95 for (
size_t i=1; i<nChannels; ++i) {
delete (*theChannels)[i]; }
99 void G4Evaporation::SetParameters()
102 minExcitation = CLHEP::keV;
105 probabilities.reserve(68);
108 void G4Evaporation::InitialiseEvaporation()
111 theChannels = theChannelFactory->
GetChannel();
112 nChannels = theChannels->size();
113 probabilities.resize(nChannels, 0.0);
119 for(
size_t i=0; i<nChannels; ++i) {
120 (*theChannels)[i]->SetOPTxs(
OPTxs);
121 (*theChannels)[i]->UseSICB(
useSICB);
127 delete theChannelFactory;
129 InitialiseEvaporation();
134 delete theChannelFactory;
136 InitialiseEvaporation();
141 delete theChannelFactory;
143 InitialiseEvaporation();
149 if(0 < nChannels) { (*theChannels)[0] = ptr; }
161 G4double totprob, prob, oldprob = 0.0;
162 size_t maxchannel, i;
168 for(
G4int ia=0; ia<Amax; ++ia) {
175 if(maxZforFBU > Z && maxAforFBU >= A) {
176 theResult->push_back(theResidualNucleus);
190 if(Eex <= minExcitation && abun > 0.0) {
191 theResult->push_back(theResidualNucleus);
196 maxchannel = nChannels;
202 for(i=0; i<nChannels; ++i) {
203 prob = (*theChannels)[i]->GetEmissionProbability(theResidualNucleus);
207 probabilities[i] = totprob;
210 if(prob <= totprob*1.e-8 && oldprob <= totprob*1.e-8) {
217 if(7 == i && Eex > Elimit*A) {
225 if(0.0 < totprob && probabilities[0] == totprob) {
227 theTempResult = (*theChannels)[0]->BreakUpFragment(theResidualNucleus);
229 size_t nsec = theTempResult->size();
230 for(
size_t j=0; j<nsec; ++j) {
231 theResult->push_back((*theTempResult)[j]);
233 delete theTempResult;
242 if(0.0 == abun && Z < 20) {
246 size_t nsec = theTempResult->size();
247 for(
size_t j=0; j<nsec; ++j) {
248 theResult->push_back((*theTempResult)[j]);
250 delete theTempResult;
255 theResult->push_back(theResidualNucleus);
262 for(i=0; i<maxchannel; ++i) {
if(probabilities[i] >= totprob) {
break; } }
265 if(i >= nChannels) { i = nChannels - 1; }
271 G4Fragment* gamma = (*theChannels)[0]->EmittedFragment(theResidualNucleus);
272 if(gamma) { theResult->push_back(gamma); }
277 theTempResult = (*theChannels)[1]->BreakUp(*theResidualNucleus);
279 size_t nsec = theTempResult->size();
280 G4bool deletePrimary =
true;
281 for(
size_t j=0; j<nsec; ++j) {
282 if(theResidualNucleus == (*theTempResult)[j]) { deletePrimary =
false; }
283 theResult->push_back((*theTempResult)[j]);
285 if(deletePrimary) {
delete theResidualNucleus; }
286 delete theTempResult;
293 theTempResult = (*theChannels)[i]->BreakUp(*theResidualNucleus);
295 size_t nsec = theTempResult->size();
298 for(
size_t j=0; j<nsec; ++j) {
299 theResult->push_back((*theTempResult)[j]);
303 if(theResidualNucleus != (*theTempResult)[nsec] ) {
304 delete theResidualNucleus;
305 theResidualNucleus = (*theTempResult)[nsec];
308 delete theTempResult;
314 theResult->push_back(theResidualNucleus);
G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)
virtual std::vector< G4VEvaporationChannel * > * GetChannel()=0
virtual void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
virtual void Initialise()
G4VEvaporationChannel * thePhotonEvaporation
static G4NistManager * Instance()
virtual G4FragmentVector * BreakUpFragment(G4Fragment *fragment)
G4IonTable * GetIonTable() const
std::vector< G4Fragment * > G4FragmentVector
G4double GetIsotopeAbundance(G4int Z, G4int N) const
void SetCombinedChannel()
static G4ParticleTable * GetParticleTable()
virtual void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
static G4FermiFragmentsPool * Instance()
G4double GetExcitationEnergy() const