44 infTableLimit(limitInfTable),
45 supTableLimit(limitSupTable)
54 shellManager->
LoadData(
"/fluor/binding");
60 std::vector<G4AtomicShell*> vectorOfShells;
61 size_t shellIndex = 0;
64 for (shellIndex = 0; shellIndex<numberOfShells; shellIndex++)
71 vectorOfShells.push_back(shell);
75 shellTable[
Z] = vectorOfShells;
80 for (
G4int Znum= infTableLimit; Znum<=supTableLimit; Znum++)
82 std::vector<G4FluoTransition*> vectorOfTransitions;
85 size_t numberOfVacancies = fluoManager-> NumberOfVacancies();
87 for (
size_t vacancyIndex = 0; vacancyIndex<numberOfVacancies; vacancyIndex++)
90 std::vector<G4int> vectorOfIds;
96 for (
size_t origShellIndex = 0; origShellIndex < numberOfTransitions;
101 G4int originatingShellId = fluoManager->
StartShellId(origShellIndex,vacancyIndex);
103 vectorOfIds.push_back(originatingShellId);
106 vectorOfEnergies.push_back(transitionEnergy);
108 vectorOfProbabilities.push_back(transitionProbability);
111 vectorOfEnergies,vectorOfProbabilities);
112 vectorOfTransitions.push_back(transition);
115 transitionTable[Znum] = vectorOfTransitions;
128 std::map<G4int,std::vector<G4AtomicShell*>,std::less<G4int> >::iterator pos;
130 for (pos = shellTable.begin(); pos != shellTable.end(); pos++){
132 std::vector< G4AtomicShell*>vec = (*pos).second;
134 G4int vecSize=vec.size();
136 for (
G4int i=0; i< vecSize; i++){
143 std::map<G4int,std::vector<G4FluoTransition*>,std::less<G4int> >::iterator ppos;
145 for (ppos = transitionTable.begin(); ppos != transitionTable.end(); ppos++){
147 std::vector<G4FluoTransition*>vec = (*ppos).second;
149 G4int vecSize=vec.size();
151 for (
G4int i=0; i< vecSize; i++){
175 std::map<G4int,std::vector<G4AtomicShell*>,std::less<G4int> >::const_iterator pos;
177 pos = shellTable.find(Z);
179 if (pos!= shellTable.end())
181 std::vector<G4AtomicShell*>
v = (*pos).second;
182 if (shellIndex<v.size())
184 return(v[shellIndex]);
188 size_t lastShell = v.size();
189 G4cout <<
"G4AtomicTransitionManager::Shell - Z = "
190 << Z <<
", shellIndex = " << shellIndex
191 <<
" not found; number of shells = " << lastShell <<
G4endl;
195 return v[lastShell - 1];
215 std::map<G4int,std::vector<G4FluoTransition*>,std::less<G4int> >::const_iterator pos;
216 pos = transitionTable.find(Z);
217 if (pos!= transitionTable.end())
219 std::vector<G4FluoTransition*>
v = (*pos).second;
220 if (shellIndex < v.size())
return(v[shellIndex]);
222 G4Exception(
"G4AtomicTransitionManager::ReachebleShell()",
"de0002",
JustWarning,
"Energy Deposited Locally.");
232 G4String msg =
"No deexcitation for Z=" + (
G4String(Z))+
". Energy Deposited Locally.";
244 return augerTransition;
252 std::map<G4int,std::vector<G4AtomicShell*>,std::less<G4int> >::const_iterator pos;
254 pos = shellTable.find(Z);
256 if (pos!= shellTable.end()){
258 std::vector<G4AtomicShell*>
v = (*pos).second;
267 G4String msg =
"No deexcitation for Z=" + (
G4String(Z))+
". Energy Deposited Locally.";
282 std::map<G4int,std::vector<G4FluoTransition*>,std::less<G4int> >::const_iterator pos;
284 pos = transitionTable.find(Z);
286 if (pos!= transitionTable.end())
288 std::vector<G4FluoTransition*>
v = (*pos).second;
296 G4String msg =
"No deexcitation for Z=" + (
G4String(Z))+
". Energy Deposited Locally.";
321 std::map<G4int,std::vector<G4FluoTransition*>,std::less<G4int> >::iterator pos;
323 pos = transitionTable.find(Z);
325 if (pos!= transitionTable.end())
327 std::vector<G4FluoTransition*>
v = (*pos).second;
329 if (shellIndex < v.size())
335 for (
size_t j = 0; j<transProb.size(); j++)
337 totalRadTransProb = totalRadTransProb + transProb[j];
339 return totalRadTransProb;
344 G4Exception(
"G4AtomicTransitionManager::TotalRadiativeTransitionProbability()",
"de0002",
JustWarning,
"Energy Deposited Locally.");
353 G4String msg =
"No deexcitation for Z=" + (
G4String(Z))+
". Energy Deposited Locally.";
367 std::map<G4int,std::vector<G4FluoTransition*>,std::less<G4int> >::iterator pos;
369 pos = transitionTable.find(Z);
371 if (pos!= transitionTable.end()){
373 std::vector<G4FluoTransition*>
v = (*pos).second;
376 if (shellIndex<v.size()){
382 for(
size_t j = 0; j<transProb.size(); j++)
384 totalRadTransProb = totalRadTransProb + transProb[j];
387 if (totalRadTransProb > 1) {
388 G4Exception(
"G4AtomicTransitionManager::TotalNonRadiativeTransitionProbability()",
"de0003",
FatalException,
"Total probability mismatch");
391 G4double totalNonRadTransProb= (1 - totalRadTransProb);
393 return totalNonRadTransProb; }
397 G4Exception(
"G4AtomicTransitionManager::TotalNonRadiativeTransitionProbability()",
"de0002",
JustWarning,
"Energy Deposited Locally.");
406 G4String msg =
"No deexcitation for Z=" + (
G4String(Z))+
". Energy Deposited Locally.";
408 G4Exception(
"G4AtomicTransitionManager::TotalNonRadiativeTransitionProbability()",
"de0001",
JustWarning,msg);
G4double TotalNonRadiativeTransitionProbability(G4int Z, size_t shellIndex)
G4int NumberOfShells(G4int Z) const
G4double StartShellProb(G4int initIndex, G4int vacancyIndex) const
G4double TotalRadiativeTransitionProbability(G4int Z, size_t shellIndex)
const G4AugerTransition * ReachableAugerShell(G4int Z, G4int shellIndex) const
G4int NumberOfReachableShells(G4int Z) const
const G4DataVector & TransitionProbabilities() const
G4int ShellId(G4int Z, G4int shellIndex) const
void LoadData(const G4String &fileName)
G4GLOB_DLL std::ostream G4cout
G4double BindingEnergy(G4int Z, G4int shellIndex) const
G4int VacancyId(G4int vacancyIndex) const
G4int NumberOfReachableAugerShells(G4int Z) const
G4int StartShellId(G4int initIndex, G4int vacancyIndex) const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4double StartShellEnergy(G4int initIndex, G4int vacancyIndex) const
const G4FluoTransition * ReachableShell(G4int Z, size_t shellIndex) const
size_t NumberOfShells(G4int Z) const
size_t NumberOfTransitions(G4int vacancyIndex) const
~G4AtomicTransitionManager()
G4AtomicTransitionManager(G4int minZ=1, G4int maxZ=100, G4int limitInfTable=6, G4int limitSupTable=100)
G4AugerTransition * GetAugerTransition(G4int Z, G4int vacancyShellIndex)
size_t NumberOfVacancies(G4int Z) const
G4double bindingEnergy(G4int A, G4int Z)
static G4AtomicTransitionManager * Instance()
G4AtomicShell * Shell(G4int Z, size_t shellIndex) const