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

#include <G4FluoData.hh>

Public Member Functions

 G4FluoData (const G4String &dir)
 ~G4FluoData ()
std::size_t NumberOfVacancies () const
G4int VacancyId (G4int vacancyIndex) const
 Given the index of the vacancy returns its identity.
std::size_t NumberOfTransitions (G4int vacancyIndex) const
G4int StartShellId (G4int initIndex, G4int vacancyIndex) const
G4double StartShellEnergy (G4int initIndex, G4int vacancyIndex) const
G4double StartShellProb (G4int initIndex, G4int vacancyIndex) const
void LoadData (G4int Z)
void PrintData ()
G4FluoDataoperator= (const G4FluoData &right)=delete
 G4FluoData (const G4FluoData &)=delete

Detailed Description

Definition at line 51 of file G4FluoData.hh.

Constructor & Destructor Documentation

◆ G4FluoData() [1/2]

G4FluoData::G4FluoData ( const G4String & dir)
explicit

Definition at line 44 of file G4FluoData.cc.

45{
46 fluoDirectory = dir;
47}

Referenced by G4FluoData(), and operator=().

◆ ~G4FluoData()

G4FluoData::~G4FluoData ( )

Definition at line 51 of file G4FluoData.cc.

52{
53 for (auto& pos : idMap)
54 {
55 G4DataVector* dataSet = pos.second;
56 delete dataSet;
57 }
58
59 for (auto& pos : energyMap)
60 {
61 G4DataVector* dataSet = pos.second;
62 delete dataSet;
63 }
64
65 for (auto& pos: probabilityMap)
66 {
67 G4DataVector* dataSet = pos.second;
68 delete dataSet;
69 }
70}

◆ G4FluoData() [2/2]

G4FluoData::G4FluoData ( const G4FluoData & )
delete

Member Function Documentation

◆ LoadData()

void G4FluoData::LoadData ( G4int Z)

Definition at line 205 of file G4FluoData.cc.

206{
207 // Build the complete string identifying the file with the data set
208 std::ostringstream ost;
209 if(Z != 0){
210 ost << "/fl-tr-pr-"<< Z << ".dat";
211 }
212 else{
213 ost << "/fl-tr-pr-"<<".dat";
214 }
215 G4String name(ost.str());
216
217
218 const char* path = G4FindDataDir("G4LEDATA");
219 if (!path)
220 {
221 G4String excep("G4FluoData::LoadData()");
222 G4Exception(excep,"em0006",FatalException,"Please set G4LEDATA");
223 return;
224 }
225
226 G4String pathString(path);
227
228 G4String dirFile = pathString + fluoDirectory + name;
229
230 //G4cout << "G4FluoData:: LoadData() name: " << dirFile << G4endl;
231
232
233 std::ifstream file(dirFile);
234 std::filebuf* lsdp = file.rdbuf();
235
236 if (! (lsdp->is_open()) )
237 {
238 G4String excep = "G4FluoData::LoadData()";
239 G4String msg = "data file: " + dirFile + " not found";
240 G4Exception(excep, "em0003",FatalException, msg );
241 return;
242 }
243
244 G4double a = 0;
245 G4int k = 1;
246 G4int sLocal = 0;
247
248 G4int vacIndex = 0;
249 G4DataVector* initIds = new G4DataVector;
250 G4DataVector* transEnergies = new G4DataVector;
251 G4DataVector* transProbabilities = new G4DataVector;
252
253 do {
254 file >> a;
255 G4int nColumns = 3;
256 if (a == -1)
257 {
258 if (sLocal == 0)
259 {
260 // End of a shell data set
261 idMap[vacIndex] = initIds;
262 energyMap[vacIndex] = transEnergies;
263 probabilityMap[vacIndex] = transProbabilities;
264 G4int n = (G4int)initIds->size();
265
266 nInitShells.push_back(n);
267 numberOfVacancies++;
268 // Start of new shell data set
269 initIds = new G4DataVector;
270 transEnergies = new G4DataVector;
271 transProbabilities = new G4DataVector;
272 vacIndex++;
273 }
274 sLocal++;
275 if (sLocal == nColumns)
276 {
277 sLocal = 0;
278 }
279 }
280 // moved to the end in order to avoid possible leak
281 /* else if (a == -2)
282 {
283 // End of file; delete the empty vectors created
284 //when encountering the last -1 -1 row
285 delete initIds;
286 delete transEnergies;
287 delete transProbabilities;
288 }*/
289 else
290 {
291 if(k%nColumns == 2)
292 {
293 // 2nd column is transition probabilities
294
295 if (a != -1) transProbabilities->push_back(a);
296
297 k++;
298 }
299 else if (k%nColumns == 1)
300 {
301 // 1st column is shell id
302 // if this is the first data of the shell, all the colums are equal
303 // to the shell Id; so we skip the next colums ang go to the next row
304 if(initIds->size() == 0) {
305 if (a != -1) initIds->push_back((G4int)a);
306 file >> a;
307 file >> a;
308 k=k+2;
309 }
310 else{
311 if (a != -1) initIds->push_back(a);
312 }
313 k++;
314 }
315 else if (k%nColumns == 0)
316
317 {//third column is transition energies
318
319 if (a != -1)
320 {G4double e = a * MeV;
321 transEnergies->push_back(e);}
322
323 k=1;
324 }
325 }
326 }
327 while (a != -2); // end of file
328 file.close();
329 delete initIds;
330 delete transEnergies;
331 delete transProbabilities;
332}
const char * G4FindDataDir(const char *)
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
const char * name(G4int ptype)

