G4AugerData Class Reference

#include <G4AugerData.hh>


Public Member Functions

 G4AugerData ()
 ~G4AugerData ()
size_t NumberOfVacancies (G4int Z) const
G4int VacancyId (G4int Z, G4int vacancyIndex) const
size_t NumberOfTransitions (G4int Z, G4int vacancyIndex) const
G4int StartShellId (G4int Z, G4int initialVacancyIndex, G4int transitionShellIndex) const
G4double StartShellEnergy (G4int Z, G4int vacancyIndex, G4int transitionId, G4int augerIndex) const
G4double StartShellProb (G4int Z, G4int vacancyIndex, G4int transitionId, G4int augerIndex) const
size_t NumberOfAuger (G4int Z, G4int initIndex, G4int vacancyId) const
size_t AugerShellId (G4int Z, G4int vacancyIndex, G4int transId, G4int augerIndex) const
std::vector< G4AugerTransitionLoadData (G4int Z)
void BuildAugerTransitionTable ()
void PrintData (G4int Z)
G4AugerTransitionGetAugerTransition (G4int Z, G4int vacancyShellIndex)
std::vector< G4AugerTransition > * GetAugerTransitions (G4int Z)


Detailed Description

Definition at line 55 of file G4AugerData.hh.


Constructor & Destructor Documentation

G4AugerData::G4AugerData (  ) 

Definition at line 50 of file G4AugerData.cc.

References BuildAugerTransitionTable(), and CLHEP::detail::n.

00051 {
00052 
00053   G4int n = 0;
00054   G4int pos = 0;
00055 
00056     for (pos = 0 ; pos < 100; pos++) 
00057       {
00058         numberOfVacancies.push_back(n);
00059       }
00060 
00061   BuildAugerTransitionTable(); 
00062 
00063 
00064 }

G4AugerData::~G4AugerData (  ) 

Definition at line 66 of file G4AugerData.cc.

00067 { 
00068   /*
00069   std::map<G4int,std::vector<G4AugerTransition>,std::less<G4int> >::iterator pos;
00070 
00071   for (pos = augerTransitionTable.begin(); pos != augerTransitionTable.end(); pos++)
00072     {
00073       std::vector<G4AugerTransition> dataSet = (*pos).second;
00074       delete dataSet;
00075     }
00076   for (pos = energyMap.begin(); pos != energyMap.end(); pos++)
00077     {
00078       std::map<G4Int,G4DataVector*,std::less<G4int>>* dataMap = (*pos).second;
00079       for (pos2 = newIdProbabilityMap.begin(); pos2 != idMap.end(); pos2++)
00080         {
00081           G4DataVector* dataSet = (*pos2).second;
00082           delete dataSet;
00083         }
00084     }
00085   for (pos = probabilityMap.begin(); pos != probabilityMap.end(); pos++)
00086     {
00087       std::map<G4Int,G4DataVector*,std::less<G4int>>* dataMap = (*pos).second;
00088       for (pos2 = newIdProbabilityMap.begin(); pos2 != idMap.end(); pos2++)
00089         {
00090           G4DataVector* dataSet = (*pos2).second;
00091           delete dataSet;
00092         }
00093     }
00094   for (pos2 = newIdMap.begin(); pos2 != idMap.end(); pos2++)
00095     {
00096       G4DataVector* dataSet = (*pos2).second;
00097       delete dataSet;
00098     }
00099   for (pos2 = newIdEnergyMap.begin(); pos2 != idMap.end(); pos2++)
00100     {
00101       G4DataVector* dataSet = (*pos2).second;
00102       delete dataSet;
00103     }
00104   for (pos2 = newIdProbabilityMap.begin(); pos2 != idMap.end(); pos2++)
00105     {
00106       G4DataVector* dataSet = (*pos2).second;
00107       delete dataSet;
00108     }
00109   */
00110 
00111 }


Member Function Documentation

