#include <G4PhotonEvaporation.hh>
Inheritance diagram for G4PhotonEvaporation:
Public Member Functions | |
G4PhotonEvaporation () | |
virtual | ~G4PhotonEvaporation () |
virtual G4Fragment * | EmittedFragment (G4Fragment *theNucleus) |
virtual G4FragmentVector * | BreakUpFragment (G4Fragment *theNucleus) |
virtual G4FragmentVector * | BreakItUp (const G4Fragment &nucleus) |
virtual G4FragmentVector * | BreakUp (const G4Fragment &nucleus) |
virtual G4double | GetEmissionProbability (G4Fragment *theNucleus) |
virtual void | SetEmissionStrategy (G4VEmissionProbability *probAlgorithm) |
void | SetVerboseLevel (G4int verbose) |
void | SetICM (G4bool) |
void | RDMForced (G4bool) |
void | SetMaxHalfLife (G4double) |
void | SetTimeLimit (G4double value) |
void | SetEOccupancy (G4ElectronOccupancy eOccupancy) |
G4ElectronOccupancy | GetEOccupancy () |
G4int | GetVacantShellNumber () |
Definition at line 74 of file G4PhotonEvaporation.hh.
G4PhotonEvaporation::G4PhotonEvaporation | ( | ) |
Definition at line 72 of file G4PhotonEvaporation.cc.
References DBL_MAX, G4DiscreteGammaDeexcitation::SetICM(), and G4VGammaDeexcitation::SetTimeLimit().
00073 :_verbose(0),_myOwnProbAlgorithm (true), 00074 _eOccupancy(0), _vShellNumber(-1),_gammaE(0.) 00075 { 00076 _probAlgorithm = new G4E1Probability; 00077 00078 G4double timeLimit = DBL_MAX; 00079 char* env = getenv("G4AddTimeLimitToPhotonEvaporation"); 00080 if(env) { timeLimit = 1.e-16*second; } 00081 00082 G4DiscreteGammaDeexcitation* p = new G4DiscreteGammaDeexcitation(); 00083 p->SetICM(false); 00084 p->SetTimeLimit(timeLimit); 00085 00086 _discrDeexcitation = p; 00087 _contDeexcitation = new G4ContinuumGammaDeexcitation; 00088 _nucleus = 0; 00089 }
G4PhotonEvaporation::~G4PhotonEvaporation | ( | ) | [virtual] |
Definition at line 91 of file G4PhotonEvaporation.cc.
00092 { 00093 if(_myOwnProbAlgorithm) delete _probAlgorithm; 00094 delete _discrDeexcitation; 00095 delete _contDeexcitation; 00096 }
G4FragmentVector * G4PhotonEvaporation::BreakItUp | ( | const G4Fragment & | nucleus | ) | [virtual] |
Definition at line 244 of file G4PhotonEvaporation.cc.
References G4VGammaDeexcitation::DoChain(), G4cout, G4endl, G4VGammaDeexcitation::GetEO(), G4VGammaDeexcitation::GetVacantSN(), G4VGammaDeexcitation::SetNucleus(), and G4VGammaDeexcitation::SetVaccantSN().
Referenced by G4NeutronHPCaptureFS::ApplyYourself(), and G4NuclearDecayChannel::DecayIt().
00245 { 00246 // The same pointer of primary nucleus 00247 _nucleus = new G4Fragment(nucleus); 00248 _contDeexcitation->SetNucleus(_nucleus); 00249 _discrDeexcitation->SetNucleus(_nucleus); 00250 00251 //G4cout << "G4PhotonEvaporation::BreakItUp: " << nucleus << G4endl; 00252 00253 // Do the whole gamma chain 00254 G4FragmentVector* products = _contDeexcitation->DoChain(); 00255 if( !products ) { products = new G4FragmentVector; } 00256 00257 // Products from continuum gamma transitions 00258 if (_verbose > 0) { 00259 G4cout << " = BreakItUp = " << products->size() 00260 << " gammas from ContinuumDeexcitation " << G4endl; 00261 } 00262 00263 // Products from discrete gamma transitions 00264 G4FragmentVector* discrProducts = _discrDeexcitation->DoChain(); 00265 if(discrProducts) { 00266 _eOccupancy = _discrDeexcitation->GetEO(); 00267 _vShellNumber = _discrDeexcitation->GetVacantSN(); 00268 00269 // not sure if the following line is needed! 00270 _discrDeexcitation->SetVaccantSN(-1); 00271 00272 if (_verbose > 0) { 00273 G4cout << " = BreakItUp = " << discrProducts->size() 00274 << " gammas from DiscreteDeexcitation " << G4endl; 00275 } 00276 G4FragmentVector::iterator i; 00277 for (i = discrProducts->begin(); i != discrProducts->end(); ++i) 00278 { 00279 products->push_back(*i); 00280 } 00281 delete discrProducts; 00282 } 00283 // Add deexcited nucleus to products 00284 products->push_back(_nucleus); 00285 00286 if (_verbose > 0) { 00287 G4cout << "*-*-* Photon evaporation: " << products->size() << G4endl; 00288 } 00289 return products; 00290 }
G4FragmentVector * G4PhotonEvaporation::BreakUp | ( | const G4Fragment & | nucleus | ) | [virtual] |
Implements G4VEvaporationChannel.
Definition at line 187 of file G4PhotonEvaporation.cc.
References G4VGammaDeexcitation::DoTransition(), G4cout, G4endl, G4VGammaDeexcitation::GetEO(), G4VGammaDeexcitation::GetVacantSN(), G4VGammaDeexcitation::SetNucleus(), and G4VGammaDeexcitation::SetVaccantSN().
Referenced by G4NuclearDecayChannel::DecayIt().
00188 { 00189 //G4cout << "G4PhotonEvaporation::BreakUp" << G4endl; 00190 _nucleus = new G4Fragment(nucleus); 00191 00192 _contDeexcitation->SetNucleus(_nucleus); 00193 _discrDeexcitation->SetNucleus(_nucleus); 00194 00195 // Do one photon emission 00196 00197 // Products from continuum gamma transitions 00198 00199 G4FragmentVector* products = _contDeexcitation->DoTransition(); 00200 if( !products ) { products = new G4FragmentVector(); } 00201 else if(_verbose > 0) { 00202 G4cout << "G4PhotonEvaporation::BreakUp " << products->size() 00203 << " gammas from ContinuesDeexcitation " << G4endl; 00204 G4cout << " Residual: " << nucleus << G4endl; 00205 } 00206 00207 if (0 == products->size()) 00208 { 00209 // Products from discrete gamma transitions 00210 G4FragmentVector* discrProducts = _discrDeexcitation->DoTransition(); 00211 00212 if (discrProducts) { 00213 _eOccupancy = _discrDeexcitation->GetEO(); 00214 _vShellNumber = _discrDeexcitation->GetVacantSN(); 00215 00216 // not sure if the following line is needed! 00217 _discrDeexcitation->SetVaccantSN(-1); 00218 // 00219 if (_verbose > 0) { 00220 G4cout << " = BreakUp = " << discrProducts->size() 00221 << " gammas from DiscreteDeexcitation " 00222 << G4endl; 00223 G4cout << " Residual: " << nucleus << G4endl; 00224 } 00225 G4FragmentVector::iterator i; 00226 for (i = discrProducts->begin(); i != discrProducts->end(); ++i) 00227 { 00228 products->push_back(*i); 00229 } 00230 delete discrProducts; 00231 } 00232 } 00233 00234 // Add deexcited nucleus to products 00235 products->push_back(_nucleus); 00236 00237 if (_verbose > 0) { 00238 G4cout << "*-*-*-* Photon evaporation: " << products->size() << G4endl; 00239 } 00240 00241 return products; 00242 }
G4FragmentVector * G4PhotonEvaporation::BreakUpFragment | ( | G4Fragment * | theNucleus | ) | [virtual] |
Reimplemented from G4VEvaporationChannel.
Definition at line 142 of file G4PhotonEvaporation.cc.
References G4VGammaDeexcitation::DoChain(), G4cout, G4endl, G4VGammaDeexcitation::GetEO(), G4VGammaDeexcitation::GetVacantSN(), G4VGammaDeexcitation::SetNucleus(), and G4VGammaDeexcitation::SetVaccantSN().
Referenced by G4NeutronRadCapture::ApplyYourself().
00143 { 00144 //G4cout << "G4PhotonEvaporation::BreakUpFragment" << G4endl; 00145 // The same pointer of primary nucleus 00146 _nucleus = nucleus; 00147 _contDeexcitation->SetNucleus(_nucleus); 00148 _discrDeexcitation->SetNucleus(_nucleus); 00149 00150 // Do the whole gamma chain 00151 G4FragmentVector* products = _contDeexcitation->DoChain(); 00152 if( !products ) { products = new G4FragmentVector(); } 00153 00154 if (_verbose > 0) { 00155 G4cout << "G4PhotonEvaporation::BreakUpFragment " << products->size() 00156 << " gammas from ContinuumDeexcitation " << G4endl; 00157 G4cout << " Residual: " << nucleus << G4endl; 00158 } 00159 // Products from discrete gamma transitions 00160 G4FragmentVector* discrProducts = _discrDeexcitation->DoChain(); 00161 if(discrProducts) { 00162 _eOccupancy = _discrDeexcitation->GetEO(); 00163 _vShellNumber = _discrDeexcitation->GetVacantSN(); 00164 00165 // not sure if the following line is needed! 00166 _discrDeexcitation->SetVaccantSN(-1); 00167 00168 if (_verbose > 0) { 00169 G4cout << "G4PhotonEvaporation::BreakUpFragment " << discrProducts->size() 00170 << " gammas from DiscreteDeexcitation " << G4endl; 00171 G4cout << " Residual: " << nucleus << G4endl; 00172 } 00173 G4FragmentVector::iterator i; 00174 for (i = discrProducts->begin(); i != discrProducts->end(); ++i) 00175 { 00176 products->push_back(*i); 00177 } 00178 delete discrProducts; 00179 } 00180 00181 if (_verbose > 0) { 00182 G4cout << "*-*-* Photon evaporation: " << products->size() << G4endl; 00183 } 00184 return products; 00185 }
G4Fragment * G4PhotonEvaporation::EmittedFragment | ( | G4Fragment * | theNucleus | ) | [virtual] |
Reimplemented from G4VEvaporationChannel.
Definition at line 98 of file G4PhotonEvaporation.cc.
References G4VGammaDeexcitation::CanDoTransition(), G4cout, G4endl, G4VGammaDeexcitation::GenerateGamma(), G4VGammaDeexcitation::Initialize(), and G4VGammaDeexcitation::SetNucleus().
00099 { 00100 //G4cout << "G4PhotonEvaporation::EmittedFragment" << G4endl; 00101 _nucleus = nucleus; 00102 00103 // Do one photon emission by the continues deexcitation 00104 _contDeexcitation->SetNucleus(_nucleus); 00105 _contDeexcitation->Initialize(); 00106 00107 if(_contDeexcitation->CanDoTransition()) { 00108 G4Fragment* gamma = _contDeexcitation->GenerateGamma(); 00109 if(gamma) { 00110 if (_verbose > 0) { 00111 G4cout << "G4PhotonEvaporation::EmittedFragment continium deex: " 00112 << gamma << G4endl; 00113 G4cout << " Residual: " << nucleus << G4endl; 00114 } 00115 return gamma; 00116 } 00117 } 00118 00119 // Do one photon emission by the discrete deexcitation 00120 _discrDeexcitation->SetNucleus(_nucleus); 00121 _discrDeexcitation->Initialize(); 00122 00123 if(_discrDeexcitation->CanDoTransition()) { 00124 G4Fragment* gamma = _discrDeexcitation->GenerateGamma(); 00125 if(gamma) { 00126 if (_verbose > 0) { 00127 G4cout << "G4PhotonEvaporation::EmittedFragment discrete deex: " 00128 << gamma << G4endl; 00129 G4cout << " Residual: " << nucleus << G4endl; 00130 } 00131 return gamma; 00132 } 00133 } 00134 00135 if (_verbose > 0) { 00136 G4cout << "G4PhotonEvaporation unable emit gamma: " 00137 << nucleus << G4endl; 00138 } 00139 return 0; 00140 }
G4double G4PhotonEvaporation::GetEmissionProbability | ( | G4Fragment * | theNucleus | ) | [virtual] |
Implements G4VEvaporationChannel.
Definition at line 293 of file G4PhotonEvaporation.cc.
References G4VEmissionProbability::EmissionProbability(), and G4Fragment::GetExcitationEnergy().
00294 { 00295 _nucleus = theNucleus; 00296 G4double prob = 00297 _probAlgorithm->EmissionProbability(*_nucleus,_nucleus->GetExcitationEnergy()); 00298 return prob; 00299 }
G4ElectronOccupancy G4PhotonEvaporation::GetEOccupancy | ( | ) | [inline] |
G4int G4PhotonEvaporation::GetVacantShellNumber | ( | ) | [inline] |
Definition at line 108 of file G4PhotonEvaporation.hh.
Referenced by G4NuclearDecayChannel::DecayIt().
void G4PhotonEvaporation::RDMForced | ( | G4bool | ) |
Definition at line 337 of file G4PhotonEvaporation.cc.
Referenced by G4NuclearDecayChannel::DecayIt().
00338 { 00339 (static_cast <G4DiscreteGammaDeexcitation*> (_discrDeexcitation))->SetRDM(fromRDM); 00340 }
void G4PhotonEvaporation::SetEmissionStrategy | ( | G4VEmissionProbability * | probAlgorithm | ) | [virtual] |
Definition at line 302 of file G4PhotonEvaporation.cc.
00303 { 00304 00305 // CD - not sure about always wanting to delete this pointer.... 00306 00307 if(_myOwnProbAlgorithm) delete _probAlgorithm; 00308 00309 _probAlgorithm = probAlgorithm; 00310 00311 _myOwnProbAlgorithm = false; 00312 }
void G4PhotonEvaporation::SetEOccupancy | ( | G4ElectronOccupancy | eOccupancy | ) |
Definition at line 342 of file G4PhotonEvaporation.cc.
References G4VGammaDeexcitation::SetEO().
00343 { 00344 _discrDeexcitation->SetEO(eo); 00345 }
void G4PhotonEvaporation::SetICM | ( | G4bool | ) |
Definition at line 322 of file G4PhotonEvaporation.cc.
Referenced by G4NeutronHPCaptureFS::ApplyYourself(), and G4NuclearDecayChannel::DecayIt().
00323 { 00324 (static_cast <G4DiscreteGammaDeexcitation*> (_discrDeexcitation))->SetICM(ic); 00325 }
void G4PhotonEvaporation::SetMaxHalfLife | ( | G4double | ) |
Definition at line 327 of file G4PhotonEvaporation.cc.
Referenced by G4NuclearDecayChannel::DecayIt().
void G4PhotonEvaporation::SetTimeLimit | ( | G4double | value | ) |
Definition at line 332 of file G4PhotonEvaporation.cc.
References G4VGammaDeexcitation::SetTimeLimit().
00333 { 00334 _discrDeexcitation->SetTimeLimit(val); 00335 }
void G4PhotonEvaporation::SetVerboseLevel | ( | G4int | verbose | ) |
Definition at line 315 of file G4PhotonEvaporation.cc.
References G4VGammaDeexcitation::SetVerboseLevel().
Referenced by G4NuclearDecayChannel::DecayIt().
00316 { 00317 _verbose = verbose; 00318 _contDeexcitation->SetVerboseLevel(verbose); 00319 _discrDeexcitation->SetVerboseLevel(verbose); 00320 }