#include <G4NuclearLevelManager.hh>
Public Member Functions | |
G4NuclearLevelManager (G4int Z, G4int A, const G4String &filename) | |
G4NuclearLevelManager (const G4NuclearLevelManager &right) | |
~G4NuclearLevelManager () | |
void | SetNucleus (G4int Z, G4int A, const G4String &filename) |
G4bool | IsValid () const |
G4int | NumberOfLevels () const |
const G4NuclearLevel * | GetLevel (G4int i) const |
const G4NuclearLevel * | NearestLevel (G4double energy, G4double eDiffMax=9999.*CLHEP::GeV) const |
const G4NuclearLevel * | LowestLevel () const |
const G4NuclearLevel * | HighestLevel () const |
G4double | MinLevelEnergy () const |
G4double | MaxLevelEnergy () const |
void | PrintAll () |
Definition at line 65 of file G4NuclearLevelManager.hh.
Definition at line 67 of file G4NuclearLevelManager.cc.
00067 : 00068 _nucleusA(A), _nucleusZ(Z), _fileName(filename), _validity(false), 00069 _levels(0), _levelEnergy(0), _gammaEnergy(0), _probability(0) 00070 { 00071 if (A <= 0 || Z <= 0 || Z > A ) 00072 throw G4HadronicException(__FILE__, __LINE__, "==== G4NuclearLevelManager ==== (Z,A) <0, or Z>A"); 00073 00074 MakeLevels(); 00075 }
G4NuclearLevelManager::G4NuclearLevelManager | ( | const G4NuclearLevelManager & | right | ) |
Definition at line 367 of file G4NuclearLevelManager.cc.
References _angularMomentum, _fileName, _gammaEnergy, _halfLife, _kCC, _l1CC, _l2CC, _l3CC, _levelEnergy, _levels, _m1CC, _m2CC, _m3CC, _m4CC, _m5CC, _nPlusCC, _nucleusA, _nucleusZ, _polarity, _probability, _totalCC, _validity, buffer, GetLevel(), and CLHEP::detail::n.
00368 { 00369 _levelEnergy = right._levelEnergy; 00370 _gammaEnergy = right._gammaEnergy; 00371 _probability = right._probability; 00372 _polarity = right._polarity; 00373 _halfLife = right._halfLife; 00374 _angularMomentum = right._angularMomentum; 00375 _kCC = right._kCC; 00376 _l1CC = right._l1CC; 00377 _l2CC = right._l2CC; 00378 _l3CC = right._l3CC; 00379 _m1CC = right._m1CC; 00380 _m2CC = right._m2CC; 00381 _m3CC = right._m3CC; 00382 _m4CC = right._m4CC; 00383 _m5CC = right._m5CC; 00384 _nPlusCC = right._nPlusCC; 00385 _totalCC = right._totalCC; 00386 _nucleusA = right._nucleusA; 00387 _nucleusZ = right._nucleusZ; 00388 _fileName = right._fileName; 00389 _validity = right._validity; 00390 00391 if (right._levels != 0) 00392 { 00393 _levels = new G4PtrLevelVector; 00394 G4int n = right._levels->size(); 00395 G4int i; 00396 for (i=0; i<n; ++i) 00397 { 00398 _levels->push_back(new G4NuclearLevel(*(right.GetLevel(i)))); 00399 } 00400 00401 G4PtrSort<G4NuclearLevel>(_levels); 00402 } 00403 else 00404 { 00405 _levels = 0; 00406 } 00407 for (G4int i=0; i<30; ++i) { 00408 buffer[i] = right.buffer[i]; 00409 } 00410 }
G4NuclearLevelManager::~G4NuclearLevelManager | ( | ) |
const G4NuclearLevel * G4NuclearLevelManager::GetLevel | ( | G4int | i | ) | const |
Definition at line 96 of file G4NuclearLevelManager.cc.
References NumberOfLevels().
Referenced by G4ContinuumGammaTransition::G4ContinuumGammaTransition(), G4NuclearLevelManager(), NearestLevel(), and PrintAll().
00096 { 00097 return (i>=0 && i<NumberOfLevels()) ? (*_levels)[i] : 0; 00098 }
const G4NuclearLevel * G4NuclearLevelManager::HighestLevel | ( | ) | const |
Definition at line 141 of file G4NuclearLevelManager.cc.
References NumberOfLevels().
00142 { 00143 return (NumberOfLevels() > 0) ? _levels->front() : 0; 00144 }
G4bool G4NuclearLevelManager::IsValid | ( | ) | const [inline] |
Definition at line 78 of file G4NuclearLevelManager.hh.
Referenced by G4DiscreteGammaDeexcitation::CreateTransition().
const G4NuclearLevel * G4NuclearLevelManager::LowestLevel | ( | ) | const |
Definition at line 147 of file G4NuclearLevelManager.cc.
References NumberOfLevels().
00148 { 00149 return (NumberOfLevels() > 0) ? _levels->back() : 0; 00150 }
G4double G4NuclearLevelManager::MaxLevelEnergy | ( | ) | const |
Definition at line 135 of file G4NuclearLevelManager.cc.
References NumberOfLevels().
Referenced by G4DiscreteGammaDeexcitation::CanDoTransition(), G4ContinuumGammaDeexcitation::CanDoTransition(), G4ContinuumGammaTransition::G4ContinuumGammaTransition(), and PrintAll().
00136 { 00137 return (NumberOfLevels() > 0) ? _levels->back()->Energy() : 0.*GeV; 00138 }
G4double G4NuclearLevelManager::MinLevelEnergy | ( | ) | const |
Definition at line 129 of file G4NuclearLevelManager.cc.
References NumberOfLevels().
Referenced by G4DiscreteGammaDeexcitation::CanDoTransition(), G4ContinuumGammaTransition::G4ContinuumGammaTransition(), and PrintAll().
00130 { 00131 return (NumberOfLevels() > 0) ? _levels->front()->Energy() : 9999.*GeV; 00132 }
const G4NuclearLevel * G4NuclearLevelManager::NearestLevel | ( | G4double | energy, | |
G4double | eDiffMax = 9999.*CLHEP::GeV | |||
) | const |
Definition at line 102 of file G4NuclearLevelManager.cc.
References G4NuclearLevel::Energy(), GetLevel(), and NumberOfLevels().
Referenced by G4RadioactiveDecay::AddDecayRateTable(), G4DiscreteGammaDeexcitation::CanDoTransition(), G4DiscreteGammaDeexcitation::CreateTransition(), and G4ContinuumGammaTransition::SelectGamma().
00104 { 00105 if (NumberOfLevels() <= 0) return 0; 00106 00107 G4int iNear = -1; 00108 00109 //G4cout << "G4NuclearLevelManager::NearestLevel E(MeV)= " 00110 // << energy/MeV << " dEmax(MeV)= " << eDiffMax/MeV << G4endl; 00111 00112 G4double diff = 9999. * GeV; 00113 for (unsigned int i=0; i<_levels->size(); i++) 00114 { 00115 G4double e = GetLevel(i)->Energy(); 00116 G4double eDiff = std::abs(e - energy); 00117 //G4cout << i << ". eDiff(MeV)= " << eDiff/MeV << G4endl; 00118 if (eDiff < diff && eDiff <= eDiffMax) 00119 { 00120 diff = eDiff; 00121 iNear = i; 00122 } 00123 } 00124 00125 return GetLevel(iNear); // Includes range checking on iNear 00126 }
G4int G4NuclearLevelManager::NumberOfLevels | ( | ) | const [inline] |
Definition at line 80 of file G4NuclearLevelManager.hh.
Referenced by G4RadioactiveDecay::AddDecayRateTable(), G4ContinuumGammaTransition::G4ContinuumGammaTransition(), GetLevel(), HighestLevel(), LowestLevel(), MaxLevelEnergy(), MinLevelEnergy(), NearestLevel(), and PrintAll().
void G4NuclearLevelManager::PrintAll | ( | ) |
Definition at line 353 of file G4NuclearLevelManager.cc.
References G4cout, G4endl, GetLevel(), MaxLevelEnergy(), MinLevelEnergy(), and NumberOfLevels().
00354 { 00355 G4int nLevels = NumberOfLevels(); 00356 00357 G4cout << " ==== G4NuclearLevelManager ==== (" << _nucleusZ << ", " << _nucleusA 00358 << ") has " << nLevels << " levels" << G4endl 00359 << "Highest level is at energy " << MaxLevelEnergy() << " MeV " 00360 << G4endl << "Lowest level is at energy " << MinLevelEnergy() 00361 << " MeV " << G4endl; 00362 00363 for (G4int i=0; i<nLevels; i++) 00364 GetLevel(i)->PrintAll(); 00365 }
Definition at line 82 of file G4NuclearLevelManager.cc.
00083 { 00084 if (A <= 0 || Z <= 0 || Z > A ) 00085 throw G4HadronicException(__FILE__, __LINE__, "==== G4NuclearLevelManager ==== (Z,A) <0, or Z>A"); 00086 00087 if (_nucleusZ != Z || _nucleusA != A) 00088 { 00089 _nucleusA = A; 00090 _nucleusZ = Z; 00091 _fileName = filename; 00092 MakeLevels(); 00093 } 00094 }