Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/lowenergy/src/G4AtomicTransitionManager.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/electromagnetic/lowenergy/src/G4AtomicTransitionManager.cc (Version 11.3.0) and /processes/electromagnetic/lowenergy/src/G4AtomicTransitionManager.cc (Version 6.2)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                    <<   3 // * DISCLAIMER                                                       *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th <<   5 // * The following disclaimer summarizes all the specific disclaimers *
  6 // * the Geant4 Collaboration.  It is provided <<   6 // * of contributors to this software. The specific disclaimers,which *
  7 // * conditions of the Geant4 Software License <<   7 // * govern, are listed with their locations in:                      *
  8 // * LICENSE and available at  http://cern.ch/ <<   8 // *   http://cern.ch/geant4/license                                  *
  9 // * include a list of copyright holders.      << 
 10 // *                                                9 // *                                                                  *
 11 // * Neither the authors of this software syst     10 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     11 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     12 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     13 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  <<  14 // * use.                                                             *
 16 // * for the full disclaimer and the limitatio << 
 17 // *                                               15 // *                                                                  *
 18 // * This  code  implementation is the result  <<  16 // * This  code  implementation is the  intellectual property  of the *
 19 // * technical work of the GEANT4 collaboratio <<  17 // * GEANT4 collaboration.                                            *
 20 // * By using,  copying,  modifying or  distri <<  18 // * By copying,  distributing  or modifying the Program (or any work *
 21 // * any work based  on the software)  you  ag <<  19 // * based  on  the Program)  you indicate  your  acceptance of  this *
 22 // * use  in  resulting  scientific  publicati <<  20 // * statement, and all its terms.                                    *
 23 // * acceptance of all terms of the Geant4 Sof << 
 24 // *******************************************     21 // ********************************************************************
 25 //                                                 22 //
 26 //                                                 23 //
                                                   >>  24 // $Id: G4AtomicTransitionManager.cc,v 1.2 ????
                                                   >>  25 // GEANT4 tag $Name: geant4-05-02-patch-01 $
 27 //                                                 26 //
 28 // Authors: Elena Guardincerri (Elena.Guardinc     27 // Authors: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
 29 //          Alfonso Mantero (Alfonso.Mantero@g     28 //          Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
 30 //                                                 29 //
 31 // History:                                        30 // History:
 32 // -----------                                     31 // -----------
 33 // 16 Sep 2001 E. Guardincerri  First Committe     32 // 16 Sep 2001 E. Guardincerri  First Committed to cvs
 34 //                                                 33 //
 35 // -------------------------------------------     34 // -------------------------------------------------------------------
 36                                                    35 
 37 #include "G4AtomicTransitionManager.hh"            36 #include "G4AtomicTransitionManager.hh"
 38 #include "G4EmParameters.hh"                   << 
 39 #include "G4FluoData.hh"                       << 
 40 #include "G4AugerData.hh"                      << 
 41 #include "G4AutoLock.hh"                       << 
 42 namespace { G4Mutex AtomicTransitionManagerMut << 
 43                                                    37 
 44 //....oooOO0OOooo........oooOO0OOooo........oo <<  38 G4AtomicTransitionManager::G4AtomicTransitionManager(G4int minZ, G4int maxZ, 
 45 G4AtomicTransitionManager* G4AtomicTransitionM <<  39   G4int limitInfTable,G4int limitSupTable)
 46                                                <<  40   :zMin(minZ), 
 47 //....oooOO0OOooo........oooOO0OOooo........oo <<  41   zMax(maxZ),
 48 G4AtomicTransitionManager* G4AtomicTransitionM <<  42   infTableLimit(limitInfTable),
                                                   >>  43   supTableLimit(limitSupTable)
 49 {                                                  44 {
 50   if (instance == nullptr) {                   <<  45   // infTableLimit is initialized to 6 because EADL lacks data for Z<=5
 51     instance = new G4AtomicTransitionManager() <<  46   G4ShellData* shellManager = new G4ShellData;
 52   }                                            <<  47 
 53   return instance;                             <<  48   // initialization of the data for auger effect
 54 }                                              <<  49   
                                                   >>  50   augerData = new G4AugerData;
 55                                                    51 
 56 //....oooOO0OOooo........oooOO0OOooo........oo <<  52   shellManager->LoadData("/fluor/binding");
 57 G4AtomicTransitionManager::G4AtomicTransitionM <<  53   
 58  : augerData(nullptr),                         <<  54   // Fills shellTable with the data from EADL, identities and binding 
 59    verboseLevel(0),                            <<  55   // energies of shells
 60    isInitialized(false)                        <<  56   for (G4int Z = zMin; Z<= zMax; Z++)
 61 {}                                             <<  57     {
                                                   >>  58       std::vector<G4AtomicShell*> vectorOfShells;  
                                                   >>  59     
                                                   >>  60       size_t numberOfShells=shellManager->NumberOfShells(Z);
                                                   >>  61       for (size_t shellIndex = 0; shellIndex<numberOfShells; shellIndex++)
                                                   >>  62   { 
                                                   >>  63     G4int shellId = shellManager->ShellId(Z,shellIndex);
                                                   >>  64     G4double bindingEnergy = shellManager->BindingEnergy(Z,shellIndex);
                                                   >>  65    
                                                   >>  66     G4AtomicShell * shell = new G4AtomicShell(shellId,bindingEnergy);
                                                   >>  67   
                                                   >>  68     vectorOfShells.push_back(shell);
                                                   >>  69   }
                                                   >>  70     
                                                   >>  71       //     shellTable.insert(std::make_pair(Z, vectorOfShells));
                                                   >>  72       shellTable[Z] = vectorOfShells;
                                                   >>  73     }
                                                   >>  74   
                                                   >>  75   // Fills transitionTable with the data from EADL, identities, transition 
                                                   >>  76   // energies and transition probabilities
                                                   >>  77   for (G4int Znum= infTableLimit; Znum<=supTableLimit; Znum++)
                                                   >>  78     {  G4FluoData* fluoManager = new G4FluoData;
                                                   >>  79     std::vector<G4FluoTransition*> vectorOfTransitions;
                                                   >>  80     fluoManager->LoadData(Znum);
                                                   >>  81     
                                                   >>  82     size_t numberOfVacancies = fluoManager-> NumberOfVacancies();
                                                   >>  83     
                                                   >>  84     for (size_t vacancyIndex = 0; vacancyIndex<numberOfVacancies;  vacancyIndex++)
                                                   >>  85       
                                                   >>  86       {
                                                   >>  87   std::vector<G4int>  vectorOfIds;
                                                   >>  88   G4DataVector vectorOfEnergies;
                                                   >>  89   G4DataVector vectorOfProbabilities;
                                                   >>  90   
                                                   >>  91   G4int finalShell = fluoManager->VacancyId(vacancyIndex);
                                                   >>  92   size_t numberOfTransitions = fluoManager->NumberOfTransitions(vacancyIndex);
                                                   >>  93   for (size_t origShellIndex = 0; origShellIndex <= numberOfTransitions;
                                                   >>  94        origShellIndex++)
                                                   >>  95       
                                                   >>  96     {
                                                   >>  97       
                                                   >>  98       G4int originatingShellId = fluoManager->StartShellId(origShellIndex,vacancyIndex);
                                                   >>  99       
                                                   >> 100       vectorOfIds.push_back(originatingShellId);
                                                   >> 101       
                                                   >> 102       G4double transitionEnergy = fluoManager->StartShellEnergy(origShellIndex,vacancyIndex);
                                                   >> 103       vectorOfEnergies.push_back(transitionEnergy);
                                                   >> 104       G4double transitionProbability = fluoManager->StartShellProb(origShellIndex,vacancyIndex);
                                                   >> 105       vectorOfProbabilities.push_back(transitionProbability);
                                                   >> 106     }
                                                   >> 107     G4FluoTransition * transition = new G4FluoTransition (finalShell,vectorOfIds,
                                                   >> 108                     vectorOfEnergies,vectorOfProbabilities);
                                                   >> 109     vectorOfTransitions.push_back(transition); 
                                                   >> 110       }
                                                   >> 111     //      transitionTable.insert(std::make_pair(Znum, vectorOfTransitions));
                                                   >> 112     transitionTable[Znum] = vectorOfTransitions;
                                                   >> 113       
                                                   >> 114       delete fluoManager;
                                                   >> 115     }
                                                   >> 116   delete shellManager;
                                                   >> 117 }
 62                                                   118 
 63 //....oooOO0OOooo........oooOO0OOooo........oo << 
 64 G4AtomicTransitionManager::~G4AtomicTransition    119 G4AtomicTransitionManager::~G4AtomicTransitionManager()
                                                   >> 120   
 65 {                                                 121 { 
                                                   >> 122 
 66   delete augerData;                               123   delete augerData;
                                                   >> 124 
                                                   >> 125 std::map<G4int,std::vector<G4AtomicShell*>,std::less<G4int> >::iterator pos;
 67                                                   126  
 68   for (auto& pos : shellTable){                << 127  for (pos = shellTable.begin(); pos != shellTable.end(); pos++){
 69     std::vector<G4AtomicShell*>vec = pos.secon << 128    
 70     std::size_t vecSize = vec.size();          << 129    std::vector< G4AtomicShell*>vec = (*pos).second;
 71     for (std::size_t i=0; i< vecSize; ++i){    << 130    
 72       G4AtomicShell* shell = vec[i];           << 131    G4int vecSize=vec.size();
 73       delete shell;                            << 132    
 74     }                                          << 133    for (G4int i=0; i< vecSize; i++){
 75   }                                            << 134      G4AtomicShell* shell = vec[i];
                                                   >> 135      delete shell;     
                                                   >> 136    }
                                                   >> 137    
                                                   >> 138  }
 76                                                   139  
 77   for (auto& ppos : transitionTable)           << 140  std::map<G4int,std::vector<G4FluoTransition*>,std::less<G4int> >::iterator ppos;
 78     {                                          << 141  
 79       std::vector<G4FluoTransition*>vec = ppos << 142  for (ppos = transitionTable.begin(); ppos != transitionTable.end(); ppos++){
 80       std::size_t vecSize=vec.size();          << 
 81                                                   143    
 82       for (std::size_t i=0; i< vecSize; ++i){  << 144    std::vector<G4FluoTransition*>vec = (*ppos).second;
 83   G4FluoTransition* transition = vec[i];       << 145    
 84   delete transition;                           << 146    G4int vecSize=vec.size();
 85       }                                        << 147    
 86     }                                          << 148    for (G4int i=0; i< vecSize; i++){
                                                   >> 149    G4FluoTransition* transition = vec[i];
                                                   >> 150    delete transition;      
                                                   >> 151    }
                                                   >> 152    
                                                   >> 153  }   
                                                   >> 154  
                                                   >> 155 }
                                                   >> 156 
                                                   >> 157 G4AtomicTransitionManager* G4AtomicTransitionManager::instance = 0;
                                                   >> 158 
                                                   >> 159 G4AtomicTransitionManager* G4AtomicTransitionManager::Instance()
                                                   >> 160 {
                                                   >> 161   if (instance == 0)
                                                   >> 162     {
                                                   >> 163       instance = new G4AtomicTransitionManager;
                                                   >> 164      
                                                   >> 165     }
                                                   >> 166   return instance;
 87 }                                                 167 }
 88 //....oooOO0OOooo........oooOO0OOooo........oo << 168 
 89 G4AtomicShell*                                 << 169 
 90 G4AtomicTransitionManager::Shell(G4int Z, size << 170 G4AtomicShell* G4AtomicTransitionManager::Shell(G4int Z, size_t shellIndex) const
 91 {                                              << 171 { 
 92   auto pos = shellTable.find(Z);               << 172   std::map<G4int,std::vector<G4AtomicShell*>,std::less<G4int> >::const_iterator pos;
                                                   >> 173   
                                                   >> 174   pos = shellTable.find(Z);
 93                                                   175   
 94   if (pos!= shellTable.end())                     176   if (pos!= shellTable.end())
 95     {                                             177     {
 96       std::vector<G4AtomicShell*> v = (*pos).s    178       std::vector<G4AtomicShell*> v = (*pos).second;
 97       if (shellIndex < v.size()) { return v[sh << 179       if (shellIndex<v.size())
 98                                                << 180   {
                                                   >> 181     return(v[shellIndex]);
                                                   >> 182   }
 99       else                                        183       else 
100   {                                               184   {
101     size_t lastShell = v.size();                  185     size_t lastShell = v.size();
102     G4ExceptionDescription ed;                 << 186     G4cout << "G4AtomicTransitionManager::Shell - Z = " 
103     ed << "No de-excitation for Z= " << Z      << 187      << Z << ", shellIndex = " << shellIndex 
104        << "  shellIndex= " << shellIndex       << 188      << " not found; number of shells = " << lastShell << G4endl;
105        << ">=  numberOfShells= " << lastShell; << 189     //  G4Exception("G4AtomicTransitionManager:shell not found");
106     if (verboseLevel > 0)                      << 190     if (lastShell > 0)
107               G4Exception("G4AtomicTransitionM << 191       {
108     JustWarning,ed," AtomicShell not found");  << 192         return v[lastShell - 1];
109     if (lastShell > 0) { return v[lastShell -  << 193       }
                                                   >> 194     else
                                                   >> 195       {     
                                                   >> 196         return 0;
                                                   >> 197       }
110   }                                               198   }
111     }                                             199     }
112   else                                            200   else
113     {                                             201     {
114       G4ExceptionDescription ed;               << 202       G4Exception("G4AtomicTransitionManager:Z not found");
115       ed << "No de-excitation for Z= " << Z    << 203       return 0;
116    << "  shellIndex= " << shellIndex           << 
117    << ". AtomicShell not found - check if data << 
118       G4Exception("G4AtomicTransitionManager:: << 
119       FatalException,ed,"");                   << 
120     }                                             204     } 
121   return 0;                                    << 
122 }                                                 205 }
123                                                   206 
124 //....oooOO0OOooo........oooOO0OOooo........oo << 207 // This function gives, upon Z and the Index of the initial shell where te vacancy is, 
                                                   >> 208 // the radiative transition that can happen (originating shell, energy, probability)
125                                                   209 
126 // This function gives, upon Z and the Index o << 210 const G4FluoTransition* G4AtomicTransitionManager::ReachableShell(G4int Z,size_t shellIndex) const
127 // the vacancy is, the radiative transition th << 
128 // shell, energy, probability)                 << 
129 const G4FluoTransition*                        << 
130 G4AtomicTransitionManager::ReachableShell(G4in << 
131 {                                                 211 {
132   auto pos = transitionTable.find(Z);          << 212   std::map<G4int,std::vector<G4FluoTransition*>,std::less<G4int> >::const_iterator pos;
                                                   >> 213   pos = transitionTable.find(Z);
133   if (pos!= transitionTable.end())                214   if (pos!= transitionTable.end())
134     {                                             215     {
135       std::vector<G4FluoTransition*> v = (*pos    216       std::vector<G4FluoTransition*> v = (*pos).second;      
136       if (shellIndex < v.size()) { return(v[sh << 217       if (shellIndex < v.size()) return(v[shellIndex]);
137                                                << 
138       else {                                      218       else {
139   G4ExceptionDescription ed;                   << 219   G4Exception("G4AtomicTransitionManager:reachable shell not found");
140   ed << "No fluo transition for Z= " << Z      << 220   return 0;
141      << "  shellIndex= " << shellIndex;        << 
142   G4Exception("G4AtomicTransitionManager::Reac << 
143         FatalException,ed,"");                 << 
144       }                                           221       }
145     }                                          << 222   }
146   else                                         << 223   else{
147     {                                          << 224     G4Exception("G4AtomicTransitionManager:Z not found");
148       G4ExceptionDescription ed;               << 225     return 0;
149       ed << "No transition table for Z= " << Z << 226   } 
150    << "  shellIndex= " << shellIndex;          << 
151       G4Exception("G4AtomicTransitionManager:: << 
152       FatalException,ed,"");                   << 
153     }                                          << 
154   return 0;                                    << 
155 }                                                 227 }
156                                                   228 
157 //....oooOO0OOooo........oooOO0OOooo........oo << 229 const G4AugerTransition* G4AtomicTransitionManager::ReachableAugerShell(G4int Z, G4int vacancyShellIndex) const
158 const G4AugerTransition*                       << 
159 G4AtomicTransitionManager::ReachableAugerShell << 
160                  G4int vacancyShellIndex) cons << 
161 {                                                 230 {
162   return augerData->GetAugerTransition(Z,vacan << 231   
                                                   >> 232   G4AugerTransition* augerTransition = augerData->GetAugerTransition(Z,vacancyShellIndex);
                                                   >> 233   return augerTransition;
163 }                                                 234 }
164                                                   235 
165 //....oooOO0OOooo........oooOO0OOooo........oo << 236 
                                                   >> 237 
166 G4int G4AtomicTransitionManager::NumberOfShell    238 G4int G4AtomicTransitionManager::NumberOfShells (G4int Z) const
167 {                                                 239 {
168   auto pos = shellTable.find(Z);               << 
169                                                   240 
170   std::size_t res = 0;                         << 241 std::map<G4int,std::vector<G4AtomicShell*>,std::less<G4int> >::const_iterator pos;
171   if (pos != shellTable.cend()){               << 
172                                                   242 
173     res = ((*pos).second).size();              << 243   pos = shellTable.find(Z);
174                                                   244 
175   } else {                                     << 245   if (pos!= shellTable.end()){
176     G4ExceptionDescription ed;                 << 246 
177     ed << "No deexcitation for Z= " << Z;      << 247     std::vector<G4AtomicShell*> v = (*pos).second;
178     G4Exception("G4AtomicTransitionManager::Nu << 248 
179     FatalException, ed, "");                   << 249     return v.size();
                                                   >> 250   }
                                                   >> 251 
                                                   >> 252   else{
                                                   >> 253     G4Exception( "G4AtomicTransitionManager: Z not found" );
                                                   >> 254     return 0;
180   }                                               255   } 
181   return (G4int)res;                           << 
182 }                                                 256 }
183                                                   257 
184 //....oooOO0OOooo........oooOO0OOooo........oo << 258 // This function returns the number of possible radiative transitions for the atom with atomic number Z
185 // This function returns the number of possibl << 259 // i.e. the number of shell in wich a vacancy can be filled with a radiative transition 
186 // the atom with atomic number Z i.e. the numb << 260 
187 // can be filled with a radiative transition   << 
188 G4int G4AtomicTransitionManager::NumberOfReach    261 G4int G4AtomicTransitionManager::NumberOfReachableShells(G4int Z) const
189 {                                                 262 {
190   auto pos = transitionTable.find(Z);          << 263 std::map<G4int,std::vector<G4FluoTransition*>,std::less<G4int> >::const_iterator pos;
191   std::size_t res = 0;                         << 264 
192   if (pos!= transitionTable.cend())            << 265   pos = transitionTable.find(Z);
                                                   >> 266 
                                                   >> 267   if (pos!= transitionTable.end())
193     {                                             268     {
194       res = ((*pos).second).size();            << 269       std::vector<G4FluoTransition*> v = (*pos).second;
                                                   >> 270       return v.size();
195     }                                             271     }
196   else                                            272   else
197     {                                             273     {
198       G4ExceptionDescription ed;               << 274       G4Exception( "G4AtomicTransitionManager: Z not found" );
199       ed << "No deexcitation for Z= " << Z     << 275       return 0;
200    << ", so energy deposited locally";         << 
201       G4Exception("G4AtomicTransitionManager:: << 
202       "de0001",FatalException,ed,"");          << 
203     }                                             276     } 
204   return (G4int)res;                           << 
205 }                                                 277 }
206                                                   278 
207 //....oooOO0OOooo........oooOO0OOooo........oo << 279 // This function returns the number of possible NON-radiative transitions for the atom with atomic number Z
208 // This function returns the number of possibl << 280 // i.e. the number of shell in wich a vacancy can be filled with a NON-radiative transition 
209 // for the atom with atomic number Z i.e. the  << 281 
210 // vacancy can be filled with a NON-radiative  << 
211 G4int G4AtomicTransitionManager::NumberOfReach    282 G4int G4AtomicTransitionManager::NumberOfReachableAugerShells(G4int Z)const 
212 {                                                 283 {
213   return (G4int)augerData->NumberOfVacancies(Z << 284   G4int n = augerData->NumberOfVacancies(Z);
                                                   >> 285   return n;
214 }                                                 286 }
215                                                   287 
216 //....oooOO0OOooo........oooOO0OOooo........oo << 288 
217 G4double G4AtomicTransitionManager::TotalRadia << 289 
218          G4int Z, size_t shellIndex) const     << 290 G4double G4AtomicTransitionManager::TotalRadiativeTransitionProbability(G4int Z, 
                                                   >> 291                   size_t shellIndex)
                                                   >> 292 
219 {                                                 293 {
220   auto pos = transitionTable.find(Z);          << 294 std::map<G4int,std::vector<G4FluoTransition*>,std::less<G4int> >::iterator pos;
221   G4double totalRadTransProb = 0.0;            << 295 
                                                   >> 296   pos = transitionTable.find(Z);
222                                                   297 
223   if (pos!= transitionTable.end())                298   if (pos!= transitionTable.end())
224     {                                             299     {
225       std::vector<G4FluoTransition*> v = (*pos    300       std::vector<G4FluoTransition*> v = (*pos).second;
226                                                   301       
227       if (shellIndex < v.size())               << 302     if (shellIndex < v.size())
228   {                                            << 303       {
229     G4FluoTransition* transition = v[shellInde << 304   G4FluoTransition* transition = v[shellIndex];
230     G4DataVector transProb = transition->Trans << 305   G4DataVector transProb = transition->TransitionProbabilities();
                                                   >> 306   G4double totalRadTransProb = 0;
231                                                   307   
232     for (size_t j=0; j<transProb.size(); ++j)  << 308       for (size_t j = 1; j<transProb.size(); j++)
233       {                                        << 
234         totalRadTransProb += transProb[j];     << 
235       }                                        << 
236   }                                            << 
237       else                                     << 
238   {                                               309   {
239     G4ExceptionDescription ed;                 << 310     totalRadTransProb = totalRadTransProb + transProb[j];
240     ed << "Zero transition probability for Z=" << 
241        << "  shellIndex= " << shellIndex;      << 
242     G4Exception(                               << 
243     "G4AtomicTransitionManager::TotalRadiative << 
244     "de0002",FatalException,"Incorrect de-exci << 
245   }                                               311   }
                                                   >> 312       return totalRadTransProb;   
                                                   >> 313       
                                                   >> 314     }
                                                   >> 315     else {
                                                   >> 316       G4Exception( "G4AtomicTransitionManager: shell not found" );
                                                   >> 317       return 0;
                                                   >> 318       
246     }                                             319     }
247   else                                         << 
248     {                                          << 
249       G4ExceptionDescription ed;               << 
250       ed << "No deexcitation for Z=" << Z      << 
251    << "  shellIndex= " << shellIndex;          << 
252       G4Exception(                             << 
253       "G4AtomicTransitionManager::TotalRadiati << 
254       "de0001",FatalException,ed,"Cannot compu << 
255     }                                          << 
256   return totalRadTransProb;                    << 
257 }                                              << 
258                                                << 
259 //....oooOO0OOooo........oooOO0OOooo........oo << 
260 G4double G4AtomicTransitionManager::TotalNonRa << 
261                  G4int Z, size_t shellIndex) c << 
262 {                                              << 
263   G4double prob = 1.0 - TotalRadiativeTransiti << 
264   if(prob > 1.0 || prob < 0.0) {               << 
265     G4ExceptionDescription ed;                 << 
266     ed << "Total probability mismatch Z= " <<  << 
267        << "  shellIndex= " << shellIndex       << 
268        << "  prob= " << prob;                  << 
269     G4Exception(                               << 
270     "G4AtomicTransitionManager::TotalNonRadiat << 
271     "de0003",FatalException,ed,"Cannot compute << 
272     return 0.0;                                << 
273   }                                               320   }
274   return prob;                                 << 321   else{
                                                   >> 322     G4Exception( "G4AtomicTransitionManager: Z not found");
                                                   >> 323     return 0;
                                                   >> 324   } 
275 }                                                 325 }
276                                                   326 
277 //....oooOO0OOooo........oooOO0OOooo........oo << 327 G4double G4AtomicTransitionManager::TotalNonRadiativeTransitionProbability(G4int Z, size_t shellIndex)
278 void G4AtomicTransitionManager::Initialise()   << 
279 {                                              << 
280   if(isInitialized) { return; }                << 
281   G4AutoLock l(&AtomicTransitionManagerMutex); << 
282                                                   328 
283   if(isInitialized) { return; }                << 329 {
284   isInitialized = true;                        << 
285                                                   330 
286   // Selection of fluorescence files           << 331   std::map<G4int,std::vector<G4FluoTransition*>,std::less<G4int> >::iterator pos;
287                                                   332   
288   const G4String& defaultDirectory = "/fluor"; << 333   pos = transitionTable.find(Z);
289   G4String fluoDirectory = defaultDirectory;   << 
290   G4String bindingDirectory = defaultDirectory << 
291   G4EmFluoDirectory fdir = G4EmParameters::Ins << 
292   G4int zLim = zMax + 1;                       << 
293   if(fdir == fluoBearden) {                    << 
294     zMax = 100;                                << 
295     supTableLimit = 100;                       << 
296     bindingDirectory = fluoDirectory = "/fluor << 
297   } else if(fdir == fluoANSTO) {               << 
298     zLim = 93;                                 << 
299     fluoDirectory = "/fluor_ANSTO";            << 
300   } else if(fdir == fluoXDB_EADL) {            << 
301     zMax = 100;                                << 
302     supTableLimit = 100;                       << 
303     bindingDirectory = fluoDirectory = "/fluor << 
304   }                                            << 
305                                                << 
306   // infTableLimit is initialized to 6 because << 
307   G4ShellData* shellManager = new G4ShellData( << 
308   shellManager->LoadData(bindingDirectory + "/ << 
309                                                << 
310   // initialization of the data for auger effe << 
311   augerData = new G4AugerData;                 << 
312                                                   334   
313   // Fills shellTable with the data from EADL, << 335   if (pos!= transitionTable.end()){
314   // energies of shells                        << 336     
315   for (G4int Z = zMin; Z <= zMax; ++Z)         << 337     std::vector<G4FluoTransition*> v = (*pos).second;
316     {                                          << 
317       std::vector<G4AtomicShell*> vectorOfShel << 
318       G4int shellIndex = 0;                    << 
319                                                << 
320       G4int numberOfShells = (G4int)shellManag << 
321       for (shellIndex = 0; shellIndex<numberOf << 
322   {                                            << 
323     G4int shellId = shellManager->ShellId(Z,sh << 
324     G4double bindingEnergy = shellManager->Bin << 
325     G4AtomicShell * shell = new G4AtomicShell( << 
326     vectorOfShells.push_back(shell);           << 
327   }                                            << 
328       shellTable[Z] = std::move(vectorOfShells << 
329     }                                          << 
330                                                   338   
331   // Fills transitionTable with the data on id << 
332   // energies and transition probabilities     << 
333   G4String dir = std::move(fluoDirectory);     << 
334   for (G4int Znum= infTableLimit; Znum<=supTab << 
335     {                                          << 
336       if (Znum == zLim) { dir = defaultDirecto << 
337       G4FluoData* fluoManager = new G4FluoData << 
338       std::vector<G4FluoTransition*> vectorOfT << 
339       fluoManager->LoadData(Znum);             << 
340                                                   339     
341       G4int numberOfVacancies = (G4int)fluoMan << 340     if (shellIndex<v.size()){
342       for(G4int vacancyIndex = 0; vacancyIndex << 341 
343     ++vacancyIndex)                            << 342       G4FluoTransition* transition=v[shellIndex];
                                                   >> 343       G4DataVector transProb = transition->TransitionProbabilities();
                                                   >> 344       G4double totalRadTransProb = 0;
                                                   >> 345       
                                                   >> 346       for(size_t j = 1; j<transProb.size(); j++)
344   {                                               347   {
345     std::vector<G4int> vectorOfIds;            << 348     totalRadTransProb = totalRadTransProb + transProb[j];
346     G4DataVector vectorOfEnergies;             << 
347     G4DataVector vectorOfProbabilities;        << 
348                                                << 
349     G4int finalShell = fluoManager->VacancyId( << 
350     G4int numberOfTransitions = (G4int)        << 
351                 fluoManager->NumberOfTransitio << 
352     for (G4int origShellIndex = 0; origShellIn << 
353          ++origShellIndex)                     << 
354       {                                        << 
355         G4int originatingShellId =             << 
356     fluoManager->StartShellId(origShellIndex,v << 
357         vectorOfIds.push_back(originatingShell << 
358                                                << 
359         G4double transitionEnergy =            << 
360     fluoManager->StartShellEnergy(origShellInd << 
361         vectorOfEnergies.push_back(transitionE << 
362         G4double transitionProbability =       << 
363     fluoManager->StartShellProb(origShellIndex << 
364         vectorOfProbabilities.push_back(transi << 
365       }                                        << 
366     G4FluoTransition* transition =             << 
367       new G4FluoTransition (finalShell,vectorO << 
368           vectorOfEnergies,vectorOfProbabiliti << 
369     vectorOfTransitions.push_back(transition); << 
370   }                                               349   }
371       transitionTable[Znum] = std::move(vector << 350       
372       delete fluoManager;                      << 351       G4double totalNonRadTransProb= (1 - totalRadTransProb);
                                                   >> 352       
                                                   >> 353       return totalNonRadTransProb;    }
                                                   >> 354     
                                                   >> 355     else {
                                                   >> 356       G4Exception( "shell not found");
                                                   >> 357       return 0;
373     }                                             358     }
374   delete shellManager;                         << 359   }
375   l.unlock();                                  << 360   else{
                                                   >> 361     G4Exception("Z not found");
                                                   >> 362     return 0;
                                                   >> 363   } 
376 }                                                 364 }
                                                   >> 365 
                                                   >> 366 
                                                   >> 367 
                                                   >> 368 
                                                   >> 369 
                                                   >> 370 
                                                   >> 371 
                                                   >> 372 
                                                   >> 373 
                                                   >> 374 
377                                                   375