47 : nLevels(0),nLevelMax(50),fVerbose(0),fMinProbability(1.
e-10)
49 fLevelEnergy = fNewEnergy = fDeltaEnergy = fNewTime
50 = fHalfLifeTime = fProbability = fICC = fx = 0.0;
51 eGamma.resize(nLevelMax,0.0);
52 wGamma.resize(nLevelMax,0.0);
53 kICC.resize(nLevelMax,0.0);
54 for(
G4int i=0; i<30; ++i) { buffer[i] = 0; }
61 std::vector<G4NucLevel*>* levels,
64 std::ifstream inFile(filename);
65 if (!inFile.is_open()) {
67 G4cout <<
" G4LevelReader: nuclide ("
69 <<
") does not have a gamma levels file" <<
G4endl;
82 if(fNewEnergy != fLevelEnergy) {
83 if(0 < nLevels) { MakeNewLevel(levels); }
84 fLevelEnergy = fNewEnergy;
85 fHalfLifeTime = fNewTime;
90 eGamma[nLevels] = fDeltaEnergy*
keV;
91 wGamma[nLevels] = std::max(fProbability*0.01,fMinProbability);
96 if(nLevels > nLevelMax) {
98 eGamma.resize(nLevelMax);
99 wGamma.resize(nLevelMax);
100 kICC.resize(nLevelMax);
105 MakeNewLevel(levels);
110 G4bool G4LevelReader::Read(std::ifstream& dataFile)
113 return (ReadDataItem(dataFile, fNewEnergy) &&
114 ReadDataItem(dataFile, fDeltaEnergy) &&
115 ReadDataItem(dataFile, fProbability) &&
116 ReadDataItem(dataFile, fx) &&
117 ReadDataItem(dataFile, fNewTime) &&
118 ReadDataItem(dataFile, fx) &&
119 ReadDataItem(dataFile, fICC) &&
120 ReadDataItem(dataFile, fx) &&
121 ReadDataItem(dataFile, fx) &&
122 ReadDataItem(dataFile, fx) &&
123 ReadDataItem(dataFile, fx) &&
124 ReadDataItem(dataFile, fx) &&
125 ReadDataItem(dataFile, fx) &&
126 ReadDataItem(dataFile, fx) &&
127 ReadDataItem(dataFile, fx) &&
128 ReadDataItem(dataFile, fx) &&
129 ReadDataItem(dataFile, fx) );
133 G4LevelReader::ReadDataItem(std::istream& dataFile,
G4double&
x)
135 G4bool okay = (dataFile >> buffer);
136 if (okay) x = strtod(buffer, NULL);
141 void G4LevelReader::MakeNewLevel(std::vector<G4NucLevel*>* levels)
145 for(
size_t i=0; i<nLevels; ++i) { norm += wGamma[i]; }
148 if(norm <= 0.0) {
return; }
151 for(
size_t i=0; i<nLevels; ++i) { wGamma[i] *=
norm; }
155 for(
size_t i=0; i<nLevels; ++i) {
156 wGamma[i] /= (1.0 + kICC[i]);
160 fHalfLifeTime *= norm*
second;
165 }
else if(2 == nLevels) {
170 for(
size_t i=1; i<nLevels-1; ++i) {
171 wGamma[i] = wGamma[i]*norm + wGamma[i-1];
173 wGamma[nLevels-1] = 1.0;
177 levels->push_back(p);