52 numberOfVacancies.resize(105, 0);
60 return numberOfVacancies[
Z];
68 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[
Z])
73 trans_Table::const_iterator element = augerTransitionTable.find(
Z);
74 if (element == augerTransitionTable.end()) {
78 std::vector<G4AugerTransition> dataSet = (*element).second;
79 n = (
G4int) dataSet[vacancyIndex].FinalShellId();
90 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[
Z])
96 trans_Table::const_iterator element = augerTransitionTable.find(
Z);
97 if (element == augerTransitionTable.end())
102 std::vector<G4AugerTransition> dataSet = (*element).second;
103 n = dataSet[vacancyIndex].TransitionOriginatingShellIds()->size();
113 if (initIndex<0 || initIndex>=numberOfVacancies[
Z])
119 trans_Table::const_iterator element = augerTransitionTable.find(
Z);
120 if (element == augerTransitionTable.end()) {
124 std::vector<G4AugerTransition> dataSet = (*element).second;
125 const std::vector<G4int>* temp =
126 dataSet[initIndex].AugerOriginatingShellIds(vacancyId);
137 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[
Z])
143 trans_Table::const_iterator element = augerTransitionTable.find(
Z);
144 if (element == augerTransitionTable.end()) {
148 std::vector<G4AugerTransition> dataSet = (*element).second;
149 n = dataSet[vacancyIndex].AugerOriginatingShellId(augerIndex,transId);
160 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[
Z]) {
165 trans_Table::const_iterator element = augerTransitionTable.find(
Z);
166 if (element == augerTransitionTable.end()) {
170 std::vector<G4AugerTransition> dataSet = (*element).second;
171 n = dataSet[vacancyIndex].TransitionOriginatingShellId(transitionShellIndex);
182 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[
Z])
188 trans_Table::const_iterator element = augerTransitionTable.find(
Z);
189 if (element == augerTransitionTable.end()) {
193 std::vector<G4AugerTransition> dataSet = (*element).second;
194 energy = dataSet[vacancyIndex].AugerTransitionEnergy(augerIndex,transitionId);
206 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[
Z])
212 trans_Table::const_iterator element = augerTransitionTable.find(
Z);
213 if (element == augerTransitionTable.end()) {
217 std::vector<G4AugerTransition> dataSet = (*element).second;
218 prob = dataSet[vacancyIndex].AugerTransitionProbability(augerIndex, transitionId);
228 std::ostringstream ost;
230 ost <<
"au-tr-pr-"<<
Z <<
".dat";
233 ost <<
"au-tr-pr-"<<
".dat";
240 G4String excep =
"G4AugerData::LoadData";
242 std::vector<G4AugerTransition> a;
247 G4String dirFile = pathString +
"/auger/" + name;
248 std::ifstream file(dirFile);
249 std::filebuf* lsdp = file.rdbuf();
251 if (! (lsdp->is_open()) )
253 G4String excep =
"G4AugerData::LoadData";
263 std::vector<G4int>* initIds =
new std::vector<G4int>;
264 std::vector<G4int>* newIds =
new std::vector<G4int>;
267 std::vector<G4AugerTransition> augerTransitionVector;
268 std::map<G4int,std::vector<G4int>,std::less<G4int> >* newIdMap =
269 new std::map<G4int,std::vector<G4int>,std::less<G4int> >;
270 std::map<G4int,G4DataVector,std::less<G4int> >* newEnergyMap =
271 new std::map<G4int,G4DataVector,std::less<G4int> >;
272 std::map<G4int,G4DataVector,std::less<G4int> >* newProbabilityMap =
273 new std::map<G4int,G4DataVector,std::less<G4int> >;
283 std::vector<G4int>::iterator vectorIndex = initIds->begin();
285 vacId = *vectorIndex;
286 std::vector<G4int> identifiers;
287 for (vectorIndex = initIds->begin()+1 ; vectorIndex != initIds->end(); ++vectorIndex){
288 identifiers.push_back(*vectorIndex);
290 vectorIndex = (initIds->end())-1;
291 G4int augerShellId = *(vectorIndex);
293 (*newIdMap)[augerShellId] = *newIds;
294 (*newEnergyMap)[augerShellId] = *transEnergies;
295 (*newProbabilityMap)[augerShellId] = *transProbabilities;
298 newIdMap, newEnergyMap, newProbabilityMap));
302 delete newProbabilityMap;
305 nInitShells.push_back(n);
306 numberOfVacancies[
Z]++;
309 delete transEnergies;
310 delete transProbabilities;
311 initIds =
new std::vector<G4int>;
312 newIds =
new std::vector<G4int>;
316 new std::map<G4int,std::vector<G4int>,std::less<G4int> >;
317 newEnergyMap =
new std::map<G4int,G4DataVector,std::less<G4int> >;
319 new std::map<G4int,G4DataVector,std::less<G4int> >;
322 if (sLocal == nColumns)
330 if (k%nColumns == 3){
332 transProbabilities->push_back(a);
335 else if(k%nColumns == 2){
338 newIds->push_back(l);
341 else if (k%nColumns == 1)
344 if(initIds->size() == 0) {
347 initIds->push_back((
G4int)a);
355 if((
G4int)a != initIds->back()){
356 if((initIds->size()) == 1) {
357 initIds->push_back((
G4int)a);
362 G4int augerShellId = 0;
363 augerShellId = initIds->back();
365 (*newIdMap)[augerShellId] = *newIds;
366 (*newEnergyMap)[augerShellId] = *transEnergies;
367 (*newProbabilityMap)[augerShellId] = *transProbabilities;
369 delete transEnergies;
370 delete transProbabilities;
371 newIds =
new std::vector<G4int>;
374 initIds->push_back((
G4int)a);
380 else if (k%nColumns == 0)
383 transEnergies->push_back(e);
392 delete transEnergies;
393 delete transProbabilities;
396 delete newProbabilityMap;
397 return augerTransitionVector;
404 for (
G4int element = 6; element < 105; ++element) {
405 augerTransitionTable.insert(trans_Table::value_type(element,
LoadData(element)));
413 for (
G4int i = 0; i < numberOfVacancies[
Z]; ++i)
415 G4cout <<
"---- TransitionData for the vacancy nb "
417 <<
" of the atomic number elemnt "
431 G4cout <<
" Auger Originatig Shell Id :"<< augerId <<
G4endl;
432 G4cout <<
" - Transition energy = " << e <<
" MeV "<<
G4endl;
436 G4cout <<
"-------------------------------------------------"
446 std::vector<G4AugerTransition>* dataSet = &augerTransitionTable[
Z];
447 std::vector<G4AugerTransition>::iterator vectorIndex =
448 dataSet->begin() + vacancyShellIndex;
451 return augerTransition;
458 std::vector<G4AugerTransition>* dataSet = &augerTransitionTable[
Z];
const char * G4FindDataDir(const char *)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4GLOB_DLL std::ostream G4cout
void BuildAugerTransitionTable()
size_t AugerShellId(G4int Z, G4int vacancyIndex, G4int transId, G4int augerIndex) const
std::vector< G4AugerTransition > LoadData(G4int Z)
size_t NumberOfVacancies(G4int Z) const
std::vector< G4AugerTransition > * GetAugerTransitions(G4int Z)
Given the atomic number returns a vector of possible AugerTransition objects.
size_t NumberOfTransitions(G4int Z, G4int vacancyIndex) const
G4int StartShellId(G4int Z, G4int initialVacancyIndex, G4int transitionShellIndex) const
size_t NumberOfAuger(G4int Z, G4int initIndex, G4int vacancyId) const
G4AugerTransition * GetAugerTransition(G4int Z, G4int vacancyShellIndex)
G4double StartShellProb(G4int Z, G4int vacancyIndex, G4int transitionId, G4int augerIndex) const
G4double StartShellEnergy(G4int Z, G4int vacancyIndex, G4int transitionId, G4int augerIndex) const
G4int VacancyId(G4int Z, G4int vacancyIndex) const
Given the index of the vacancy (and the atomic number Z) returns its identity.