Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4AtomicTransitionManager Class Reference

#include <G4AtomicTransitionManager.hh>

Public Member Functions

void Initialise ()
 needs to be called once from other code before start of run
 
G4AtomicShellShell (G4int Z, size_t shellIndex) const
 
const G4FluoTransitionReachableShell (G4int Z, size_t shellIndex) const
 
const G4AugerTransitionReachableAugerShell (G4int Z, G4int shellIndex) const
 
G4int NumberOfShells (G4int Z) const
 
G4int NumberOfReachableShells (G4int Z) const
 
G4int NumberOfReachableAugerShells (G4int Z) const
 
G4double TotalRadiativeTransitionProbability (G4int Z, size_t shellIndex) const
 
G4double TotalNonRadiativeTransitionProbability (G4int Z, size_t shellIndex) const
 
void SetVerboseLevel (G4int vl)
 Verbosity control.
 
G4int GetVerboseLevel ()
 

Static Public Member Functions

static G4AtomicTransitionManagerInstance ()
 

Detailed Description

Definition at line 57 of file G4AtomicTransitionManager.hh.

Member Function Documentation

◆ GetVerboseLevel()

G4int G4AtomicTransitionManager::GetVerboseLevel ( )
inline

Definition at line 110 of file G4AtomicTransitionManager.hh.

110{return verboseLevel;};

◆ Initialise()

void G4AtomicTransitionManager::Initialise ( )

needs to be called once from other code before start of run

Definition at line 278 of file G4AtomicTransitionManager.cc.

