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;
108void 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));
240 theTempResult = theEvaporation->
BreakItUp(*(*iList));
243 G4bool deletePrimary =
true;
244 size_t nsec = theTempResult->size();
249 G4FragmentVector::iterator j;
250 for (j = theTempResult->begin(); j != theTempResult->end(); ++j) {
251 if((*j) == (*iList)) { deletePrimary =
false; }
254 A = (*j)->GetA_asInt();
255 exEnergy = (*j)->GetExcitationEnergy();
257 if(A <= 1) { theResults.push_back(*j); }
261 if(exEnergy < minExcitation) { theResults.push_back(*j); }
262 else { thePhotoEvapList.push_back(*j); }
267 if(exEnergy < minExcitation) {
268 Z = (*j)->GetZ_asInt();
272 theResults.push_back(*j);
279 if(ffrag->
IsStable()) { theResults.push_back(*j); }
280 else { theEvapList.push_back(*j); }
284 theEvapList.push_back(*j);
290 thePhotoEvapList.push_back(*j);
292 theEvapList.push_back(*j);
297 if( deletePrimary ) {
delete (*iList); }
298 delete theTempResult;
310 for(iList = thePhotoEvapList.begin(); iList != thePhotoEvapList.end(); ++iList)
317 if(exEnergy >= minExcitation) {
319 size_t nsec = theTempResult->size();
325 G4FragmentVector::iterator j;
326 for (j = theTempResult->begin(); j != theTempResult->end(); ++j)
328 theResults.push_back(*j);
331 delete theTempResult;
335 theResults.push_back(*iList);
347 theReactionProductVector->reserve( theResults.size() );
349 G4int theFragmentA, theFragmentZ;
351 std::list<G4Fragment*>::iterator i;
352 for (i = theResults.begin(); i != theResults.end(); ++i)
354 theFragmentA = (*i)->GetA_asInt();
355 theFragmentZ = (*i)->GetZ_asInt();
357 if (theFragmentA == 0) {
358 theKindOfFragment = (*i)->GetParticleDefinition();
359 }
else if (theFragmentA == 1 && theFragmentZ == 0) {
361 }
else if (theFragmentA == 1 && theFragmentZ == 1) {
363 }
else if (theFragmentA == 2 && theFragmentZ == 1) {
365 }
else if (theFragmentA == 3 && theFragmentZ == 1) {
367 }
else if (theFragmentA == 3 && theFragmentZ == 2) {
369 }
else if (theFragmentA == 4 && theFragmentZ == 2) {
373 theTableOfIons->
GetIon(theFragmentZ,theFragmentA,0.0);
375 if (theKindOfFragment != 0)
381 theReactionProductVector->push_back(theNew);
386 return theReactionProductVector;
391 if(ptr && ptr != theEvaporation) {
392 delete theEvaporation;
393 theEvaporation = ptr;
403 if(ptr && ptr != theMultiFragmentation) {
404 delete theMultiFragmentation;
405 theMultiFragmentation = ptr;
411 if(ptr && ptr != theFermiModel) {
412 delete theFermiModel;
420 if(ptr && ptr != thePhotonEvaporation) {
421 thePhotonEvaporation = ptr;
428 maxZForFermiBreakUp = aZ;
433 maxAForFermiBreakUp = std::min(5,anA);
444 minEForMultiFrag = anE;
std::vector< G4Fragment * > G4FragmentVector
std::vector< G4ReactionProduct * > G4ReactionProductVector
static G4Alpha * AlphaDefinition()
static G4Deuteron * DeuteronDefinition()
void SetMaxAandZForFermiBreakUp(G4int anA, G4int aZ)
G4VEvaporationChannel * SetPhotonEvaporation()
void SetEvaporation(G4VEvaporation *ptr)
void SetFermiModel(G4VFermiBreakUp *ptr)
void SetMaxZForFermiBreakUp(G4int aZ)
void SetMaxAForFermiBreakUp(G4int anA)
void SetMultiFragmentation(G4VMultiFragmentation *ptr)
void SetMinEForMultiFrag(G4double anE)
G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState) const
static G4FermiFragmentsPool * Instance()
const G4VFermiFragment * GetFragment(G4int Z, G4int A)
G4double GetExcitationEnergy() const
static G4He3 * He3Definition()
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int J=0)
static G4Neutron * NeutronDefinition()
static G4NistManager * Instance()
G4double GetIsotopeAbundance(G4int Z, G4int N) const
static G4ParticleTable * GetParticleTable()
G4IonTable * GetIonTable()
static G4Proton * ProtonDefinition()
void SetMomentum(const G4double x, const G4double y, const G4double z)
void SetTotalEnergy(const G4double en)
void SetFormationTime(G4double aTime)
static G4Triton * TritonDefinition()
virtual G4FragmentVector * BreakUpFragment(G4Fragment *theNucleus)
virtual G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)=0
G4VEvaporationChannel * GetPhotonEvaporation()
virtual void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
virtual void Initialise()
virtual G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)=0
G4double GetExcitationEnergy(void) const
virtual G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)=0