73 :_verbose(0),_myOwnProbAlgorithm (true),
74 _eOccupancy(0), _vShellNumber(-1),_gammaE(0.)
79 char* env = getenv(
"G4AddTimeLimitToPhotonEvaporation");
80 if(env) { timeLimit = 1.e-16*second; }
86 _discrDeexcitation = p;
93 if(_myOwnProbAlgorithm)
delete _probAlgorithm;
94 delete _discrDeexcitation;
95 delete _contDeexcitation;
111 G4cout <<
"G4PhotonEvaporation::EmittedFragment continium deex: "
127 G4cout <<
"G4PhotonEvaporation::EmittedFragment discrete deex: "
136 G4cout <<
"G4PhotonEvaporation unable emit gamma: "
155 G4cout <<
"G4PhotonEvaporation::BreakUpFragment " << products->size()
156 <<
" gammas from ContinuumDeexcitation " <<
G4endl;
162 _eOccupancy = _discrDeexcitation->
GetEO();
169 G4cout <<
"G4PhotonEvaporation::BreakUpFragment " << discrProducts->size()
170 <<
" gammas from DiscreteDeexcitation " <<
G4endl;
173 G4FragmentVector::iterator i;
174 for (i = discrProducts->begin(); i != discrProducts->end(); ++i)
176 products->push_back(*i);
178 delete discrProducts;
182 G4cout <<
"*-*-* Photon evaporation: " << products->size() <<
G4endl;
201 else if(_verbose > 0) {
202 G4cout <<
"G4PhotonEvaporation::BreakUp " << products->size()
203 <<
" gammas from ContinuesDeexcitation " <<
G4endl;
207 if (0 == products->size())
213 _eOccupancy = _discrDeexcitation->
GetEO();
220 G4cout <<
" = BreakUp = " << discrProducts->size()
221 <<
" gammas from DiscreteDeexcitation "
225 G4FragmentVector::iterator i;
226 for (i = discrProducts->begin(); i != discrProducts->end(); ++i)
228 products->push_back(*i);
230 delete discrProducts;
235 products->push_back(_nucleus);
238 G4cout <<
"*-*-*-* Photon evaporation: " << products->size() <<
G4endl;
259 G4cout <<
" = BreakItUp = " << products->size()
260 <<
" gammas from ContinuumDeexcitation " <<
G4endl;
266 _eOccupancy = _discrDeexcitation->
GetEO();
273 G4cout <<
" = BreakItUp = " << discrProducts->size()
274 <<
" gammas from DiscreteDeexcitation " <<
G4endl;
276 G4FragmentVector::iterator i;
277 for (i = discrProducts->begin(); i != discrProducts->end(); ++i)
279 products->push_back(*i);
281 delete discrProducts;
284 products->push_back(_nucleus);
287 G4cout <<
"*-*-* Photon evaporation: " << products->size() <<
G4endl;
295 _nucleus = theNucleus;
307 if(_myOwnProbAlgorithm)
delete _probAlgorithm;
309 _probAlgorithm = probAlgorithm;
311 _myOwnProbAlgorithm =
false;
344 _discrDeexcitation->
SetEO(eo);
348void G4PhotonEvaporation::CheckConservation(
const G4Fragment & theInitialState,
355 G4FragmentVector::iterator h;
356 for (h = Result->begin(); h != Result->end(); h++) {
358 ProductsEnergy += tmp.
e();
359 ProductsMomentum += tmp.
vect();
360 ProductsA += (*h)->GetA_asInt();
361 ProductsZ += (*h)->GetZ_asInt();
364 if (ProductsA != theInitialState.
GetA_asInt()) {
365 G4cout <<
"!!!!!!!!!! Baryonic Number Conservation Violation !!!!!!!!!!" <<
G4endl;
366 G4cout <<
"G4PhotonEvaporation.cc: Barionic Number Conservation test for evaporation fragments"
369 <<
" Fragments A = " << ProductsA <<
" Diference --> "
372 if (ProductsZ != theInitialState.
GetZ_asInt()) {
373 G4cout <<
"!!!!!!!!!! Charge Conservation Violation !!!!!!!!!!" <<
G4endl;
374 G4cout <<
"G4PhotonEvaporation.cc: Charge Conservation test for evaporation fragments"
377 <<
" Fragments Z = " << ProductsZ <<
" Diference --> "
380 if (std::abs(ProductsEnergy-theInitialState.
GetMomentum().
e()) > 1.0*keV) {
381 G4cout <<
"!!!!!!!!!! Energy Conservation Violation !!!!!!!!!!" <<
G4endl;
382 G4cout <<
"G4PhotonEvaporation.cc: Energy Conservation test for evaporation fragments"
385 <<
" Fragments E = " << ProductsEnergy/MeV <<
" MeV Diference --> "
388 if (std::abs(ProductsMomentum.
x()-theInitialState.
GetMomentum().
x()) > 1.0*keV ||
389 std::abs(ProductsMomentum.
y()-theInitialState.
GetMomentum().
y()) > 1.0*keV ||
390 std::abs(ProductsMomentum.
z()-theInitialState.
GetMomentum().
z()) > 1.0*keV) {
391 G4cout <<
"!!!!!!!!!! Momentum Conservation Violation !!!!!!!!!!" <<
G4endl;
392 G4cout <<
"G4PhotonEvaporation.cc: Momentum Conservation test for evaporation fragments"
395 <<
" Fragments P = " << ProductsMomentum <<
" MeV Diference --> "
std::vector< G4Fragment * > G4FragmentVector
G4DLLIMPORT std::ostream G4cout
G4double GetExcitationEnergy() const
const G4LorentzVector & GetMomentum() const
virtual G4FragmentVector * BreakItUp(const G4Fragment &nucleus)
void SetMaxHalfLife(G4double)
virtual G4Fragment * EmittedFragment(G4Fragment *theNucleus)
virtual G4FragmentVector * BreakUp(const G4Fragment &nucleus)
virtual G4double GetEmissionProbability(G4Fragment *theNucleus)
virtual void SetEmissionStrategy(G4VEmissionProbability *probAlgorithm)
virtual ~G4PhotonEvaporation()
virtual G4FragmentVector * BreakUpFragment(G4Fragment *theNucleus)
void SetTimeLimit(G4double value)
void SetEOccupancy(G4ElectronOccupancy eOccupancy)
void SetVerboseLevel(G4int verbose)
virtual G4double EmissionProbability(const G4Fragment &fragment, const G4double anEnergy)=0
void SetTimeLimit(G4double value)
void SetNucleus(G4Fragment *nucleus)
G4ElectronOccupancy GetEO()
G4FragmentVector * DoChain()
G4FragmentVector * DoTransition()
G4Fragment * GenerateGamma()
void SetEO(G4ElectronOccupancy eo)
void SetVerboseLevel(G4int verbose)
void SetVaccantSN(G4int val)
virtual G4bool CanDoTransition()=0