279{
280 if(isInitialized) { return; }
281 G4AutoLock l(&AtomicTransitionManagerMutex);
282
283 if(isInitialized) { return; }
284 isInitialized = true;
285
286 // Selection of fluorescence files
287
288 G4String defaultDirectory = "/fluor";
289 G4String fluoDirectory = defaultDirectory;
290 G4String bindingDirectory = defaultDirectory;
292 G4int zLim = zMax + 1;
293 if(fdir == fluoBearden) {
294 zMax = 100;
295 supTableLimit = 100;
296 bindingDirectory = fluoDirectory = "/fluor_Bearden";
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_XDB_EADL";
304 }
305
306 // infTableLimit is initialized to 6 because EADL lacks data for Z<=5
307 G4ShellData* shellManager = new G4ShellData(1, zMax, false);
308 shellManager->LoadData(bindingDirectory + "/binding");
309
310 // initialization of the data for auger effect
311 augerData = new G4AugerData;
312
313 // Fills shellTable with the data from EADL, identities and binding
314 // energies of shells
315 for (G4int Z = zMin; Z <= zMax; ++Z)
316 {
317 std::vector<G4AtomicShell*> vectorOfShells;
318 G4int shellIndex = 0;
319
320 G4int numberOfShells = (G4int)shellManager->NumberOfShells(Z);
321 for (shellIndex = 0; shellIndex<numberOfShells; ++shellIndex)
322 {
323 G4int shellId = shellManager->ShellId(Z,shellIndex);
324 G4double bindingEnergy = shellManager->BindingEnergy(Z,shellIndex);
325 G4AtomicShell * shell = new G4AtomicShell(shellId,bindingEnergy);
326 vectorOfShells.push_back(shell);
327 }
328 shellTable[Z] = vectorOfShells;
329 }
330
331 // Fills transitionTable with the data on identities, transition
332 // energies and transition probabilities
333 G4String dir = fluoDirectory;
334 for (G4int Znum= infTableLimit; Znum<=supTableLimit; ++Znum)
335 {
336 if (Znum == zLim) { dir = defaultDirectory; }
337 G4FluoData* fluoManager = new G4FluoData(dir);
338 std::vector<G4FluoTransition*> vectorOfTransitions;
339 fluoManager->LoadData(Znum);
340
341 G4int numberOfVacancies = (G4int)fluoManager->NumberOfVacancies();
342 for(G4int vacancyIndex = 0; vacancyIndex<numberOfVacancies;
343 ++vacancyIndex)
344 {
345 std::vector<G4int> vectorOfIds;
346 G4DataVector vectorOfEnergies;
347 G4DataVector vectorOfProbabilities;
348
349 G4int finalShell = fluoManager->VacancyId(vacancyIndex);
350 G4int numberOfTransitions = (G4int)
351 fluoManager->NumberOfTransitions(vacancyIndex);
352 for (G4int origShellIndex = 0; origShellIndex < numberOfTransitions;
353 ++origShellIndex)
354 {
355 G4int originatingShellId =
356 fluoManager->StartShellId(origShellIndex,vacancyIndex);
357 vectorOfIds.push_back(originatingShellId);
358
359 G4double transitionEnergy =
360 fluoManager->StartShellEnergy(origShellIndex,vacancyIndex);
361 vectorOfEnergies.push_back(transitionEnergy);
362 G4double transitionProbability =
363 fluoManager->StartShellProb(origShellIndex,vacancyIndex);
364 vectorOfProbabilities.push_back(transitionProbability);
365 }
366 G4FluoTransition* transition =
367 new G4FluoTransition (finalShell,vectorOfIds,
368 vectorOfEnergies,vectorOfProbabilities);
369 vectorOfTransitions.push_back(transition);
370 }
371 transitionTable[Znum] = vectorOfTransitions;
372 delete fluoManager;
373 }
374 delete shellManager;
375 l.unlock();
376}
G4EmFluoDirectory
@ fluoBearden
@ fluoXDB_EADL
@ fluoANSTO
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
static G4EmParameters * Instance()
G4EmFluoDirectory FluoDirectory() const
std::size_t NumberOfTransitions(G4int vacancyIndex) const
G4double StartShellEnergy(G4int initIndex, G4int vacancyIndex) const
G4int VacancyId(G4int vacancyIndex) const
Given the index of the vacancy returns its identity.
Definition G4FluoData.cc:81
std::size_t NumberOfVacancies() const
Definition G4FluoData.cc:74
void LoadData(G4int Z)
G4int StartShellId(G4int initIndex, G4int vacancyIndex) const
G4double StartShellProb(G4int initIndex, G4int vacancyIndex) const
G4int ShellId(G4int Z, G4int shellIndex) const
G4double BindingEnergy(G4int Z, G4int shellIndex) const
void LoadData(const G4String &fileName)
std::size_t NumberOfShells(G4int Z) const
G4double bindingEnergy(G4int A, G4int Z)

Referenced by G4LivermoreIonisationModel::Initialise(), and G4UAtomicDeexcitation::InitialiseForNewRun().

◆ Instance()

◆ NumberOfReachableAugerShells()

G4int G4AtomicTransitionManager::NumberOfReachableAugerShells ( G4int Z) const

This function returns the number of possible NON-radiative transitions for the atom with atomic number Z i.e. the number of shell in wich a vacancy can be filled by a NON-radiative transition

Definition at line 211 of file G4AtomicTransitionManager.cc.

212{
213 return (G4int)augerData->NumberOfVacancies(Z);
214}
size_t NumberOfVacancies(G4int Z) const

◆ NumberOfReachableShells()

G4int G4AtomicTransitionManager::NumberOfReachableShells ( G4int Z) const

This function returns the number of those shells of the element whose atomic number is Z which are reachable through a radiative transition

Definition at line 188 of file G4AtomicTransitionManager.cc.

189{
190 auto pos = transitionTable.find(Z);
191 std::size_t res = 0;
192 if (pos!= transitionTable.cend())
193 {
194 res = ((*pos).second).size();
195 }
196 else
197 {
199 ed << "No deexcitation for Z= " << Z
200 << ", so energy deposited locally";
201 G4Exception("G4AtomicTransitionManager::NumberOfReachebleShells()",
202 "de0001",FatalException,ed,"");
203 }
204 return (G4int)res;
205}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription

◆ NumberOfShells()

G4int G4AtomicTransitionManager::NumberOfShells ( G4int Z) const

