45 infTableLimit(limitInfTable),
46 supTableLimit(limitSupTable)
55 shellManager->
LoadData(
"/fluor/binding");
61 std::vector<G4RDAtomicShell*> vectorOfShells;
62 size_t shellIndex = 0;
65 for (shellIndex = 0; shellIndex<numberOfShells; shellIndex++)
72 vectorOfShells.push_back(shell);
76 shellTable[
Z] = vectorOfShells;
81 for (
G4int Znum= infTableLimit; Znum<=supTableLimit; Znum++)
83 std::vector<G4RDFluoTransition*> vectorOfTransitions;
86 size_t numberOfVacancies = fluoManager-> NumberOfVacancies();
88 for (
size_t vacancyIndex = 0; vacancyIndex<numberOfVacancies; vacancyIndex++)
91 std::vector<G4int> vectorOfIds;
97 for (
size_t origShellIndex = 0; origShellIndex < numberOfTransitions;
102 G4int originatingShellId = fluoManager->
StartShellId(origShellIndex,vacancyIndex);
104 vectorOfIds.push_back(originatingShellId);
107 vectorOfEnergies.push_back(transitionEnergy);
109 vectorOfProbabilities.push_back(transitionProbability);
112 vectorOfEnergies,vectorOfProbabilities);
113 vectorOfTransitions.push_back(transition);
116 transitionTable[Znum] = vectorOfTransitions;
129 std::map<G4int,std::vector<G4RDAtomicShell*>,std::less<G4int> >::iterator pos;
131 for (pos = shellTable.begin(); pos != shellTable.end(); pos++){
133 std::vector< G4RDAtomicShell*>vec = (*pos).second;
135 G4int vecSize=vec.size();
137 for (
G4int i=0; i< vecSize; i++){
144 std::map<G4int,std::vector<G4RDFluoTransition*>,std::less<G4int> >::iterator ppos;
146 for (ppos = transitionTable.begin(); ppos != transitionTable.end(); ppos++){
148 std::vector<G4RDFluoTransition*>vec = (*ppos).second;
150 G4int vecSize=vec.size();
152 for (
G4int i=0; i< vecSize; i++){
176 std::map<G4int,std::vector<G4RDAtomicShell*>,std::less<G4int> >::const_iterator pos;
178 pos = shellTable.find(Z);
180 if (pos!= shellTable.end())
182 std::vector<G4RDAtomicShell*>
v = (*pos).second;
183 if (shellIndex<v.size())
185 return(v[shellIndex]);
189 size_t lastShell = v.size();
190 G4cout <<
"G4RDAtomicTransitionManager::Shell - Z = "
191 << Z <<
", shellIndex = " << shellIndex
192 <<
" not found; number of shells = " << lastShell <<
G4endl;
196 return v[lastShell - 1];
206 G4Exception(
"G4RDAtomicTransitionManager::Shell()",
217 std::map<G4int,std::vector<G4RDFluoTransition*>,std::less<G4int> >::const_iterator pos;
218 pos = transitionTable.find(Z);
219 if (pos!= transitionTable.end())
221 std::vector<G4RDFluoTransition*>
v = (*pos).second;
222 if (shellIndex < v.size())
return(v[shellIndex]);
224 G4Exception(
"G4RDAtomicTransitionManager::ReachableShell()",
226 "Reachable shell not found!");
231 G4cout <<
"G4AtomicTransitionMagare warning: No fluorescence or Auger for Z=" << Z <<
G4endl;
243 return augerTransition;
251 std::map<G4int,std::vector<G4RDAtomicShell*>,std::less<G4int> >::const_iterator pos;
253 pos = shellTable.find(Z);
255 if (pos!= shellTable.end()){
257 std::vector<G4RDAtomicShell*>
v = (*pos).second;
263 G4cout <<
"G4AtomicTransitionMagare warning: No fluorescence or Auger for Z=" << Z <<
G4endl;
276 std::map<G4int,std::vector<G4RDFluoTransition*>,std::less<G4int> >::const_iterator pos;
278 pos = transitionTable.find(Z);
280 if (pos!= transitionTable.end())
282 std::vector<G4RDFluoTransition*>
v = (*pos).second;
287 G4cout <<
"G4AtomicTransitionMagare warning: No fluorescence or Auger for Z=" << Z <<
G4endl;
310 std::map<G4int,std::vector<G4RDFluoTransition*>,std::less<G4int> >::iterator pos;
312 pos = transitionTable.find(Z);
314 if (pos!= transitionTable.end())
316 std::vector<G4RDFluoTransition*>
v = (*pos).second;
318 if (shellIndex < v.size())
324 for (
size_t j = 0; j<transProb.size(); j++)
326 totalRadTransProb = totalRadTransProb + transProb[j];
328 return totalRadTransProb;
332 G4Exception(
"G4RDAtomicTransitionManager::TotalRadiativeTransitionProbability()",
339 G4cout <<
"G4AtomicTransitionMagare warning: No fluorescence or Auger for Z=" << Z <<
G4endl;
352 std::map<G4int,std::vector<G4RDFluoTransition*>,std::less<G4int> >::iterator pos;
354 pos = transitionTable.find(Z);
356 if (pos!= transitionTable.end()){
358 std::vector<G4RDFluoTransition*>
v = (*pos).second;
361 if (shellIndex<v.size()){
367 for(
size_t j = 0; j<transProb.size(); j++)
369 totalRadTransProb = totalRadTransProb + transProb[j];
372 G4double totalNonRadTransProb= (1 - totalRadTransProb);
374 return totalNonRadTransProb; }
377 G4Exception(
"G4RDAtomicTransitionManager::TotalNonRadiativeTransitionProbability()",
383 G4cout <<
"G4AtomicTransitionMagare warning: No fluorescence or Auger for Z=" << Z <<
G4endl;
const G4RDFluoTransition * ReachableShell(G4int Z, size_t shellIndex) const
G4double TotalRadiativeTransitionProbability(G4int Z, size_t shellIndex)
size_t NumberOfTransitions(G4int vacancyIndex) const
const G4DataVector & TransitionProbabilities() const
G4int NumberOfReachableAugerShells(G4int Z) const
G4double BindingEnergy(G4int Z, G4int shellIndex) const
~G4RDAtomicTransitionManager()
G4int NumberOfReachableShells(G4int Z) const
size_t NumberOfShells(G4int Z) const
static G4RDAtomicTransitionManager * Instance()
void LoadData(const G4String &fileName)
G4GLOB_DLL std::ostream G4cout
G4double TotalNonRadiativeTransitionProbability(G4int Z, size_t shellIndex)
G4int VacancyId(G4int vacancyIndex) const
G4int ShellId(G4int Z, G4int shellIndex) const
const G4RDAugerTransition * ReachableAugerShell(G4int Z, G4int shellIndex) const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4int NumberOfShells(G4int Z) const
G4double StartShellEnergy(G4int initIndex, G4int vacancyIndex) const
G4RDAugerTransition * GetAugerTransition(G4int Z, G4int vacancyShellIndex)
G4RDAtomicShell * Shell(G4int Z, size_t shellIndex) const
size_t NumberOfVacancies(G4int Z) const
G4RDAtomicTransitionManager(G4int minZ=1, G4int maxZ=100, G4int limitInfTable=6, G4int limitSupTable=100)
G4double StartShellProb(G4int initIndex, G4int vacancyIndex) const
G4double bindingEnergy(G4int A, G4int Z)
G4int StartShellId(G4int initIndex, G4int vacancyIndex) const