69 std::vector<G4AtomicShell*>vec =
pos.second;
70 G4int vecSize = vec.size();
71 for (
G4int i=0; i< vecSize; ++i){
79 std::vector<G4FluoTransition*>vec = ppos.second;
80 G4int vecSize=vec.size();
82 for (
G4int i=0; i< vecSize; ++i){
96 std::vector<G4AtomicShell*> v = (*pos).second;
97 if (shellIndex < v.size()) {
return v[shellIndex]; }
101 size_t lastShell = v.size();
103 ed <<
"No de-excitation for Z= " <<
Z
104 <<
" shellIndex= " << shellIndex
105 <<
">= numberOfShells= " << lastShell;
107 G4Exception(
"G4AtomicTransitionManager::Shell()",
"de0001",
109 if (lastShell > 0) {
return v[lastShell - 1]; }
115 ed <<
"No de-excitation for Z= " <<
Z
116 <<
" shellIndex= " << shellIndex
117 <<
". AtomicShell not found - check if data are uploaded";
118 G4Exception(
"G4AtomicTransitionManager::Shell()",
"de0001",
135 std::vector<G4FluoTransition*> v = (*pos).second;
136 if (shellIndex < v.size()) {
return(v[shellIndex]); }
140 ed <<
"No fluo transition for Z= " <<
Z
141 <<
" shellIndex= " << shellIndex;
142 G4Exception(
"G4AtomicTransitionManager::ReachebleShell()",
"de0002",
149 ed <<
"No transition table for Z= " <<
Z
150 <<
" shellIndex= " << shellIndex;
151 G4Exception(
"G4AtomicTransitionManager::ReachableShell()",
"de0001",
160 G4int vacancyShellIndex)
const
173 res = ((*pos).second).size();
177 ed <<
"No deexcitation for Z= " <<
Z;
178 G4Exception(
"G4AtomicTransitionManager::NumberOfShells()",
"de0001",
194 res = ((*pos).second).size();
199 ed <<
"No deexcitation for Z= " <<
Z
200 <<
", so energy deposited locally";
201 G4Exception(
"G4AtomicTransitionManager::NumberOfReachebleShells()",
218 G4int Z,
size_t shellIndex)
const
225 std::vector<G4FluoTransition*> v = (*pos).second;
227 if (shellIndex < v.size())
232 for (
size_t j=0; j<transProb.size(); ++j)
234 totalRadTransProb += transProb[j];
240 ed <<
"Zero transition probability for Z=" <<
Z
241 <<
" shellIndex= " << shellIndex;
243 "G4AtomicTransitionManager::TotalRadiativeTransitionProbability()",
250 ed <<
"No deexcitation for Z=" <<
Z
251 <<
" shellIndex= " << shellIndex;
253 "G4AtomicTransitionManager::TotalRadiativeTransitionProbability()",
254 "de0001",
FatalException,ed,
"Cannot compute transition probability");
256 return totalRadTransProb;
261 G4int Z,
size_t shellIndex)
const
264 if(prob > 1.0 || prob < 0.0) {
266 ed <<
"Total probability mismatch Z= " <<
Z
267 <<
" shellIndex= " << shellIndex
268 <<
" prob= " << prob;
270 "G4AtomicTransitionManager::TotalNonRadiativeTransitionProbability()",
271 "de0003",
FatalException,ed,
"Cannot compute non-radiative probability");
290 "/fluor_Bearden":
"/fluor");
294 shellManager->
LoadData(fluoDirectory+
"/binding");
301 fluoDirectory =
"/fluor_ANSTO";
302 G4cout <<
"The ANSTO fluorescence radiation yields substitute the EADL data libraries" <<
G4endl;
311 std::vector<G4AtomicShell*> vectorOfShells;
312 size_t shellIndex = 0;
316 for (shellIndex = 0; shellIndex<numberOfShells; ++shellIndex)
323 vectorOfShells.push_back(shell);
337 std::vector<G4FluoTransition*> vectorOfTransitions;
340 size_t numberOfVacancies = fluoManager-> NumberOfVacancies();
342 for(
size_t vacancyIndex = 0; vacancyIndex<numberOfVacancies;
345 std::vector<G4int> vectorOfIds;
350 size_t numberOfTransitions =
352 for (
size_t origShellIndex = 0; origShellIndex < numberOfTransitions;
355 G4int originatingShellId =
357 vectorOfIds.push_back(originatingShellId);
361 vectorOfEnergies.push_back(transitionEnergy);
364 vectorOfProbabilities.push_back(transitionProbability);
368 vectorOfEnergies,vectorOfProbabilities);
369 vectorOfTransitions.push_back(transition);
static const G4double pos
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
#define G4MUTEX_INITIALIZER
G4GLOB_DLL std::ostream G4cout
G4int NumberOfReachableShells(G4int Z) const
G4double TotalRadiativeTransitionProbability(G4int Z, size_t shellIndex) const
const G4AugerTransition * ReachableAugerShell(G4int Z, G4int shellIndex) const
G4AtomicShell * Shell(G4int Z, size_t shellIndex) const
std::map< G4int, std::vector< G4AtomicShell * >, std::less< G4int > > shellTable
static G4AtomicTransitionManager * instance
const G4FluoTransition * ReachableShell(G4int Z, size_t shellIndex) const
void Initialise()
needs to be called once from other code before start of run
G4int NumberOfShells(G4int Z) const
G4AtomicTransitionManager()
G4double TotalNonRadiativeTransitionProbability(G4int Z, size_t shellIndex) const
static G4AtomicTransitionManager * Instance()
~G4AtomicTransitionManager()
G4int NumberOfReachableAugerShells(G4int Z) const
std::map< G4int, std::vector< G4FluoTransition * >, std::less< G4int > > transitionTable
G4AugerTransition * GetAugerTransition(G4int Z, G4int vacancyShellIndex)
size_t NumberOfVacancies(G4int Z) const
static G4EmParameters * Instance()
G4bool BeardenFluoDir() const
G4bool ANSTOFluoDir() const
G4double StartShellEnergy(G4int initIndex, G4int vacancyIndex) const
size_t NumberOfTransitions(G4int vacancyIndex) const
G4int VacancyId(G4int vacancyIndex) const
Given the index of the vacancy returns its identity.
G4int StartShellId(G4int initIndex, G4int vacancyIndex) const
G4double StartShellProb(G4int initIndex, G4int vacancyIndex) const
const G4DataVector & TransitionProbabilities() const
Return the probabilities of the transitions.
G4int ShellId(G4int Z, G4int shellIndex) const
G4double BindingEnergy(G4int Z, G4int shellIndex) const
size_t NumberOfShells(G4int Z) const
void LoadData(const G4String &fileName)
G4double bindingEnergy(G4int A, G4int Z)
G4Mutex AtomicTransitionManagerMutex