size_t G4AugerData::AugerShellId ( G4int  Z,
G4int  vacancyIndex,
G4int  transId,
G4int  augerIndex 
) const

Definition at line 186 of file G4AugerData.cc.

References FatalErrorInArgument, G4Exception(), and CLHEP::detail::n.

Referenced by PrintData().

00187 {
00188   size_t n = 0;  
00189   if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[Z])
00190     {
00191       G4Exception("G4AugerData::VacancyId()","de0002", FatalErrorInArgument,"");
00192       return 0;
00193     }
00194   else {
00195     trans_Table::const_iterator element = augerTransitionTable.find(Z);
00196     if (element == augerTransitionTable.end()) {
00197       G4Exception("G4AugerData::VacancyId()","de0004", FatalErrorInArgument,  "Check element");
00198       return 0;
00199     }
00200     std::vector<G4AugerTransition> dataSet = (*element).second;
00201     n = dataSet[vacancyIndex].AugerOriginatingShellId(augerIndex,transId);
00202   }
00203   return n;
00204 }

void G4AugerData::BuildAugerTransitionTable (  ) 

Definition at line 508 of file G4AugerData.cc.

References G4DataVector::contains(), G4Material::GetMaterialTable(), G4Material::GetNumberOfMaterials(), and LoadData().

Referenced by G4AugerData().

00509 {
00510 
00511   //  trans_Table::iterator pos = augerTransitionTable.begin();
00512 
00513   const G4MaterialTable* materialTable = G4Material::GetMaterialTable();
00514 
00515   G4int nMaterials = G4Material::GetNumberOfMaterials();
00516 
00517   G4DataVector activeZ;
00518   activeZ.clear();
00519   
00520   for (G4int mLocal=0; mLocal<nMaterials; mLocal++) {
00521 
00522     const G4Material* material= (*materialTable)[mLocal];        
00523     const G4ElementVector* elementVector = material->GetElementVector();
00524     const size_t nElements = material->GetNumberOfElements();
00525       
00526     for (size_t iEl=0; iEl<nElements; iEl++) {
00527       G4Element* element = (*elementVector)[iEl];
00528       G4double Z = element->GetZ();
00529       if (!(activeZ.contains(Z))) {
00530         activeZ.push_back(Z);
00531       }
00532     }
00533   }
00534 
00535 
00536   for (G4int element = 6; element < 100; element++)
00537     { 
00538       //      if(nMaterials == 0 || activeZ.contains(element)) {
00539       augerTransitionTable.insert(trans_Table::value_type(element,LoadData(element)));
00540       //        G4cout << "G4AugerData for Element no. " << element << " are loaded" << G4endl;
00541       // G4cout << "G4AugerData for Element no. " << element << " are loaded" << G4endl;
00542       //G4cout << "AugerTransitionTable complete"<< G4endl;
00543     }
00544 }

G4AugerTransition * G4AugerData::GetAugerTransition ( G4int  Z,
G4int  vacancyShellIndex 
)

Definition at line 577 of file G4AugerData.cc.

Referenced by G4AtomicTransitionManager::ReachableAugerShell().

00578     {
00579       std::vector<G4AugerTransition>* dataSet = &augerTransitionTable[Z];
00580       std::vector<G4AugerTransition>::iterator vectorIndex = dataSet->begin() + vacancyShellIndex;
00581 
00582       G4AugerTransition* augerTransition = &(*vectorIndex);
00583       return augerTransition;
00584     }

std::vector< G4AugerTransition > * G4AugerData::GetAugerTransitions ( G4int  Z  ) 

Definition at line 586 of file G4AugerData.cc.

00587   {
00588     std::vector<G4AugerTransition>* dataSet = &augerTransitionTable[Z];
00589     return dataSet;
00590   }

std::vector< G4AugerTransition > G4AugerData::LoadData ( G4int  Z  ) 

Definition at line 276 of file G4AugerData.cc.

References FatalException, G4Exception(), and CLHEP::detail::n.

Referenced by BuildAugerTransitionTable().

