Geant4  10.03
G4LevelReader.cc
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 // $Id: G4LevelReader.cc 88407 2015-02-18 09:18:44Z vnivanch $
27 //
28 // -------------------------------------------------------------------
29 //
30 // GEANT4 header file
31 //
32 // File name: G4NucLevel
33 //
34 // Author: V.Ivanchenko (M.Kelsey reading method is used)
35 //
36 // Creation date: 4 January 2012
37 //
38 // Modifications:
39 //
40 // -------------------------------------------------------------------
41 
42 #include "G4LevelReader.hh"
43 #include "G4NucleiProperties.hh"
44 #include "G4NucLevel.hh"
45 #include "G4NuclearLevelData.hh"
46 #include "G4DeexPrecoParameters.hh"
47 #include "G4SystemOfUnits.hh"
48 #include "G4Pow.hh"
49 #include <vector>
50 #include <fstream>
51 #include <sstream>
52 
54  "-", "+X", "+Y", "+Z", "+U", "+V", "+W", "+R", "+S", "+T", "+A", "+B", "+C"};
55 
57  : fData(ptr),fMinProbability(1.e-8),fVerbose(0),fLevelMax(632),fTransMax(30)
58 {
61  char* directory = getenv("G4LEVELGAMMADATA");
62  if(directory) {
63  fDirectory = directory;
64  } else {
65  G4Exception("G4LevelReader()","had0707",FatalException,
66  "Environment variable G4LEVELGAMMADATA is not defined");
67  fDirectory = "";
68  }
69  fFile = fDirectory + "/z100.a200";
70  fPol = " ";
71  for(G4int i=0; i<10; ++i) { fICC[i] = 0.0; }
72  for(G4int i=0; i<nbufmax; ++i) { buffer[i] = ' '; }
73  for(G4int i=0; i<nbuf2; ++i) { buff2[i] = ' '; }
74  bufp[0] = bufp[1] = ' ';
75 
77  fSpin = fAlpha = fRatio = 0.0;
78  fNorm1 = fNorm2 = 0.0f;
79 
80  vIndex.resize(fTransMax,0);
81  vTrans.resize(fTransMax,0);
82  vRatio.resize(fTransMax,0.0f);
83  vGammaCumProbability.resize(fTransMax,0.0f);
84  vGammaECumProbability.resize(fTransMax,0.0f);
85  vGammaProbability.resize(fTransMax,0.0f);
86  vShellProbability.resize(fTransMax,nullptr);
87  vMpRatio.resize(fTransMax,0.0f);
88 
89  vEnergy.resize(fLevelMax,0.0f);
90  vTime.resize(fLevelMax,0.0f);
91  vTimeg.resize(fLevelMax,0.0f);
92  vSpin.resize(fLevelMax,0);
93  vLevel.resize(fLevelMax,nullptr);
94  vMeta.resize(fLevelMax,0);
95  vIndexDB.resize(fLevelMax,-1);
96 }
97 
98 const G4LevelManager*
100 {
101  std::ostringstream ss;
102  ss << "/z" << Z << ".a" << A;
103  G4String st = G4String(ss.str());
104  fFile = fDirectory + st;
105  return MakeLevelManager(Z, A, fFile);
106 }
107 
108 const G4LevelManager*
110 {
111  vEnergy.resize(1,0.0f);
112  vTime.resize(1,FLT_MAX);
113  vTimeg.resize(1,FLT_MAX);
114  vSpin.resize(1,0);
115  vMeta.resize(1,0);
116  vLevel.resize(1,nullptr);
117 
118  std::ifstream infile(filename, std::ios::in);
119 
120  // file is not opened
121  if (!infile.is_open()) {
122  if (fVerbose > 0) {
123  G4cout << " G4LevelReader: fail open file for Z= "
124  << Z << " A= " << A
125  << " <" << filename << ">" << G4endl;
126  }
127 
128  } else {
129 
130  if (fVerbose > 0) {
131  G4cout << "G4LevelReader: open file for Z= "
132  << Z << " A= " << A
133  << " <" << filename << ">" << G4endl;
134  }
135  // read line by line
136  G4bool end = false;
137  G4bool next = true;
138  G4int nline = -1;
139  G4String xl = "- ";
141  do {
142  fPol = " ";
143  ++nline;
144  G4bool isOK = (ReadDataItem(infile,fEnergy) &&
145  ReadDataItem(infile,fTrEnergy) &&
146  ReadDataItem(infile,fProb) &&
147  ReadDataItem(infile,fPol) &&
148  ReadDataItem(infile,fTime) &&
149  ReadDataItem(infile,fSpin) &&
150  ReadDataItem(infile,fAlpha));
151 
152  fEnergy *= CLHEP::keV;
154 
155  if(isOK) {
156  for(G4int i=0; i<10; ++i) {
157  isOK = (isOK && (ReadDataItem(infile,fICC[i])));
158  }
159  }
160  if(!isOK) {
161  end = true;
162  next = false;
163  }
164  if(fVerbose > 1) {
165  G4cout << "#Line " << nline << " " << fEnergy << " " << fTrEnergy
166  << " " << fProb << " " << fPol << " " << fTime << " "
167  << fSpin << " " << fAlpha << G4endl;
168  G4cout << " ";
169  for(G4int i=0; i<10; ++i) { G4cout << fICC[i] << " "; }
170  G4cout << G4endl;
171  }
172  // end of nuclear level data
173  if(end || fEnergy > fCurrEnergy) {
174  size_t nn = vTrans.size();
175  if(nn > 0) {
176  --nn;
177  if(fVerbose > 1) {
178  G4cout << "Reader: new level E= " << fEnergy
179  << " Ntransitions= " << nn+1 << " fNorm1= " << fNorm1
180  << " fNorm2= " << fNorm2 << G4endl;
181  }
182  if(fNorm1 > 0.0f) {
183  fNorm1 = 1.0f/fNorm1;
184  vTimeg.push_back(((G4float)(fTime*fTimeFactor))*fNorm2*fNorm1);
185  fNorm2 = 1.0f/fNorm2;
186  for(size_t i=0; i<nn; ++i) {
189  if(fVerbose > 2) {
190  G4cout << "Probabilities[" << i
191  << "]= " << vGammaCumProbability[i]
192  << " " << vGammaECumProbability[i]
193  << " idxTrans= " << vIndex[i]
194  << G4endl;
195  }
196  }
197  vGammaCumProbability[nn] = 1.0f;
198  vGammaECumProbability[nn] = 1.0f;
199  if(fVerbose > 2) {
200  G4cout << "Probabilities[" << nn << "]= " << vGammaCumProbability[nn]
201  << " " << vGammaECumProbability[nn]
202  << " IdxTrans= " << vIndex[nn]
203  << G4endl;
204  }
205  vMeta.push_back(0);
206  //case of X-level
207  } else {
208  vMeta.push_back(1);
209  vTimeg.push_back(0.0f);
210  vGammaCumProbability[0] = 0.0f;
211  vGammaECumProbability[0] = 0.0f;
212  }
213 
214  vLevel.push_back(new G4NucLevel(vIndex.size(),
215  vIndex,
216  vTrans,
220  vMpRatio,
222  vIndex.clear();
223  vTrans.clear();
224  vGammaCumProbability.clear();
225  vGammaECumProbability.clear();
226  vGammaProbability.clear();
227  vShellProbability.clear();
228  vMpRatio.clear();
229  }
230  if(!end) { next = true; }
231  }
233  // begin nuclear level data
234  if(next) {
235  if(fVerbose > 2) {
236  G4cout << "== Reader: begin of new level E= " << fEnergy << G4endl;
237  }
238  // protection for bad level energy
239  size_t nn = vEnergy.size();
240  G4float ener = (G4float)fEnergy;
241  if(0 < nn && vEnergy[nn-1] > ener) { ener = vEnergy[nn-1]; }
242  vEnergy.push_back(ener);
243  vTime.push_back((G4float)(fTime*fTimeFactor));
244  if(fSpin > 20.0) { fSpin = 0.0; }
246  vSpin.push_back((G4int)(fSpin+fSpin));
247  fNorm1 = 0.0f;
248  fNorm2 = 0.0f;
249  next = false;
250  }
251  // continue filling level data
252  if(!end) {
253  if(fProb > 0.0) {
254  // by default transition to a ground state
255  G4float efinal = std::max((G4float)(fEnergy - fTrEnergy),0.0f);
256  G4float elevel = 0.0f;
257  size_t idxLevel = 0;
258  G4int tnum = 0;
259  // do not check initial energy
260  size_t nn = vEnergy.size();
261  static const G4float x_energy = (G4float)(0.1*CLHEP::eV);
262  if(1 < nn) {
263  G4float ediffMin = fEnergy;
264  for(size_t i=0; i<nn-1; ++i) {
265  G4float ediff = std::abs(efinal - vEnergy[i]);
266  /*
267  G4cout << "Elevel[" << i << "]= " << vEnergy[i]
268  << " Efinal= " << efinal
269  << " Ediff= " << ediff
270  << " EdiffMin= " << ediffMin << G4endl;
271  */
272  if(ediff < ediffMin) {
273  ediffMin = ediff;
274  elevel = vEnergy[i];
275  idxLevel = i;
276  if(ediff <= x_energy) { break; }
277  }
278  }
279  if(std::abs(vEnergy[nn-1] - elevel) < x_energy) { tnum = 1; }
280  }
281  G4double x = 1.0 + fAlpha;
282  fNorm1 += (G4float)fProb;
283  fNorm2 += (G4float)(fProb*x);
284  vIndex.push_back(idxLevel);
285  vGammaCumProbability.push_back(fNorm1);
286  vGammaECumProbability.push_back(fNorm2);
287  vGammaProbability.push_back((G4float)(1.0/x));
288  vMpRatio.push_back(0.0f);
289  vTrans.push_back(tnum);
290  if(fAlpha > 0.0) {
292  } else {
293  vShellProbability.push_back(nullptr);
294  }
295  }
296  }
297  if(nline > 10000) {
298  G4cout << "G4LevelReader: Line #" << nline << " Z= " << Z << " A= "
299  << " this file is too long - stop loading" << G4endl;
300  end = true;
301  }
302  // Loop checking, 05-Aug-2015, Vladimir Ivanchenko
303  } while (!end);
304  infile.close();
305  }
306 
307  G4LevelManager* man = nullptr;
308  if(vEnergy.size() >= 2) {
310  if(fVerbose > 0) {
311  G4cout << "=== Reader: new manager for Z= " << Z << " A= " << A
312  << " Nlevels= " << vEnergy.size() << " E[0]= "
313  << vEnergy[0]/CLHEP::MeV << " MeV Emax= "
314  << man->MaxLevelEnergy()/CLHEP::MeV << " MeV "
315  << " S: " << vEnergy.size() << " " << vTime.size()
316  << " " << vTimeg.size() << " " << vSpin.size() << " " << vLevel.size()
317  << G4endl;
318  }
319  }
320  return man;
321 }
322 
323 G4bool G4LevelReader::ReadData(std::istringstream& stream, G4double& x)
324 {
325  stream >> x;
326  return stream.fail() ? false : true;
327 }
328 
329 G4bool G4LevelReader::ReadDataItem(std::istream& dataFile, G4double& x)
330 {
331  x = 0.0;
332  for(G4int i=0; i<nbufmax; ++i) { buffer[i] = ' '; }
333  G4bool okay = true;
334  dataFile >> buffer;
335  if(dataFile.fail()) { okay = false; }
336  else { x = strtod(buffer, 0); }
337 
338  return okay;
339 }
340 
341 G4bool G4LevelReader::ReadDataItem(std::istream& dataFile, G4int& ix)
342 {
343  ix = 0;
344  for(G4int i=0; i<nbuf2; ++i) { buff2[i] = ' '; }
345  G4bool okay = true;
346  dataFile >> buff2;
347  if(dataFile.fail()) { okay = false; }
348  else { ix = atoi(buff2); }
349 
350  return okay;
351 }
352 
353 G4bool G4LevelReader::ReadDataItem(std::istream& dataFile, G4String& x)
354 {
355  G4bool okay = true;
356  dataFile >> bufp;
357  if(dataFile.fail()) { okay = false; }
358  else { x = G4String(bufp, 2); }
359  return okay;
360 }
361 
362 const std::vector<G4float>* G4LevelReader::NormalizedICCProbability(G4int Z)
363 {
364  std::vector<G4float>* vec = nullptr;
365  G4int LL = 3;
366  G4int M = 5;
367  G4int N = 1;
368  if(Z <= 27) {
369  M = N = 0;
370  if(Z <= 4) {
371  LL = 1;
372  } else if(Z <= 6) {
373  LL = 2;
374  } else if(Z <= 10) {
375  } else if(Z <= 12) {
376  M = 1;
377  } else if(Z <= 17) {
378  M = 2;
379  } else if(Z == 18) {
380  M = 3;
381  } else if(Z <= 20) {
382  M = 3;
383  N = 1;
384  } else {
385  M = 4;
386  N = 1;
387  }
388  if(LL < 3) { for(G4int i=LL+1; i<=4; ++i) { fICC[i] = 0.0; } }
389  if(M < 5) { for(G4int i=M+4; i<=8; ++i) { fICC[i] = 0.0; } }
390  if(N < 1) { fICC[9] = 0.0; }
391  }
392  G4float norm = 0.0;
393  for(G4int i=0; i<10; ++i) {
394  norm += fICC[i];
395  fICC[i] = norm;
396  }
397  if(norm > 0.0f) {
398  norm = 1.0f/norm;
399  vec = new std::vector<G4float>;
400  G4float x;
401  for(G4int i=0; i<10; ++i) {
402  x = (G4float)(fICC[i]*norm);
403  if(x > 0.995f) {
404  vec->push_back(1.0f);
405  break;
406  }
407  vec->push_back(x);
408  }
409  if (fVerbose > 2) {
410  G4int prec = G4cout.precision(3);
411  G4cout << "# InternalConv: ";
412  G4int nn = vec->size();
413  for(G4int i=0; i<nn; ++i) { G4cout << " " << (*vec)[i]; }
414  G4cout << G4endl;
415  G4cout.precision(prec);
416  }
417  }
418  return vec;
419 }
420 
421 const G4LevelManager*
423 {
424  std::ostringstream ss;
425  ss << "/correlated_gamma/z" << Z << ".a" << A;
426  G4String st = G4String(ss.str());
427  fFile = fDirectory + st;
428  std::ifstream infile(fFile, std::ios::in);
429 
430  // file is not opened
431  if (!infile.is_open()) {
432  if (fVerbose > 0) {
433  G4cout << " G4LevelReader: fail open file for Z= "
434  << Z << " A= " << A
435  << " <" << fFile << ">" << G4endl;
436  }
437  return nullptr;
438  }
439  if (fVerbose > 0) {
440  G4cout << "G4LevelReader: open file for Z= "
441  << Z << " A= " << A
442  << " <" << fFile << ">" << G4endl;
443  }
444  return LevelManager(Z, A, 0, infile);
445 }
446 
447 const G4LevelManager*
449  const G4String& filename)
450 {
451  std::ifstream infile(filename, std::ios::in);
452 
453  // file is not opened
454  if (!infile.is_open()) {
455  if (fVerbose > 0) {
456  G4cout << " G4LevelReader: fail open file for Z= "
457  << Z << " A= " << A
458  << " <" << filename << ">" << G4endl;
459  }
460  return nullptr;
461  }
462  if (fVerbose > 0) {
463  G4cout << "G4LevelReader: open file for Z= "
464  << Z << " A= " << A
465  << " <" << filename << ">" << G4endl;
466  }
467  return LevelManager(Z, A, 0, infile);
468 }
469 
470 const G4LevelManager*
472  std::ifstream& infile)
473 {
474  G4bool allLevels = fParam->StoreAllLevels();
476 
477  static const G4double fkev = CLHEP::keV;
478  G4int nlevels = (0 == nlev) ? fLevelMax : nlev;
479  if(fVerbose > 0) {
480  G4cout << "## New isotope Z= " << Z << " A= " << A;
481  if(nlevels < fLevelMax) { G4cout << " Nlevels= " << nlevels; }
482  G4cout << G4endl;
483  }
484  if(nlevels > fLevelMax) {
485  fLevelMax = nlevels;
486  vEnergy.resize(fLevelMax,0.0f);
487  vTime.resize(fLevelMax,0.0f);
488  vTimeg.resize(fLevelMax,0.0f);
489  vSpin.resize(fLevelMax,0);
490  vLevel.resize(fLevelMax,0);
491  vMeta.resize(fLevelMax,0);
492  vIndexDB.resize(fLevelMax,-1);
493  }
494  G4int ntrans(0), i(0), i1, i2, i3, j, k;
495  G4String xf(" ");
496  G4float x, x1;
497 
498  for(G4int ii=0; ii<nlevels; ++ii) {
499 
500  infile >> i1 >> xf;
501  if(infile.eof()) {
502  if(fVerbose > 1) {
503  G4cout << "### End of file Z= " << Z << " A= " << A
504  << " Nlevels= " << ii << G4endl;
505  }
506  break;
507  }
508  if(!(ReadDataItem(infile,fEnergy) &&
509  ReadDataItem(infile,fTime) &&
510  ReadDataItem(infile,fSpin) &&
511  ReadDataItem(infile,ntrans))) {
512  if(fVerbose > 1) {
513  G4cout << "### End of file Z= " << Z << " A= " << A
514  << " Nlevels= " << ii << G4endl;
515  }
516  break;
517  }
518  fTime = std::max(fTime, 0.0);
519  fEnergy *= fkev;
520  for(k=0; k<nfloting; ++k) {
521  if(xf == fFloatingLevels[k]) {
522  break;
523  }
524  }
525 
526  // if a previous level has not transitions it may be ignored
527  if(0 < ii) {
528  // do not store level without transitions
529  if(!allLevels && 0 == k && 0 == ntrans) { continue; }
530 
531  // protection
532  if(fEnergy < vEnergy[i-1]) {
533  G4cout << "### G4LevelReader: broken level " << ii
534  << " E(MeV)= " << fEnergy << " < " << vEnergy[i-1]
535  << " for isotope Z= " << Z << " A= "
536  << A << " level energy increased" << G4endl;
537  fEnergy = vEnergy[i-1];
538  }
539  // upper limit
540  if(fEnergy > emax) { break; }
541  }
542  vEnergy[i] = (G4float)fEnergy;
543  vTime[i] = (G4float)(fTime*fTimeFactor);
544  vTimeg[i] = vTime[i];
545  if(fSpin > 20.0) { fSpin = 0.0; }
546  vSpin[i] = (G4int)(fSpin + fSpin);
547  vMeta[i] = k;
548  vIndexDB[ii] = i;
549  if(fVerbose > 1) {
550  G4cout << " Level #" << i1 << " E(MeV)= " << fEnergy/CLHEP::MeV
551  << " LTime(s)= " << fTime << " 2S= " << vSpin[i]
552  << " meta= " << vMeta[i] << " idx= " << i << " ii= " << ii
553  << " ntr= " << ntrans << G4endl;
554  }
555  vLevel[i] = nullptr;
556  if(ntrans > 0) {
557 
558  // there are transitions
559  if(ntrans > fTransMax) {
560  fTransMax = ntrans;
561  vIndex.resize(fTransMax);
562  vTrans.resize(fTransMax);
563  vRatio.resize(fTransMax);
568  vMpRatio.resize(fTransMax);
569  }
570  fNorm1 = fNorm2 = 0.0f;
571  j = 0;
572  for(G4int jj=0; jj<ntrans; ++jj) {
573 
574  if(!(ReadDataItem(infile,i2) &&
575  ReadDataItem(infile,fTrEnergy) &&
576  ReadDataItem(infile,fProb) &&
577  ReadDataItem(infile,vTrans[j]) &&
578  ReadDataItem(infile,fRatio) &&
579  ReadDataItem(infile,fAlpha))) {
580  //infile >>i2 >> fTrEnergy >> fProb >> vTrans[j] >> fRatio >> fAlpha;
581  //if(infile.fail()) {
582  if(fVerbose > 0) {
583  G4cout << "### Fail to read transition j= " << j
584  << " Z= " << Z << " A= " << A << G4endl;
585  }
586  break;
587  }
588  if(i2 >= ii) {
589  G4cout << "### G4LevelReader: broken transition " << j
590  << " from level " << ii << " to " << i2
591  << " for isotope Z= " << Z << " A= "
592  << A << " - use ground level" << G4endl;
593  i2 = 0;
594  }
595  i3 = vIndexDB[std::abs(i2)];
596 
597  if(i3 >= 0) {
598  vIndex[j] = i3;
599  x = 1.0f + std::max((G4float)fAlpha,0.0f);
600  x1= (G4float)fProb;
601  fNorm1 += x1;
602  fNorm2 += x*x1;
605  vGammaProbability[j] = 1.0f/x;
606  vRatio[j] = (G4float)fRatio;
607  vShellProbability[j] = nullptr;
608  if(fVerbose > 1) {
609  fTrEnergy *= fkev;
610  G4int prec = G4cout.precision(4);
611  G4cout << "### Transition #" << j << " to level " << vIndex[j]
612  << " i2= " << i2 << " Etrans(MeV)= " << fTrEnergy
613  << " fProb= " << fProb << " MultiP= " << vTrans[j]
614  << " fMpRatio= " << fRatio << " fAlpha= " << fAlpha
615  << G4endl;
616  G4cout.precision(prec);
617  }
618  }
619  if(fAlpha > 0.0) {
620  for(k=0; k<10; ++k) {
621  //infile >> fICC[k];
622  if(!ReadDataItem(infile,fICC[k])) {
623  //if(infile.fail()) {
624  if(fVerbose > 0) {
625  G4cout << "### Fail to read convertion coeff k= " << k
626  << " for transition j= " << j
627  << " Z= " << Z << " A= " << A << G4endl;
628  }
629  break;
630  }
631  }
632  if(i3 >= 0) {
634  if(!vShellProbability[j]) { vGammaProbability[j] = 1.0f; }
635  }
636  }
637  if(i3 >= 0) { ++j; }
638  }
639  if(j > 0) {
640  if(0.0f < fNorm1) {
641  fNorm1 = 1.0f/fNorm1;
642  vTimeg[i] *= fNorm2*fNorm1;
643  fNorm2 = 1.0f/fNorm2;
644  }
645  G4int nt = j - 1;
646  for(k=0; k<nt; ++k) {
649  if(fVerbose > 2) {
650  G4cout << "Probabilities[" << k
651  << "]= " << vGammaCumProbability[k]
652  << " " << vGammaECumProbability[k]
653  << " idxTrans= " << vIndex[k]
654  << G4endl;
655  }
656  }
657  vGammaCumProbability[nt] = 1.0f;
658  vGammaECumProbability[nt] = 1.0f;
659  if(fVerbose > 2) {
660  G4cout << "Probabilities[" << nt << "]= "
661  << vGammaCumProbability[nt]
662  << " " << vGammaECumProbability[nt]
663  << " IdxTrans= " << vIndex[nt]
664  << G4endl;
665  }
666  vLevel[i] = new G4NucLevel((size_t)j,
667  vIndex,
668  vTrans,
672  vMpRatio,
674  }
675  }
676  ++i;
677  }
678  G4LevelManager* lman = nullptr;
679  if(1 < i) {
680  lman = new G4LevelManager((size_t)i,vEnergy,vTime,vTimeg,
681  vSpin,vMeta,vLevel);
682  if(fVerbose > 0) {
683  G4cout << "=== Reader: new manager for Z= " << Z << " A= " << A
684  << " Nlevels= " << i << " E[0]= "
685  << vEnergy[0]/CLHEP::MeV << " MeV Emax= "
686  << vEnergy[i-1]/CLHEP::MeV << " MeV "
687  << G4endl;
688  }
689  }
690  for(G4int ii=0; ii<nlevels; ++ii) {
691  vIndexDB[ii] = -1;
692  }
693  return lman;
694 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
char buffer[nbufmax]
std::vector< G4int > vSpin
G4double fCurrEnergy
std::vector< G4float > vRatio
G4double fICC[10]
std::vector< const G4NucLevel * > vLevel
float G4float
Definition: G4Types.hh:77
G4LevelReader(G4NuclearLevelData *)
const std::vector< G4float > * NormalizedICCProbability(G4int Z)
const G4LevelManager * MakeLevelManager(G4int Z, G4int A, const G4String &filename)
G4double fEnergy
G4DeexPrecoParameters * fParam
const G4LevelManager * LevelManager(G4int Z, G4int A, G4int nlev, std::ifstream &infile)
static const G4int nfloting
static constexpr double second
Definition: G4SIunits.hh:157
const G4LevelManager * CreateLevelManagerNEW(G4int Z, G4int A)
int G4int
Definition: G4Types.hh:78
G4bool ReadData(std::istringstream &dataFile, G4double &x)
G4double logZ(G4int Z) const
Definition: G4Pow.hh:166
std::vector< G4float > vTime
static const double prec
Definition: RanecuEngine.cc:58
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
char buff2[nbuf2]
bool G4bool
Definition: G4Types.hh:79
G4bool ReadDataItem(std::istream &dataFile, G4double &x)
std::vector< G4float > vTimeg
G4DeexPrecoParameters * GetParameters()
std::vector< size_t > vIndex
static constexpr double eV
Definition: G4SIunits.hh:215
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static const G4double emax
std::vector< const std::vector< G4float > * > vShellProbability
T max(const T t1, const T t2)
brief Return the largest of the two arguments
std::vector< G4int > vTrans
static G4String fFloatingLevels[nfloting]
static const G4int LL[nN]
std::vector< G4int > vMeta
G4double GetMaxLevelEnergy(G4int Z, G4int A) const
std::vector< G4float > vGammaCumProbability
#define G4endl
Definition: G4ios.hh:61
G4double fTrEnergy
static constexpr double MeV
Definition: G4SIunits.hh:214
const G4LevelManager * MakeLevelManagerNEW(G4int Z, G4int A, const G4String &filename)
G4String fDirectory
static const G4int nbuf2
const G4LevelManager * CreateLevelManager(G4int Z, G4int A)
std::vector< G4float > vGammaECumProbability
double G4double
Definition: G4Types.hh:76
G4NuclearLevelData * fData
G4double fTimeFactor
#define FLT_MAX
Definition: templates.hh:99
#define DBL_MAX
Definition: templates.hh:83
static constexpr double keV
Definition: G4SIunits.hh:216
std::vector< G4int > vIndexDB
G4float MaxLevelEnergy() const
std::vector< G4float > vEnergy
std::vector< G4float > vGammaProbability
G4double fMinProbability
std::vector< G4float > vMpRatio
static const G4int nbufmax