57 for (pos = 0 ; pos < 100; pos++)
59 numberOfVacancies.push_back(n);
116 return numberOfVacancies[
Z];
123 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[Z])
124 {
G4Exception(
"G4RDAugerData::VacancyId()",
"OutOfRange",
127 trans_Table::const_iterator element = augerTransitionTable.find(Z);
128 if (element == augerTransitionTable.end())
129 {
G4Exception(
"G4RDAugerData::VacancyId()",
"NoDataFound",
131 std::vector<G4RDAugerTransition> dataSet = (*element).second;
132 n = (
G4int) dataSet[vacancyIndex].FinalShellId();
146 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[Z])
147 {
G4Exception(
"G4RDAugerData::NumberOfTransitions()",
"OutOfRange",
150 trans_Table::const_iterator element = augerTransitionTable.find(Z);
151 if (element == augerTransitionTable.end())
152 {
G4Exception(
"G4RDAugerData::NumberOfTransitions()",
"NoDataFound",
154 std::vector<G4RDAugerTransition> dataSet = (*element).second;
155 n = (
G4int)dataSet[vacancyIndex].TransitionOriginatingShellIds()->size();
165 if (initIndex<0 || initIndex>=numberOfVacancies[Z])
166 {
G4Exception(
"G4RDAugerData::NumberOfAuger()",
"OutOfRange",
169 trans_Table::const_iterator element = augerTransitionTable.find(Z);
170 if (element == augerTransitionTable.end())
171 {
G4Exception(
"G4RDAugerData::NumberOfAuger()",
"NoDataFound",
173 std::vector<G4RDAugerTransition> dataSet = (*element).second;
174 const std::vector<G4int>* temp = dataSet[initIndex].AugerOriginatingShellIds(vacancyId);
183 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[Z])
184 {
G4Exception(
"G4RDAugerData::AugerShellId()",
"OutOfRange",
187 trans_Table::const_iterator element = augerTransitionTable.find(Z);
188 if (element == augerTransitionTable.end())
189 {
G4Exception(
"G4RDAugerData::AugerShellId()",
"NoDataFound",
191 std::vector<G4RDAugerTransition> dataSet = (*element).second;
192 n = dataSet[vacancyIndex].AugerOriginatingShellId(augerIndex,transId);
201 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[Z])
202 {
G4Exception(
"G4RDAugerData::StartShellId()",
"OutOfRange",
205 trans_Table::const_iterator element = augerTransitionTable.find(Z);
206 if (element == augerTransitionTable.end())
207 {
G4Exception(
"G4RDAugerData::StartShellId()",
"NoDataFound",
209 std::vector<G4RDAugerTransition> dataSet = (*element).second;
210 n = dataSet[vacancyIndex].TransitionOriginatingShellId(transitionShellIndex);
221 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[Z])
222 {
G4Exception(
"G4RDAugerData::StartShellEnergy()",
"OutOfRange",
225 trans_Table::const_iterator element = augerTransitionTable.find(Z);
226 if (element == augerTransitionTable.end())
227 {
G4Exception(
"G4RDAugerData::StartShellEnergy()",
"NoDataFound",
229 std::vector<G4RDAugerTransition> dataSet = (*element).second;
230 energy = dataSet[vacancyIndex].AugerTransitionEnergy(augerIndex,transitionId);
241 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[Z])
242 {
G4Exception(
"G4RDAugerData::StartShellProb()",
"OutOfRange",
245 trans_Table::const_iterator element = augerTransitionTable.find(Z);
246 if (element == augerTransitionTable.end())
247 {
G4Exception(
"G4RDAugerData::StartShellProb()",
"NoDataFound",
249 std::vector<G4RDAugerTransition> dataSet = (*element).second;
250 prob = dataSet[vacancyIndex].AugerTransitionProbability(augerIndex, transitionId);
262 std::ostringstream ost;
264 ost <<
"au-tr-pr-"<< Z <<
".dat";
267 ost <<
"au-tr-pr-"<<
".dat";
271 char* path = getenv(
"G4LEDATA");
274 G4String excep =
"G4LEDATA environment variable not set";
275 G4Exception(
"G4RDAugerData::LoadData()",
"InvalidSetup",
281 std::ifstream file(dirFile);
282 std::filebuf* lsdp = file.rdbuf();
284 if (! (lsdp->is_open()) )
286 G4String excep =
"Data file: " + dirFile +
" not found!";
287 G4Exception(
"G4RDAugerData::LoadData()",
"DataNotFound",
297 std::vector<G4int>* initIds =
new std::vector<G4int>;
298 std::vector<G4int>* newIds =
new std::vector<G4int>;
301 std::vector<G4RDAugerTransition> augerTransitionVector;
302 std::map<G4int,std::vector<G4int>,std::less<G4int> >* newIdMap =
303 new std::map<G4int,std::vector<G4int>,std::less<G4int> >;
304 std::map<G4int,G4DataVector,std::less<G4int> >* newEnergyMap =
305 new std::map<G4int,G4DataVector,std::less<G4int> >;
306 std::map<G4int,G4DataVector,std::less<G4int> >* newProbabilityMap =
307 new std::map<G4int,G4DataVector,std::less<G4int> >;
327 std::vector<G4int>::iterator vectorIndex = initIds->begin();
329 vacId = *vectorIndex;
335 std::vector<G4int> identifiers;
336 for (vectorIndex = initIds->begin()+1 ; vectorIndex != initIds->end(); ++vectorIndex){
338 identifiers.push_back(*vectorIndex);
341 vectorIndex = (initIds->end())-1;
343 G4int augerShellId = *(vectorIndex);
346 (*newIdMap)[augerShellId] = *newIds;
347 (*newEnergyMap)[augerShellId] = *transEnergies;
348 (*newProbabilityMap)[augerShellId] = *transProbabilities;
350 augerTransitionVector.push_back(
G4RDAugerTransition(vacId, identifiers, newIdMap, newEnergyMap, newProbabilityMap));
356 delete newProbabilityMap;
358 G4int n = initIds->size();
359 nInitShells.push_back(n);
360 numberOfVacancies[
Z]++;
363 delete transEnergies;
364 delete transProbabilities;
365 initIds =
new std::vector<G4int>;
366 newIds =
new std::vector<G4int>;
369 newIdMap =
new std::map<G4int,std::vector<G4int>,std::less<G4int> >;
370 newEnergyMap =
new std::map<G4int,G4DataVector,std::less<G4int> >;
371 newProbabilityMap =
new std::map<G4int,G4DataVector,std::less<G4int> >;
388 delete transEnergies;
389 delete transProbabilities;
392 delete newProbabilityMap;
397 if (k%nColumns == 3){
399 transProbabilities->push_back(a);
402 else if(k%nColumns == 2){
408 newIds->push_back(l);
413 else if (k%nColumns == 1)
417 if(initIds->size() == 0) {
422 initIds->push_back((
G4int)a);
432 if((
G4int)a != initIds->back()){
435 if((initIds->size()) == 1) {
436 initIds->push_back((
G4int)a);
441 G4int augerShellId = 0;
442 augerShellId = initIds->back();
444 (*newIdMap)[augerShellId] = *newIds;
445 (*newEnergyMap)[augerShellId] = *transEnergies;
446 (*newProbabilityMap)[augerShellId] = *transProbabilities;
448 delete transEnergies;
449 delete transProbabilities;
450 newIds =
new std::vector<G4int>;
453 initIds->push_back((
G4int)a);
461 else if (k%nColumns == 0)
466 transEnergies->push_back(e);
476 return augerTransitionVector;
492 for (
G4int m=0;
m<nMaterials;
m++) {
498 for (
size_t iEl=0; iEl<nElements; iEl++) {
499 G4Element* element = (*elementVector)[iEl];
502 activeZ.push_back(Z);
508 for (
G4int element = 6; element < 101; element++)
510 if(nMaterials == 0 || activeZ.
contains(element)) {
511 augerTransitionTable.insert(trans_Table::value_type(element,
LoadData(element)));
513 G4cout <<
"G4RDAugerData for Element no. " << element <<
" are loaded" <<
G4endl;
524 for (
G4int i = 0; i < numberOfVacancies[
Z]; i++)
526 G4cout <<
"---- TransitionData for the vacancy nb "
528 <<
" of the atomic number elemnt "
543 G4cout <<
" Auger Originatig Shell Id :"<< augerId <<
G4endl;
544 G4cout <<
" - Transition energy = " << e <<
" MeV "<<
G4endl;
548 G4cout <<
"-------------------------------------------------"
554 std::vector<G4RDAugerTransition>* dataSet = &augerTransitionTable[
Z];
555 std::vector<G4RDAugerTransition>::iterator vectorIndex = dataSet->begin() + vacancyShellIndex;
558 return augerTransition;
563 std::vector<G4RDAugerTransition>* dataSet = &augerTransitionTable[
Z];
G4double StartShellProb(G4int Z, G4int vacancyIndex, G4int transitionId, G4int augerIndex) const
std::vector< G4Element * > G4ElementVector
std::vector< ExP01TrackerHit * > a
G4double StartShellEnergy(G4int Z, G4int vacancyIndex, G4int transitionId, G4int augerIndex) const
G4int StartShellId(G4int Z, G4int initialVacancyIndex, G4int transitionShellIndex) const
static G4MaterialTable * GetMaterialTable()
std::vector< G4Material * > G4MaterialTable
size_t AugerShellId(G4int Z, G4int vacancyIndex, G4int transId, G4int augerIndex) const
const G4ElementVector * GetElementVector() const
std::vector< G4RDAugerTransition > * GetAugerTransitions(G4int Z)
std::vector< G4RDAugerTransition > LoadData(G4int Z)
G4GLOB_DLL std::ostream G4cout
static constexpr double m
size_t NumberOfTransitions(G4int Z, G4int vacancyIndex) const
G4int VacancyId(G4int Z, G4int vacancyIndex) const
static size_t GetNumberOfMaterials()
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4double energy(const ThreeVector &p, const G4double m)
G4RDAugerTransition * GetAugerTransition(G4int Z, G4int vacancyShellIndex)
size_t NumberOfAuger(G4int Z, G4int initIndex, G4int vacancyId) const
size_t NumberOfVacancies(G4int Z) const
static constexpr double MeV
size_t GetNumberOfElements() const
void BuildAugerTransitionTable()
G4bool contains(const G4double &) const
static const G4double pos