00277 { 
00278   // Build the complete string identifying the file with the data set
00279 
00280     std::ostringstream ost;
00281     if(Z != 0){
00282       ost << "au-tr-pr-"<< Z << ".dat";
00283     }
00284     else{
00285       ost << "au-tr-pr-"<<".dat"; 
00286     }
00287     G4String name(ost.str());
00288   
00289     char* path = getenv("G4LEDATA");
00290     if (!path)
00291       { 
00292         G4String excep = "G4AugerData::LoadData";
00293         G4Exception(excep,"em0006", FatalException,"" );
00294         std::vector<G4AugerTransition> a;
00295         return a;
00296       }
00297   
00298     G4String pathString(path);
00299     G4String dirFile = pathString + "/auger/" + name;
00300     std::ifstream file(dirFile);
00301     std::filebuf* lsdp = file.rdbuf();
00302   
00303     if (! (lsdp->is_open()) )
00304       {
00305         G4String excep = "G4AugerData::LoadData";
00306         G4String msg = "Missing" + dirFile;
00307         G4Exception(excep,"em0003", FatalException, msg);
00308       }
00309  
00310 
00311     G4double a = 0;
00312     G4int k = 1;
00313     G4int sLocal = 0;
00314   
00315     G4int vacId = 0;
00316     std::vector<G4int>* initIds = new std::vector<G4int>;
00317     std::vector<G4int>* newIds = new std::vector<G4int>;
00318     G4DataVector* transEnergies = new G4DataVector;
00319     G4DataVector* transProbabilities = new G4DataVector;
00320     std::vector<G4AugerTransition> augerTransitionVector;
00321     std::map<G4int,std::vector<G4int>,std::less<G4int> >* newIdMap = 
00322       new std::map<G4int,std::vector<G4int>,std::less<G4int> >;
00323     std::map<G4int,G4DataVector,std::less<G4int> >* newEnergyMap =
00324       new std::map<G4int,G4DataVector,std::less<G4int> >;
00325     std::map<G4int,G4DataVector,std::less<G4int> >* newProbabilityMap = 
00326       new std::map<G4int,G4DataVector,std::less<G4int> >;
00327 
00328   
00329     do {
00330       file >> a;
00331 
00332 
00333       G4int nColumns = 4;
00334 
00335       if (a == -1)
00336         {
00337 
00338 
00339 
00340           if (sLocal == 0)
00341             {
00342               // End of a shell data set
00343             
00344             
00345             
00346               std::vector<G4int>::iterator vectorIndex = initIds->begin();
00347 
00348               vacId = *vectorIndex;
00349             
00350               //initIds->erase(vectorIndex);
00351             
00352 
00353 
00354               std::vector<G4int> identifiers;
00355               for (vectorIndex = initIds->begin()+1 ; vectorIndex != initIds->end(); ++vectorIndex){
00356 
00357                 identifiers.push_back(*vectorIndex);
00358               }
00359 
00360               vectorIndex = (initIds->end())-1;
00361 
00362               G4int augerShellId = *(vectorIndex);
00363             
00364             
00365               (*newIdMap)[augerShellId] = *newIds;
00366               (*newEnergyMap)[augerShellId] = *transEnergies;
00367               (*newProbabilityMap)[augerShellId] = *transProbabilities;
00368 
00369               augerTransitionVector.push_back(G4AugerTransition(vacId, identifiers, newIdMap, newEnergyMap, newProbabilityMap));
00370 
00371               // Now deleting all the variables I used, and creating new ones for the next shell
00372 
00373               delete newIdMap;
00374               delete newEnergyMap;
00375               delete newProbabilityMap;
00376             
00377               G4int n = initIds->size();            
00378               nInitShells.push_back(n);
00379               numberOfVacancies[Z]++;
00380               delete initIds;
00381               delete newIds;
00382               delete transEnergies;         
00383               delete transProbabilities;
00384               initIds = new std::vector<G4int>;
00385               newIds = new std::vector<G4int>;
00386               transEnergies = new G4DataVector;
00387               transProbabilities = new G4DataVector;
00388               newIdMap = new std::map<G4int,std::vector<G4int>,std::less<G4int> >;
00389               newEnergyMap = new std::map<G4int,G4DataVector,std::less<G4int> >;
00390               newProbabilityMap = new std::map<G4int,G4DataVector,std::less<G4int> >;   
00391             
00392 
00393 
00394             }      
00395           sLocal++;
00396           if (sLocal == nColumns)
00397             {
00398               sLocal = 0;
00399             }
00400         }
00401       // moved to the end in order to avoid leaks
00402       /*
00403       else if (a == -2)
00404         {
00405           // End of file; delete the empty vectors created 
00406           //when encountering the last -1 -1 row
00407           delete initIds;
00408           delete newIds;
00409           delete transEnergies;
00410           delete transProbabilities;
00411           delete newIdMap ;
00412           delete newEnergyMap;
00413           delete newProbabilityMap;     
00414           }*/ 
00415       else
00416         {
00417         
00418           if (k%nColumns == 3){
00419             // 3rd column is the transition probabilities
00420             transProbabilities->push_back(a);
00421 
00422             k++;}
00423           else if(k%nColumns == 2){      
00424             // 2nd column is new auger vacancy
00425 
00426             // 2nd column is new auger vacancy
00427 
00428             G4int l = (G4int)a;
00429             newIds->push_back(l);
00430 
00431 
00432             k++;
00433           }
00434           else if (k%nColumns == 1)
00435             {
00436               // 1st column is shell id
00437             
00438               if(initIds->size() == 0) {
00439               
00440                 // if this is the first data of the shell, all the colums are equal 
00441                 // to the shell Id; so we skip the next colums ang go to the next row
00442               
00443                 initIds->push_back((G4int)a);
00444                 // first line of initIds is the original shell of the vacancy
00445                 file >> a;
00446                 file >> a;
00447                 file >> a;
00448                 k = k+3;
00449               }
00450               else {
00451 
00452                 //            std::vector<G4int>::iterator vectorIndex = (initIds->end())-1;
00453                 if((G4int)a != initIds->back()){
00454 
00455 
00456                   if((initIds->size()) == 1) { 
00457                     initIds->push_back((G4int)a);
00458                   }  
00459                   else {
00460 
00461 
00462                     G4int augerShellId = 0;
00463                     augerShellId = initIds->back();
00464                   
00465                     (*newIdMap)[augerShellId] = *newIds;
00466                     (*newEnergyMap)[augerShellId] = *transEnergies;
00467                     (*newProbabilityMap)[augerShellId] = *transProbabilities;
00468                     delete newIds;
00469                     delete transEnergies;
00470                     delete transProbabilities;
00471                     newIds = new std::vector<G4int>;
00472                     transEnergies = new G4DataVector;
00473                     transProbabilities = new G4DataVector;
00474                     initIds->push_back((G4int)a);
00475                   }
00476                 }
00477               }
00478             
00479               k++;    
00480            
00481             }
00482           else if (k%nColumns == 0)
00483 
00484             {//fourth column is transition energies
00485               G4double e = a * MeV; 
00486   
00487               transEnergies->push_back(e);
00488               k=1;
00489 
00490             }
00491         }
00492     }
00493 
00494 
00495     while (a != -2); // end of file
00496     file.close();
00497     delete initIds;
00498     delete newIds;
00499     delete transEnergies;
00500     delete transProbabilities;
00501     delete newIdMap ;
00502     delete newEnergyMap;
00503     delete newProbabilityMap;
00504     return augerTransitionVector;
00505 
00506 }