This function returns the number of shells of the element whose atomic number is Z

Definition at line 166 of file G4AtomicTransitionManager.cc.

167{
168 auto pos = shellTable.find(Z);
169
170 std::size_t res = 0;
171 if (pos != shellTable.cend()){
172
173 res = ((*pos).second).size();
174
175 } else {
177 ed << "No deexcitation for Z= " << Z;
178 G4Exception("G4AtomicTransitionManager::NumberOfShells()","de0001",
179 FatalException, ed, "");
180 }
181 return (G4int)res;
182}

Referenced by G4LivermoreIonisationModel::ComputeDEDXPerVolume(), G4LivermoreIonisationCrossSection::CrossSection(), G4PenelopeIonisationCrossSection::CrossSection(), G4LivermoreIonisationCrossSection::GetCrossSection(), G4PenelopeIonisationCrossSection::GetCrossSection(), and G4PenelopePhotoElectricModel::SampleSecondaries().

◆ ReachableAugerShell()

const G4AugerTransition * G4AtomicTransitionManager::ReachableAugerShell ( G4int Z,
G4int shellIndex ) const

This function gives, upon Z and the Index of the initial shell where the vacancy is, the NON-radiative transition that can happen with originating shell for the transition, and the data for the possible auger electrons emitted (originating vacancy, energy amnd probability)

Definition at line 159 of file G4AtomicTransitionManager.cc.

161{
162 return augerData->GetAugerTransition(Z,vacancyShellIndex);
163}
G4AugerTransition * GetAugerTransition(G4int Z, G4int vacancyShellIndex)

◆ ReachableShell()

const G4FluoTransition * G4AtomicTransitionManager::ReachableShell ( G4int Z,
size_t shellIndex ) const

Z is the atomic number of the element, shellIndex is the index (in EADL) of the final shell for the transition This function gives, upon Z and the Index of the initial shell where the vacancy is, the radiative transition that can happen (originating shell, energy, probability)

Definition at line 130 of file G4AtomicTransitionManager.cc.

131{
132 auto pos = transitionTable.find(Z);
133 if (pos!= transitionTable.end())
134 {
135 std::vector<G4FluoTransition*> v = (*pos).second;
136 if (shellIndex < v.size()) { return(v[shellIndex]); }
137
138 else {
140 ed << "No fluo transition for Z= " << Z
141 << " shellIndex= " << shellIndex;
142 G4Exception("G4AtomicTransitionManager::ReachebleShell()","de0002",
143 FatalException,ed,"");
144 }
145 }
146 else
147 {
149 ed << "No transition table for Z= " << Z
150 << " shellIndex= " << shellIndex;
151 G4Exception("G4AtomicTransitionManager::ReachableShell()","de0001",
152 FatalException,ed,"");
153 }
154 return 0;
155}

◆ SetVerboseLevel()

void G4AtomicTransitionManager::SetVerboseLevel ( G4int vl)
inline

Verbosity control.

Definition at line 109 of file G4AtomicTransitionManager.hh.

109{verboseLevel = vl;};

◆ Shell()

G4AtomicShell * G4AtomicTransitionManager::Shell ( G4int Z,
size_t shellIndex ) const

Z is the atomic number of the element, shellIndex is the index (in EADL) of the shell

Definition at line 90 of file G4AtomicTransitionManager.cc.

91{
92 auto pos = shellTable.find(Z);
93
94 if (pos!= shellTable.end())
95 {
96 std::vector<G4AtomicShell*> v = (*pos).second;
97 if (shellIndex < v.size()) { return v[shellIndex]; }
98
99 else
100 {
101 size_t lastShell = v.size();
103 ed << "No de-excitation for Z= " << Z
104 << " shellIndex= " << shellIndex
105 << ">= numberOfShells= " << lastShell;
106 if (verboseLevel > 0)
107 G4Exception("G4AtomicTransitionManager::Shell()","de0001",
108 JustWarning,ed," AtomicShell not found");
109 if (lastShell > 0) { return v[lastShell - 1]; }
110 }
111 }
112 else
113 {
115 ed << "No de-excitation for Z= " << Z
116 << " shellIndex= " << shellIndex
117 << ". AtomicShell not found - check if data are uploaded";
118 G4Exception("G4AtomicTransitionManager::Shell()","de0001",
119 FatalException,ed,"");
120 }
121 return 0;
122}
@ JustWarning

