60 : theChannels(0),nChannels(0)
65 InitialiseEvaporation();
69 : theChannels(0),nChannels(0)
76 InitialiseEvaporation();
103 delete theChannelFactory;
106void G4Evaporation::CleanChannels()
108 for (
size_t i=1; i<nChannels; ++i) {
delete (*theChannels)[i]; }
112void G4Evaporation::SetParameters()
115 minExcitation = CLHEP::keV;
118 probabilities.reserve(68);
121void G4Evaporation::InitialiseEvaporation()
124 theChannels = theChannelFactory->
GetChannel();
125 nChannels = theChannels->size();
126 probabilities.resize(nChannels, 0.0);
132 for(
size_t i=0; i<nChannels; ++i) {
133 (*theChannels)[i]->SetOPTxs(
OPTxs);
134 (*theChannels)[i]->UseSICB(
useSICB);
140 delete theChannelFactory;
142 InitialiseEvaporation();
147 delete theChannelFactory;
149 InitialiseEvaporation();
154 delete theChannelFactory;
156 InitialiseEvaporation();
162 if(0 < nChannels) { (*theChannels)[0] = ptr; }
174 G4double totprob, prob, oldprob = 0.0;
175 size_t maxchannel, i;
181 for(
G4int ia=0; ia<Amax; ++ia) {
188 if(maxZforFBU > Z && maxAforFBU >= A) {
189 theResult->push_back(theResidualNucleus);
203 if(Eex <= minExcitation && abun > 0.0) {
204 theResult->push_back(theResidualNucleus);
209 maxchannel = nChannels;
215 for(i=0; i<nChannels; ++i) {
216 prob = (*theChannels)[i]->GetEmissionProbability(theResidualNucleus);
220 probabilities[i] = totprob;
223 if(prob <= totprob*1.e-8 && oldprob <= totprob*1.e-8) {
230 if(7 == i && Eex > Elimit*A) {
238 if(0.0 < totprob && probabilities[0] == totprob) {
240 theTempResult = (*theChannels)[0]->BreakUpFragment(theResidualNucleus);
242 size_t nsec = theTempResult->size();
243 for(
size_t j=0; j<nsec; ++j) {
244 theResult->push_back((*theTempResult)[j]);
246 delete theTempResult;
255 if(0.0 == abun && Z < 20) {
259 size_t nsec = theTempResult->size();
260 for(
size_t j=0; j<nsec; ++j) {
261 theResult->push_back((*theTempResult)[j]);
263 delete theTempResult;
268 theResult->push_back(theResidualNucleus);
276 for(i=0; i<maxchannel; ++i) {
if(probabilities[i] >= totprob) {
break; } }
279 if(i >= nChannels) { i = nChannels - 1; }
285 G4Fragment* gamma = (*theChannels)[0]->EmittedFragment(theResidualNucleus);
286 if(gamma) { theResult->push_back(gamma); }
291 theTempResult = (*theChannels)[1]->BreakUp(*theResidualNucleus);
293 size_t nsec = theTempResult->size();
294 G4bool deletePrimary =
true;
295 for(
size_t j=0; j<nsec; ++j) {
296 if(theResidualNucleus == (*theTempResult)[j]) { deletePrimary =
false; }
297 theResult->push_back((*theTempResult)[j]);
299 if(deletePrimary) {
delete theResidualNucleus; }
300 delete theTempResult;
307 theTempResult = (*theChannels)[i]->BreakUp(*theResidualNucleus);
309 size_t nsec = theTempResult->size();
312 for(
size_t j=0; j<nsec; ++j) {
313 theResult->push_back((*theTempResult)[j]);
317 if(theResidualNucleus != (*theTempResult)[nsec] ) {
318 delete theResidualNucleus;
319 theResidualNucleus = (*theTempResult)[nsec];
322 delete theTempResult;
328 theResult->push_back(theResidualNucleus);
std::vector< G4Fragment * > G4FragmentVector
virtual void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
void SetCombinedChannel()
G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)
virtual void Initialise()
static G4FermiFragmentsPool * Instance()
G4double GetExcitationEnergy() const
static G4NistManager * Instance()
G4double GetIsotopeAbundance(G4int Z, G4int N) const
virtual G4FragmentVector * BreakUpFragment(G4Fragment *fragment)
virtual std::vector< G4VEvaporationChannel * > * GetChannel()=0
G4VEvaporationChannel * thePhotonEvaporation
virtual void SetPhotonEvaporation(G4VEvaporationChannel *ptr)