Referenced by G4AtomicTransitionManager::Initialise().

◆ NumberOfTransitions()

std::size_t G4FluoData::NumberOfTransitions ( G4int vacancyIndex) const

Given the index of a vacancy returns the number of shells starting from wich an electrons can fill the vacancy

Definition at line 103 of file G4FluoData.cc.

104{
105 G4int n = 0;
106 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies)
107 {
108 G4Exception("G4FluoData::NumberOfTransitions()","de0002",JustWarning,
109 "vacancyIndex outside boundaries, energy deposited locally");
110 return 0;
111 }
112 else
113 {
114 n = nInitShells[vacancyIndex]-1;
115 //-1 is necessary because the elements of the vector nInitShells
116 //include also the vacancy shell:
117 // -1 subtracts this last one
118 }
119 return n;
120}
@ JustWarning

Referenced by G4AtomicTransitionManager::Initialise(), and PrintData().

◆ NumberOfVacancies()

std::size_t G4FluoData::NumberOfVacancies ( ) const

The method returns the number of shells in wich a vacancy can be filled by a radiative transition

Definition at line 74 of file G4FluoData.cc.

75{
76 return numberOfVacancies;
77}

Referenced by G4AtomicTransitionManager::Initialise().

◆ operator=()

G4FluoData & G4FluoData::operator= ( const G4FluoData & right)
delete

◆ PrintData()

void G4FluoData::PrintData ( )

Definition at line 336 of file G4FluoData.cc.

337{
338 for (G4int i = 0; i <numberOfVacancies; ++i)
339 {
340 G4cout << "---- TransitionData for the vacancy nb "
341 << i
342 << " ----- "
343 << G4endl;
344
345 for (G4int k = 0; k<(G4int)NumberOfTransitions(i); ++k)
346 {
347 G4int id = StartShellId(k,i);
348 // let's start from 1 because the first (index = 0) element of the vector
349 // is the id of the initial vacancy
350 G4double e = StartShellEnergy(k,i) /MeV;
351 G4double p = StartShellProb(k,i);
352 G4cout << k <<") Shell id: " << id <<G4endl;
353 G4cout << " - Transition energy = " << e << " MeV "<<G4endl;
354 G4cout << " - Transition probability = " << p <<G4endl;
355
356 }
357 G4cout << "-------------------------------------------------"
358 << G4endl;
359 }
360}
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
std::size_t NumberOfTransitions(G4int vacancyIndex) const
G4double StartShellEnergy(G4int initIndex, G4int vacancyIndex) const
G4int StartShellId(G4int initIndex, G4int vacancyIndex) const
G4double StartShellProb(G4int initIndex, G4int vacancyIndex) const