Referenced by G4ecpssrBaseKxsModel::CalculateCrossSection(), G4ecpssrBaseLixsModel::CalculateL1CrossSection(), G4OrlicLiXsModel::CalculateL1CrossSection(), G4ecpssrBaseLixsModel::CalculateL2CrossSection(), G4OrlicLiXsModel::CalculateL2CrossSection(), G4ecpssrBaseLixsModel::CalculateL3CrossSection(), G4OrlicLiXsModel::CalculateL3CrossSection(), G4ecpssrBaseLixsModel::CalculateVelocity(), G4UAtomicDeexcitation::GetAtomicShell(), G4hImpactIonisation::PostStepDoIt(), G4LivermoreIonisationModel::SampleSecondaries(), G4PenelopeComptonModel::SampleSecondaries(), G4PenelopeIonisationModel::SampleSecondaries(), and G4PenelopePhotoElectricModel::SampleSecondaries().

◆ TotalNonRadiativeTransitionProbability()

G4double G4AtomicTransitionManager::TotalNonRadiativeTransitionProbability ( G4int Z,
size_t shellIndex ) const

Gives the sum of the probabilities of non radiative transition from the shell whose index is shellIndex

Definition at line 260 of file G4AtomicTransitionManager.cc.

262{
263 G4double prob = 1.0 - TotalRadiativeTransitionProbability(Z, shellIndex);
264 if(prob > 1.0 || prob < 0.0) {
266 ed << "Total probability mismatch Z= " << Z
267 << " shellIndex= " << shellIndex
268 << " prob= " << prob;
270 "G4AtomicTransitionManager::TotalNonRadiativeTransitionProbability()",
271 "de0003",FatalException,ed,"Cannot compute non-radiative probability");
272 return 0.0;
273 }
274 return prob;
275}
G4double TotalRadiativeTransitionProbability(G4int Z, size_t shellIndex) const

◆ TotalRadiativeTransitionProbability()

G4double G4AtomicTransitionManager::TotalRadiativeTransitionProbability ( G4int Z,
size_t shellIndex ) const

Gives the sum of the probabilities of radiative transition towards the shell whose index is shellIndex

Definition at line 217 of file G4AtomicTransitionManager.cc.

219{
220 auto pos = transitionTable.find(Z);
221 G4double totalRadTransProb = 0.0;
222
223 if (pos!= transitionTable.end())
224 {
225 std::vector<G4FluoTransition*> v = (*pos).second;
226
227 if (shellIndex < v.size())
228 {
229 G4FluoTransition* transition = v[shellIndex];
230 G4DataVector transProb = transition->TransitionProbabilities();
231
232 for (size_t j=0; j<transProb.size(); ++j)
233 {
234 totalRadTransProb += transProb[j];
235 }
236 }
237 else
238 {
240 ed << "Zero transition probability for Z=" << Z
241 << " shellIndex= " << shellIndex;
243 "G4AtomicTransitionManager::TotalRadiativeTransitionProbability()",
244 "de0002",FatalException,"Incorrect de-excitation");
245 }
246 }
247 else
248 {
250 ed << "No deexcitation for Z=" << Z
251 << " shellIndex= " << shellIndex;
253 "G4AtomicTransitionManager::TotalRadiativeTransitionProbability()",
254 "de0001",FatalException,ed,"Cannot compute transition probability");
255 }
256 return totalRadTransProb;
257}
const G4DataVector & TransitionProbabilities() const
Return the probabilities of the transitions.

Referenced by TotalNonRadiativeTransitionProbability().


The documentation for this class was generated from the following files: