88 maxZForFermiBreakUp(9),maxAForFermiBreakUp(17),minEForMultiFrag(4*
GeV),
89 minExcitation(
keV),OPTxs(3),useSICB(false),isEvapLocal(true)
93 theMultiFragmentation =
new G4StatMF;
103 if(isEvapLocal) {
delete theEvaporation; }
104 delete theMultiFragmentation;
105 delete theFermiModel;
108 void G4ExcitationHandler::SetParameters()
113 theEvaporation->
UseSICB(useSICB);
126 std::list<G4Fragment*> theEvapList;
127 std::list<G4Fragment*> thePhotoEvapList;
128 std::list<G4Fragment*> theResults;
142 theResults.push_back( theInitialStatePtr );
145 else if(exEnergy < minExcitation && nist->GetIsotopeAbundance(Z, A) > 0.0)
147 theResults.push_back( theInitialStatePtr );
156 if((A<maxAForFermiBreakUp && Z<maxZForFermiBreakUp)
157 || exEnergy <= minEForMultiFrag*A)
159 theEvapList.push_back(theInitialStatePtr);
163 theTempResult = theMultiFragmentation->
BreakItUp(theInitialState);
164 if(!theTempResult) { theEvapList.push_back(theInitialStatePtr); }
166 size_t nsec = theTempResult->size();
167 if(0 == nsec) { theEvapList.push_back(theInitialStatePtr); }
171 G4bool deletePrimary =
true;
172 G4FragmentVector::iterator j;
173 for (j = theTempResult->begin(); j != theTempResult->end(); ++j) {
174 if((*j) == theInitialStatePtr) { deletePrimary =
false; }
175 A = (*j)->GetA_asInt();
178 if(A <= 1) { theResults.push_back(*j); }
182 G4double exEnergy1 = (*j)->GetExcitationEnergy();
185 if(exEnergy1 < minExcitation) {
186 Z = (*j)->GetZ_asInt();
188 theResults.push_back(*j);
195 if(ffrag->
IsStable()) { theResults.push_back(*j); }
196 else { theEvapList.push_back(*j); }
200 theEvapList.push_back(*j);
205 }
else { theEvapList.push_back(*j); }
208 if( deletePrimary ) {
delete theInitialStatePtr; }
210 delete theTempResult;
223 std::list<G4Fragment*>::iterator iList;
224 for (iList = theEvapList.begin(); iList != theEvapList.end(); ++iList)
229 Z = (*iList)->GetZ_asInt();
233 if (A < maxAForFermiBreakUp && Z < maxZForFermiBreakUp)
235 theTempResult = theFermiModel->
BreakItUp(*(*iList));
238 if(1 == theTempResult->size()) {
239 delete theTempResult;
240 theTempResult = theEvaporation->
BreakItUp(*(*iList));
245 theTempResult = theEvaporation->
BreakItUp(*(*iList));
248 G4bool deletePrimary =
true;
249 size_t nsec = theTempResult->size();
254 G4FragmentVector::iterator j;
255 for (j = theTempResult->begin(); j != theTempResult->end(); ++j) {
256 if((*j) == (*iList)) { deletePrimary =
false; }
259 A = (*j)->GetA_asInt();
260 exEnergy = (*j)->GetExcitationEnergy();
262 if(A <= 1) { theResults.push_back(*j); }
266 if(exEnergy < minExcitation) { theResults.push_back(*j); }
267 else { thePhotoEvapList.push_back(*j); }
272 if(exEnergy < minExcitation) {
273 Z = (*j)->GetZ_asInt();
277 theResults.push_back(*j);
284 if(ffrag->
IsStable()) { theResults.push_back(*j); }
285 else { theEvapList.push_back(*j); }
289 theEvapList.push_back(*j);
295 thePhotoEvapList.push_back(*j);
297 theEvapList.push_back(*j);
302 if( deletePrimary ) {
delete (*iList); }
303 delete theTempResult;
315 for(iList = thePhotoEvapList.begin(); iList != thePhotoEvapList.end(); ++iList)
322 if(exEnergy >= minExcitation) {
324 size_t nsec = theTempResult->size();
330 G4FragmentVector::iterator j;
331 for (j = theTempResult->begin(); j != theTempResult->end(); ++j)
333 theResults.push_back(*j);
336 delete theTempResult;
340 theResults.push_back(*iList);
352 theReactionProductVector->reserve( theResults.size() );
354 G4int theFragmentA, theFragmentZ;
356 std::list<G4Fragment*>::iterator i;
357 for (i = theResults.begin(); i != theResults.end(); ++i)
359 theFragmentA = (*i)->GetA_asInt();
360 theFragmentZ = (*i)->GetZ_asInt();
362 if (theFragmentA == 0) {
363 theKindOfFragment = (*i)->GetParticleDefinition();
364 }
else if (theFragmentA == 1 && theFragmentZ == 0) {
366 }
else if (theFragmentA == 1 && theFragmentZ == 1) {
368 }
else if (theFragmentA == 2 && theFragmentZ == 1) {
370 }
else if (theFragmentA == 3 && theFragmentZ == 1) {
372 }
else if (theFragmentA == 3 && theFragmentZ == 2) {
374 }
else if (theFragmentA == 4 && theFragmentZ == 2) {
378 theTableOfIons->
GetIon(theFragmentZ,theFragmentA,0.0);
380 if (theKindOfFragment != 0)
386 theReactionProductVector->push_back(theNew);
391 return theReactionProductVector;
396 if(ptr && ptr != theEvaporation) {
397 delete theEvaporation;
398 theEvaporation = ptr;
408 if(ptr && ptr != theMultiFragmentation) {
409 delete theMultiFragmentation;
410 theMultiFragmentation = ptr;
416 if(ptr && ptr != theFermiModel) {
417 delete theFermiModel;
425 if(ptr && ptr != thePhotonEvaporation) {
426 thePhotonEvaporation = ptr;
433 maxZForFermiBreakUp = aZ;
438 maxAForFermiBreakUp = std::min(5,anA);
449 minEForMultiFrag = anE;