45 infTableLimit(limitInfTable),
46 supTableLimit(limitSupTable)
55 shellManager->
LoadData(
"/fluor/binding");
59 for (
G4int Z = zMin; Z<= zMax; Z++)
61 std::vector<G4AtomicShell*> 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<G4FluoTransition*> 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;
129std::map<G4int,std::vector<G4AtomicShell*>,std::less<G4int> >::iterator pos;
131 for (pos = shellTable.begin(); pos != shellTable.end(); pos++){
133 std::vector< G4AtomicShell*>vec = (*pos).second;
135 G4int vecSize=vec.size();
137 for (
G4int i=0; i< vecSize; i++){
144 std::map<G4int,std::vector<G4FluoTransition*>,std::less<G4int> >::iterator ppos;
146 for (ppos = transitionTable.begin(); ppos != transitionTable.end(); ppos++){
148 std::vector<G4FluoTransition*>vec = (*ppos).second;
150 G4int vecSize=vec.size();
152 for (
G4int i=0; i< vecSize; i++){
176 std::map<G4int,std::vector<G4AtomicShell*>,std::less<G4int> >::const_iterator pos;
178 pos = shellTable.find(Z);
180 if (pos!= shellTable.end())
182 std::vector<G4AtomicShell*> v = (*pos).second;
183 if (shellIndex<v.size())
185 return(v[shellIndex]);
189 size_t lastShell = v.size();
190 G4cout <<
"G4AtomicTransitionManager::Shell - Z = "
191 << Z <<
", shellIndex = " << shellIndex
192 <<
" not found; number of shells = " << lastShell <<
G4endl;
196 return v[lastShell - 1];
216 std::map<G4int,std::vector<G4FluoTransition*>,std::less<G4int> >::const_iterator pos;
217 pos = transitionTable.find(Z);
218 if (pos!= transitionTable.end())
220 std::vector<G4FluoTransition*> v = (*pos).second;
221 if (shellIndex < v.size())
return(v[shellIndex]);
223 G4Exception(
"G4AtomicTransitionManager::ReachebleShell()",
"de0002",
JustWarning,
"Energy Deposited Locally.");
233 G4String msg =
"No deexcitation for Z=" + (
G4String(Z))+
". Energy Deposited Locally.";
245 return augerTransition;
253std::map<G4int,std::vector<G4AtomicShell*>,std::less<G4int> >::const_iterator pos;
255 pos = shellTable.find(Z);
257 if (pos!= shellTable.end()){
259 std::vector<G4AtomicShell*> v = (*pos).second;
268 G4String msg =
"No deexcitation for Z=" + (
G4String(Z))+
". Energy Deposited Locally.";
283std::map<G4int,std::vector<G4FluoTransition*>,std::less<G4int> >::const_iterator pos;
285 pos = transitionTable.find(Z);
287 if (pos!= transitionTable.end())
289 std::vector<G4FluoTransition*> v = (*pos).second;
297 G4String msg =
"No deexcitation for Z=" + (
G4String(Z))+
". Energy Deposited Locally.";
322std::map<G4int,std::vector<G4FluoTransition*>,std::less<G4int> >::iterator pos;
324 pos = transitionTable.find(Z);
326 if (pos!= transitionTable.end())
328 std::vector<G4FluoTransition*> v = (*pos).second;
330 if (shellIndex < v.size())
336 for (
size_t j = 0; j<transProb.size(); j++)
338 totalRadTransProb = totalRadTransProb + transProb[j];
340 return totalRadTransProb;
345 G4Exception(
"G4AtomicTransitionManager::TotalRadiativeTransitionProbability()",
"de0002",
JustWarning,
"Energy Deposited Locally.");
354 G4String msg =
"No deexcitation for Z=" + (
G4String(Z))+
". Energy Deposited Locally.";
368 std::map<G4int,std::vector<G4FluoTransition*>,std::less<G4int> >::iterator pos;
370 pos = transitionTable.find(Z);
372 if (pos!= transitionTable.end()){
374 std::vector<G4FluoTransition*> v = (*pos).second;
377 if (shellIndex<v.size()){
383 for(
size_t j = 0; j<transProb.size(); j++)
385 totalRadTransProb = totalRadTransProb + transProb[j];
388 if (totalRadTransProb > 1) {
389 G4Exception(
"G4AtomicTransitionManager::TotalNonRadiativeTransitionProbability()",
"de0003",
FatalException,
"Total probability mismatch");
392 G4double totalNonRadTransProb= (1 - totalRadTransProb);
394 return totalNonRadTransProb; }
398G4Exception(
"G4AtomicTransitionManager::TotalNonRadiativeTransitionProbability()",
"de0002",
JustWarning,
"Energy Deposited Locally.");
407 G4String msg =
"No deexcitation for Z=" + (
G4String(Z))+
". Energy Deposited Locally.";
409 G4Exception(
"G4AtomicTransitionManager::TotalNonRadiativeTransitionProbability()",
"de0001",
JustWarning,msg);
G4DLLIMPORT std::ostream G4cout
G4int NumberOfReachableShells(G4int Z) const
G4double TotalRadiativeTransitionProbability(G4int Z, size_t shellIndex)
G4double TotalNonRadiativeTransitionProbability(G4int Z, size_t shellIndex)
const G4AugerTransition * ReachableAugerShell(G4int Z, G4int shellIndex) const
G4AtomicShell * Shell(G4int Z, size_t shellIndex) const
const G4FluoTransition * ReachableShell(G4int Z, size_t shellIndex) const
G4int NumberOfShells(G4int Z) const
static G4AtomicTransitionManager * Instance()
G4AtomicTransitionManager(G4int minZ=1, G4int maxZ=100, G4int limitInfTable=6, G4int limitSupTable=100)
~G4AtomicTransitionManager()
G4int NumberOfReachableAugerShells(G4int Z) const
G4AugerTransition * GetAugerTransition(G4int Z, G4int vacancyShellIndex)
size_t NumberOfVacancies(G4int Z) const
G4double StartShellEnergy(G4int initIndex, G4int vacancyIndex) const
size_t NumberOfTransitions(G4int vacancyIndex) const
G4int VacancyId(G4int vacancyIndex) const
G4int StartShellId(G4int initIndex, G4int vacancyIndex) const
G4double StartShellProb(G4int initIndex, G4int vacancyIndex) const
const G4DataVector & TransitionProbabilities() const
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)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)