50G4String G4LevelManager::fFloatingLevels[] = {
51 "-",
"+X",
"+Y",
"+Z",
"+U",
"+V",
"+W",
"+R",
"+S",
"+T",
"+A",
"+B",
"+C"};
54 const std::vector<G4double>& energies,
55 const std::vector<G4int>& spin,
56 const std::vector<const G4NucLevel*>& levels)
60 nTransitions = ntrans - 1;
61 fLevelEnergy.reserve(ntrans);
62 fSpin.reserve(ntrans);
63 fLevels.reserve(ntrans);
64 for(std::size_t i=0; i<ntrans; ++i) {
65 fLevelEnergy.push_back(energies[i]);
66 fSpin.push_back(spin[i]);
67 fLevels.push_back(levels[i]);
73 fLevelDensity = ndata->GetLevelDensity(
Z,
A, 0.0);
76 fShellCorrection = ndata->GetShellCorrection()->GetShellCorrection(
A,
Z);
82 if(In == 0 && Iz == 0) {
83 fLevelDensity = 0.067946*
A*(1.0 + 4.1277*a13);
84 }
else if(In == 0 && Iz == 1) {
85 fLevelDensity = 0.053061*
A*(1.0 + 7.1862*a13);
86 }
else if(In == 1 && Iz == 0) {
87 fLevelDensity = 0.060920*
A*(1.0 + 3.8767*a13);
89 fLevelDensity = 0.065291*
A*(1.0 + 4.4505*a13);
96 for(std::size_t i=0; i<=nTransitions; ++i) {
delete fLevels[i]; }
100 const std::size_t index)
const
102 std::size_t idx = std::min(index, nTransitions);
103 static const G4double tolerance = 10*CLHEP::eV;
104 if(0 == nTransitions || std::abs(energy - fLevelEnergy[idx]) <= tolerance) {
108 if(idx < nTransitions &&
109 (fLevelEnergy[idx] + fLevelEnergy[idx+1])*0.5 <= energy) { ++idx; }
116 return fFloatingLevels[fSpin[i]/100000];
121 for(std::size_t i=0; i<=nTransitions; ++i) {
122 G4long prec = out.precision(6);
123 out << std::setw(6) << i <<
". "
124 << std::setw(8) << fLevelEnergy[i];
126 out << std::setw(8) << fLevels[i]->GetTimeGamma()
127 << std::setw(4) << fLevels[i]->NumberOfTransitions()
129 << std::setw(4) <<
Parity(i)
134 if(fLevels[i]) { fLevels[i]->StreamInfo(out); }
void StreamInfo(std::ostream &os) const
std::size_t NearestLevelIndex(const G4double energy, const std::size_t index=0) const
G4int FloatingLevel(const std::size_t i) const
G4int SpinTwo(const std::size_t i) const
const G4String & FloatingType(const std::size_t i) const
G4LevelManager(G4int Z, G4int A, std::size_t nlev, const std::vector< G4double > &energies, const std::vector< G4int > &spin, const std::vector< const G4NucLevel * > &levels)
std::size_t NearestLowEdgeLevelIndex(const G4double energy) const
G4int Parity(const std::size_t i) const
static G4NuclearLevelData * GetInstance()
static G4Pow * GetInstance()
G4double Z13(G4int Z) const