size_t G4AugerData::NumberOfAuger ( G4int  Z,
G4int  initIndex,
G4int  vacancyId 
) const

Definition at line 165 of file G4AugerData.cc.

References FatalErrorInArgument, G4Exception(), and CLHEP::detail::n.

Referenced by PrintData().

00166 {
00167   size_t n = 0;
00168   if (initIndex<0 || initIndex>=numberOfVacancies[Z])
00169     {
00170       G4Exception("G4AugerData::VacancyId()","de0002", FatalErrorInArgument,"");
00171       return 0;
00172     }
00173   else {
00174     trans_Table::const_iterator element = augerTransitionTable.find(Z);
00175     if (element == augerTransitionTable.end()) {
00176       G4Exception("G4AugerData::VacancyId()","de0004", FatalErrorInArgument,  "Check element");
00177       return 0;
00178     }
00179     std::vector<G4AugerTransition> dataSet = (*element).second;
00180     const std::vector<G4int>* temp =  dataSet[initIndex].AugerOriginatingShellIds(vacancyId);
00181     n = temp->size();
00182   }
00183   return n;
00184 }

size_t G4AugerData::NumberOfTransitions ( G4int  Z,
G4int  vacancyIndex 
) const

Definition at line 142 of file G4AugerData.cc.

References FatalErrorInArgument, G4Exception(), JustWarning, and CLHEP::detail::n.

