90 maxZForFermiBreakUp(9),maxAForFermiBreakUp(17),minEForMultiFrag(4*
GeV),
91 minExcitation(
keV),OPTxs(3),useSICB(false),isEvapLocal(true)
95 theMultiFragmentation =
new G4StatMF;
106 if(isEvapLocal) {
delete theEvaporation; }
107 delete theMultiFragmentation;
108 delete theFermiModel;
111 void G4ExcitationHandler::SetParameters()
116 theEvaporation->
UseSICB(useSICB);
132 std::list<G4Fragment*> theEvapList;
135 std::list<G4Fragment*> thePhotoEvapList;
138 std::list<G4Fragment*> theResults;
152 theResults.push_back( theInitialStatePtr );
155 else if(exEnergy < minExcitation && nist->GetIsotopeAbundance(Z, A) > 0.0)
157 theResults.push_back( theInitialStatePtr );
166 if((A<maxAForFermiBreakUp && Z<maxZForFermiBreakUp)
167 || exEnergy <= minEForMultiFrag*A)
169 theEvapList.push_back(theInitialStatePtr);
173 theTempResult = theMultiFragmentation->
BreakItUp(theInitialState);
174 if(!theTempResult) { theEvapList.push_back(theInitialStatePtr); }
176 size_t nsec = theTempResult->size();
177 if(0 == nsec) { theEvapList.push_back(theInitialStatePtr); }
181 G4bool deletePrimary =
true;
182 G4FragmentVector::iterator j;
183 for (j = theTempResult->begin(); j != theTempResult->end(); ++j) {
184 if((*j) == theInitialStatePtr) { deletePrimary =
false; }
185 A = (*j)->GetA_asInt();
188 if(A <= 1) { theResults.push_back(*j); }
192 G4double exEnergy1 = (*j)->GetExcitationEnergy();
195 if(exEnergy1 < minExcitation) {
196 Z = (*j)->GetZ_asInt();
198 theResults.push_back(*j);
205 if(ffrag->
IsStable()) { theResults.push_back(*j); }
206 else { theEvapList.push_back(*j); }
210 theEvapList.push_back(*j);
215 }
else { theEvapList.push_back(*j); }
218 if( deletePrimary ) {
delete theInitialStatePtr; }
220 delete theTempResult;
233 std::list<G4Fragment*>::iterator iList;
234 for (iList = theEvapList.begin(); iList != theEvapList.end(); ++iList)
239 Z = (*iList)->GetZ_asInt();
243 if (A < maxAForFermiBreakUp && Z < maxZForFermiBreakUp)
245 theTempResult = theFermiModel->
BreakItUp(*(*iList));
248 if(1 == theTempResult->size()) {
249 delete theTempResult;
250 theTempResult = theEvaporation->
BreakItUp(*(*iList));
255 theTempResult = theEvaporation->
BreakItUp(*(*iList));
258 G4bool deletePrimary =
true;
259 size_t nsec = theTempResult->size();
264 G4FragmentVector::iterator j;
265 for (j = theTempResult->begin(); j != theTempResult->end(); ++j) {
266 if((*j) == (*iList)) { deletePrimary =
false; }
269 A = (*j)->GetA_asInt();
270 exEnergy = (*j)->GetExcitationEnergy();
272 if(A <= 1) { theResults.push_back(*j); }
276 if(exEnergy < minExcitation) { theResults.push_back(*j); }
277 else { thePhotoEvapList.push_back(*j); }
282 if(exEnergy < minExcitation) {
283 Z = (*j)->GetZ_asInt();
287 theResults.push_back(*j);
294 if(ffrag->
IsStable()) { theResults.push_back(*j); }
295 else { theEvapList.push_back(*j); }
299 theEvapList.push_back(*j);
305 thePhotoEvapList.push_back(*j);
307 theEvapList.push_back(*j);
312 if( deletePrimary ) {
delete (*iList); }
313 delete theTempResult;
325 for(iList = thePhotoEvapList.begin(); iList != thePhotoEvapList.end(); ++iList)
332 if(exEnergy > minExcitation) {
334 size_t nsec = theTempResult->size();
340 G4FragmentVector::iterator j;
341 for (j = theTempResult->begin(); j != theTempResult->end(); ++j)
343 theResults.push_back(*j);
346 delete theTempResult;
350 theResults.push_back(*iList);
363 theReactionProductVector->reserve( theResults.size() );
365 G4int theFragmentA, theFragmentZ;
367 std::list<G4Fragment*>::iterator i;
368 for (i = theResults.begin(); i != theResults.end(); ++i)
370 theFragmentA = (*i)->GetA_asInt();
371 theFragmentZ = (*i)->GetZ_asInt();
372 G4double etot= (*i)->GetMomentum().e();
374 if (theFragmentA == 0) {
375 theKindOfFragment = (*i)->GetParticleDefinition();
376 }
else if (theFragmentA == 1 && theFragmentZ == 0) {
378 }
else if (theFragmentA == 1 && theFragmentZ == 1) {
380 }
else if (theFragmentA == 2 && theFragmentZ == 1) {
382 }
else if (theFragmentA == 3 && theFragmentZ == 1) {
384 }
else if (theFragmentA == 3 && theFragmentZ == 2) {
386 }
else if (theFragmentA == 4 && theFragmentZ == 2) {
391 G4double eexc = (*i)->GetExcitationEnergy();
396 theTableOfIons->
GetIon(theFragmentZ,theFragmentA,level);
403 if(eexc > minExcitation) {
407 for(level=1; level<9; ++level) {
408 ion = theTableOfIons->
GetIon(theFragmentZ,theFragmentA,level);
416 if(std::fabs(eexc - elevel2) < minExcitation) {
417 excitation = eexc - elevel2;
418 theKindOfFragment = ion;
421 }
else if(elevel2 - eexc >= eexc - elevel1) {
422 excitation = eexc - elevel1;
426 theKindOfFragment = ion;
427 excitation = eexc - elevel2;
439 if(etot < ionmass) { etot = ionmass; }
441 if (theKindOfFragment != 0)
447 theReactionProductVector->push_back(theNew);
452 return theReactionProductVector;
457 if(ptr && ptr != theEvaporation) {
458 delete theEvaporation;
459 theEvaporation = ptr;
469 if(ptr && ptr != theMultiFragmentation) {
470 delete theMultiFragmentation;
471 theMultiFragmentation = ptr;
477 if(ptr && ptr != theFermiModel) {
478 delete theFermiModel;
486 if(ptr && ptr != thePhotonEvaporation) {
487 thePhotonEvaporation = ptr;
494 maxZForFermiBreakUp = aZ;
499 maxAForFermiBreakUp = anA;
510 minEForMultiFrag = anE;
static G4Pow * GetInstance()
static G4Triton * TritonDefinition()
static G4He3 * He3Definition()
virtual G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)=0
G4double GetExcitationEnergy() const
virtual G4FragmentVector * BreakUpFragment(G4Fragment *theNucleus)
G4VEvaporationChannel * GetPhotonEvaporation()
void SetMomentum(const G4double x, const G4double y, const G4double z)
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
static G4Proton * ProtonDefinition()
void SetMinEForMultiFrag(G4double anE)
virtual G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)=0
virtual G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)=0
virtual void Initialise()
static G4NistManager * Instance()
G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState) const
std::vector< G4ReactionProduct * > G4ReactionProductVector
G4IonTable * GetIonTable() const
void SetFermiModel(G4VFermiBreakUp *ptr)
void SetTotalEnergy(const G4double en)
std::vector< G4Fragment * > G4FragmentVector
void SetMultiFragmentation(G4VMultiFragmentation *ptr)
G4double GetIsotopeAbundance(G4int Z, G4int N) const
void SetMaxZForFermiBreakUp(G4int aZ)
const G4VFermiFragment * GetFragment(G4int Z, G4int A)
G4double GetPDGMass() const
static G4ParticleTable * GetParticleTable()
virtual void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
void SetMaxAandZForFermiBreakUp(G4int anA, G4int aZ)
void SetEvaporation(G4VEvaporation *ptr)
G4double GetExcitationEnergy(void) const
void SetMaxAForFermiBreakUp(G4int anA)
void SetFormationTime(G4double aTime)
static G4FermiFragmentsPool * Instance()
void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
static G4Deuteron * DeuteronDefinition()
static G4Alpha * AlphaDefinition()
static G4Neutron * NeutronDefinition()
G4double GetExcitationEnergy() const