◆ StartShellEnergy()

G4double G4FluoData::StartShellEnergy ( G4int initIndex,
G4int vacancyIndex ) const

Given the indexes of the starting and final shells for the transition, returns the transition energy

Definition at line 149 of file G4FluoData.cc.

150{
151 G4double n = -1;
152
153 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies)
154 {
155 G4Exception("G4FluoData::StartShellEnergy()","de0002",FatalErrorInArgument,
156 "vacancyIndex outside boundaries");}
157 else
158 {
159 auto pos = energyMap.find(vacancyIndex);
160 if (pos != energyMap.end())
161 {
162 G4DataVector dataSet = *((*pos).second);
163
164 G4int nData = (G4int)dataSet.size();
165 if (initIndex >= 0 && initIndex < nData)
166 {
167 n = dataSet[initIndex];
168 }
169 }
170 }
171 return n;
172}
@ FatalErrorInArgument

Referenced by G4AtomicTransitionManager::Initialise(), and PrintData().

◆ StartShellId()

G4int G4FluoData::StartShellId ( G4int initIndex,
G4int vacancyIndex ) const

Given the indexes of the starting and final shells for the transition, returns the identity of the starting one

Definition at line 124 of file G4FluoData.cc.

125{
126 G4int n = -1;
127
128 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies) {
129 G4Exception("G4FluoData::StartShellId()","de0002",FatalErrorInArgument,
130 "vacancyIndex outside boundaries");
131 } else {
132 auto pos = idMap.find(vacancyIndex);
133 if (pos != idMap.end()) {
134 G4DataVector* dataSet = (*pos).second;
135
136 G4int nData = (G4int)dataSet->size();
137 // The first Element of idMap's dataSets is the original shell of
138 // the vacancy, so we must start from the first element of dataSet
139 if (initIndex >= 0 && initIndex < nData) {
140 n = (*dataSet)[initIndex+1];
141 }
142 }
143 }
144 return n;
145}

Referenced by G4AtomicTransitionManager::Initialise(), and PrintData().

◆ StartShellProb()

G4double G4FluoData::StartShellProb ( G4int initIndex,
G4int vacancyIndex ) const

Given the indexes of the starting and final shells for the transition, returns the probability of this transition

Definition at line 176 of file G4FluoData.cc.

177{
178 G4double n = -1;
179
180 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies)
181 {
182 G4Exception("G4FluoData::StartShellEnergy()","de0002",JustWarning,
183 "vacancyIndex outside boundaries, energy deposited locally");
184 return 0;
185 }
186 else
187 {
188 auto pos = probabilityMap.find(vacancyIndex);
189 if (pos != probabilityMap.end())
190 {
191 G4DataVector dataSet = *((*pos).second);
192
193 G4int nData = (G4int)dataSet.size();
194 if (initIndex >= 0 && initIndex < nData)
195 {
196 n = dataSet[initIndex];
197 }
198 }
199 }
200 return n;
201}

Referenced by G4AtomicTransitionManager::Initialise(), and PrintData().

◆ VacancyId()

G4int G4FluoData::VacancyId ( G4int vacancyIndex) const

Given the index of the vacancy returns its identity.

Definition at line 81 of file G4FluoData.cc.

82{
83 G4int n = -1;
84 if (vacancyIndex<0 || vacancyIndex>=numberOfVacancies)
85 {
86 G4Exception("G4FluoData::vacancyId()","de0002",FatalErrorInArgument,
87 "vacancyIndex outside boundaries");
88 }
89 else
90 {
91 auto pos = idMap.find(vacancyIndex);
92 if (pos!= idMap.end())
93 { G4DataVector dataSet = (*(*pos).second);
94 n = (G4int) dataSet[0];
95
96 }
97 }
98 return n;
99}

Referenced by G4AtomicTransitionManager::Initialise().


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