Referenced by PrintData().

00143 {
00144   G4int n = 0;
00145   if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[Z])
00146     {
00147       G4Exception("G4AugerData::VacancyId()","de0002", JustWarning, "Energy deposited locally");
00148       return 0;
00149     }
00150   else {
00151     trans_Table::const_iterator element = augerTransitionTable.find(Z);
00152     if (element == augerTransitionTable.end()) 
00153       {
00154         G4Exception("G4AugerData::VacancyId()","de0004", FatalErrorInArgument,  "Check element");
00155         return 0;
00156       }
00157     std::vector<G4AugerTransition> dataSet = (*element).second;
00158     n = (G4int)dataSet[vacancyIndex].TransitionOriginatingShellIds()->size();
00159   }
00160  return  n;
00161 }

size_t G4AugerData::NumberOfVacancies ( G4int  Z  )  const

Definition at line 113 of file G4AugerData.cc.

Referenced by G4AtomicTransitionManager::NumberOfReachableAugerShells().

00114 {
00115   return numberOfVacancies[Z];
00116 }

void G4AugerData::PrintData ( G4int  Z  ) 

Definition at line 546 of file G4AugerData.cc.

References AugerShellId(), G4cout, G4endl, NumberOfAuger(), NumberOfTransitions(), StartShellEnergy(), StartShellId(), and StartShellProb().

00547 {
00548   
00549   for (G4int i = 0; i < numberOfVacancies[Z]; i++)
00550     {
00551       G4cout << "---- TransitionData for the vacancy nb "
00552              <<i
00553              <<" of the atomic number elemnt " 
00554              << Z
00555              <<"----- "
00556              <<G4endl;
00557       
00558       for (size_t k = 0; k<=NumberOfTransitions(Z,i); k++)
00559         { 
00560           G4int id = StartShellId(Z,i,k);
00561           
00562           for (size_t a = 0; a <= NumberOfAuger(Z,i,id); a++) {
00563             
00564             G4double e = StartShellEnergy(Z,i,id,a)/MeV;
00565             G4double p = StartShellProb(Z,i,id,a);
00566             G4int augerId = AugerShellId(Z, i, id, a);
00567             G4cout << k <<") Shell id: " << id <<G4endl;
00568             G4cout << "    Auger Originatig Shell Id :"<< augerId <<G4endl;
00569             G4cout << " - Transition energy = " << e << " MeV "<<G4endl;
00570             G4cout   << " - Transition probability = " << p <<G4endl;
00571           }
00572         }
00573       G4cout << "-------------------------------------------------" 
00574              << G4endl;
00575     }
00576 }

G4double G4AugerData::StartShellEnergy ( G4int  Z,
G4int  vacancyIndex,
G4int  transitionId,
G4int  augerIndex 
) const

Definition at line 229 of file G4AugerData.cc.

References FatalErrorInArgument, and G4Exception().

Referenced by PrintData().

00230 {
00231   G4double energy = 0;
00232   
00233   if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[Z])
00234     {
00235       G4Exception("G4AugerData::VacancyId()","de0002", FatalErrorInArgument,"");
00236       return 0;
00237     }
00238   else {
00239     trans_Table::const_iterator element = augerTransitionTable.find(Z);
00240     if (element == augerTransitionTable.end()) {
00241       G4Exception("G4AugerData::VacancyId()","de0004", FatalErrorInArgument,  "Check element");
00242       return 0;
00243     }
00244     std::vector<G4AugerTransition> dataSet = (*element).second;
00245     energy = dataSet[vacancyIndex].AugerTransitionEnergy(augerIndex,transitionId);
00246       
00247   }
00248   return energy;
00249 }

G4int G4AugerData::StartShellId ( G4int  Z,
G4int  initialVacancyIndex,
G4int  transitionShellIndex 
) const

Definition at line 206 of file G4AugerData.cc.

References FatalErrorInArgument, G4Exception(), and CLHEP::detail::n.

Referenced by PrintData().

00207 {
00208   G4int n = 0; 
00209 
00210    if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[Z]) 
00211      {
00212        G4Exception("G4AugerData::VacancyId()","de0002", FatalErrorInArgument,"");
00213        return 0;
00214      }
00215   else {
00216     trans_Table::const_iterator element = augerTransitionTable.find(Z);
00217     if (element == augerTransitionTable.end()) {
00218       G4Exception("G4AugerData::VacancyId()","de0004", FatalErrorInArgument,  "Check element");
00219       return 0; 
00220     }
00221     std::vector<G4AugerTransition> dataSet = (*element).second;
00222     n = dataSet[vacancyIndex].TransitionOriginatingShellId(transitionShellIndex);
00223   }
00224    
00225  
00226  return n;
00227 }

G4double G4AugerData::StartShellProb ( G4int  Z,
G4int  vacancyIndex,
G4int  transitionId,
G4int  augerIndex 
) const

Definition at line 252 of file G4AugerData.cc.

References FatalErrorInArgument, and G4Exception().

Referenced by PrintData().

00253 {
00254   G4double prob = 0;
00255     
00256     if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[Z]) 
00257       {
00258         G4Exception("G4AugerData::VacancyId()","de0002", FatalErrorInArgument,"");
00259         return 0;
00260       }
00261   else {
00262     trans_Table::const_iterator element = augerTransitionTable.find(Z);
00263     if (element == augerTransitionTable.end()) {
00264       G4Exception("G4AugerData::VacancyId()","de0004", FatalErrorInArgument,  "Check element");
00265       return 0;
00266     }
00267     std::vector<G4AugerTransition> dataSet = (*element).second;
00268     prob = dataSet[vacancyIndex].AugerTransitionProbability(augerIndex, transitionId);
00269 
00270 
00271 
00272   }
00273      return prob;
00274 }

G4int G4AugerData::VacancyId ( G4int  Z,
G4int  vacancyIndex 
) const

Definition at line 118 of file G4AugerData.cc.

References FatalErrorInArgument, G4Exception(), and CLHEP::detail::n.

00119 {
00120 
00121   G4int n = 0;
00122   if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies[Z])
00123     {
00124       G4Exception("G4AugerData::VacancyId()","de0002", FatalErrorInArgument,"");
00125     }
00126   else {
00127     trans_Table::const_iterator element = augerTransitionTable.find(Z);
00128     if (element == augerTransitionTable.end()) {
00129       G4Exception("G4AugerData::VacancyId()","de0004", FatalErrorInArgument,  "Check element");
00130       return 0;
00131     }
00132     std::vector<G4AugerTransition> dataSet = (*element).second;
00133     n = (G4int) dataSet[vacancyIndex].FinalShellId();
00134   }
00135   
00136   return n;
00137 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:51:29 2013 for Geant4 by  doxygen 1.4.7