Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4NuclearLevelManager Class Reference

#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 G4NuclearLevelGetLevel (G4int i) const
 
const G4NuclearLevelNearestLevel (G4double energy, G4double eDiffMax=9999.*CLHEP::GeV) const
 
const G4NuclearLevelLowestLevel () const
 
const G4NuclearLevelHighestLevel () const
 
G4double MinLevelEnergy () const
 
G4double MaxLevelEnergy () const
 
void PrintAll ()
 

Detailed Description

Definition at line 65 of file G4NuclearLevelManager.hh.

Constructor & Destructor Documentation

G4NuclearLevelManager::G4NuclearLevelManager ( G4int  Z,
G4int  A,
const G4String filename 
)

Definition at line 62 of file G4NuclearLevelManager.cc.

63  :
64  _nucleusA(A), _nucleusZ(Z), _fileName(filename), _validity(false),
65  _levels(0), _levelEnergy(0), _gammaEnergy(0), _probability(0)
66 {
67  if (A <= 0 || Z <= 0 || Z > A ) {
68  throw G4HadronicException(__FILE__, __LINE__,
69  "==== G4NuclearLevelManager ==== (Z,A) <0, or Z>A");
70  }
71  for(G4int i=0; i<30; ++i) { buffer[i] = 0; }
72  MakeLevels();
73 }
int G4int
Definition: G4Types.hh:78
G4NuclearLevelManager::G4NuclearLevelManager ( const G4NuclearLevelManager right)

Definition at line 363 of file G4NuclearLevelManager.cc.

References GetLevel(), and n.

364 {
365  _levelEnergy = right._levelEnergy;
366  _gammaEnergy = right._gammaEnergy;
367  _probability = right._probability;
368  _polarity = right._polarity;
369  _halfLife = right._halfLife;
370  _angularMomentum = right._angularMomentum;
371  _kCC = right._kCC;
372  _l1CC = right._l1CC;
373  _l2CC = right._l2CC;
374  _l3CC = right._l3CC;
375  _m1CC = right._m1CC;
376  _m2CC = right._m2CC;
377  _m3CC = right._m3CC;
378  _m4CC = right._m4CC;
379  _m5CC = right._m5CC;
380  _nPlusCC = right._nPlusCC;
381  _totalCC = right._totalCC;
382  _nucleusA = right._nucleusA;
383  _nucleusZ = right._nucleusZ;
384  _fileName = right._fileName;
385  _validity = right._validity;
386 
387  for(G4int i=0; i<30; ++i) { buffer[i] = 0; }
388 
389  if (right._levels != 0)
390  {
391  _levels = new G4PtrLevelVector;
392  G4int n = right._levels->size();
393  G4int i;
394  for (i=0; i<n; ++i)
395  {
396  _levels->push_back(new G4NuclearLevel(*(right.GetLevel(i))));
397  }
398  G4PtrSort<G4NuclearLevel>(_levels);
399  }
400  else
401  {
402  _levels = 0;
403  }
404 }
int G4int
Definition: G4Types.hh:78
std::vector< G4NuclearLevel * > G4PtrLevelVector
const G4NuclearLevel * GetLevel(G4int i) const
const G4int n
G4NuclearLevelManager::~G4NuclearLevelManager ( )

Definition at line 75 of file G4NuclearLevelManager.cc.

76 {
77  ClearLevels();
78 }

Member Function Documentation

const G4NuclearLevel * G4NuclearLevelManager::GetLevel ( G4int  i) const

Definition at line 95 of file G4NuclearLevelManager.cc.

References NumberOfLevels().

Referenced by G4ContinuumGammaTransition::G4ContinuumGammaTransition(), G4NuclearLevelManager(), NearestLevel(), and PrintAll().

95  {
96  return (i>=0 && i<NumberOfLevels()) ? (*_levels)[i] : 0;
97 }
const G4NuclearLevel * G4NuclearLevelManager::HighestLevel ( ) const

Definition at line 136 of file G4NuclearLevelManager.cc.

References NumberOfLevels().

137 {
138  return (NumberOfLevels() > 0) ? _levels->front() : 0;
139 }
G4bool G4NuclearLevelManager::IsValid ( void  ) const
inline

Definition at line 78 of file G4NuclearLevelManager.hh.

Referenced by G4DiscreteGammaDeexcitation::CreateTransition().

78 { return _validity; }
const G4NuclearLevel * G4NuclearLevelManager::LowestLevel ( ) const

Definition at line 141 of file G4NuclearLevelManager.cc.

References NumberOfLevels().

142 {
143  return (NumberOfLevels() > 0) ? _levels->back() : 0;
144 }
G4double G4NuclearLevelManager::MaxLevelEnergy ( ) const
G4double G4NuclearLevelManager::MinLevelEnergy ( ) const

Definition at line 126 of file G4NuclearLevelManager.cc.

References python.hepunit::GeV, and NumberOfLevels().

Referenced by G4DiscreteGammaDeexcitation::CanDoTransition(), G4ContinuumGammaTransition::G4ContinuumGammaTransition(), and PrintAll().

127 {
128  return (NumberOfLevels() > 0) ? _levels->front()->Energy() : 9999.*GeV;
129 }
const G4NuclearLevel * G4NuclearLevelManager::NearestLevel ( G4double  energy,
G4double  eDiffMax = 9999.*CLHEP::GeV 
) const

Definition at line 100 of file G4NuclearLevelManager.cc.

References G4NuclearLevel::Energy(), GetLevel(), python.hepunit::GeV, and NumberOfLevels().

Referenced by G4RadioactiveDecay::AddDecayRateTable(), G4DiscreteGammaDeexcitation::CanDoTransition(), G4DiscreteGammaDeexcitation::CreateTransition(), and G4ContinuumGammaTransition::SelectGamma().

102 {
103  if (NumberOfLevels() <= 0) return 0;
104 
105  G4int iNear = -1;
106 
107  //G4cout << "G4NuclearLevelManager::NearestLevel E(MeV)= "
108  // << energy/MeV << " dEmax(MeV)= " << eDiffMax/MeV << G4endl;
109 
110  G4double diff = 9999. * GeV;
111  for (unsigned int i=0; i<_levels->size(); i++)
112  {
113  G4double e = GetLevel(i)->Energy();
114  G4double eDiff = std::abs(e - energy);
115  //G4cout << i << ". eDiff(MeV)= " << eDiff/MeV << G4endl;
116  if (eDiff < diff && eDiff <= eDiffMax)
117  {
118  diff = eDiff;
119  iNear = i;
120  }
121  }
122 
123  return GetLevel(iNear); // Includes range checking on iNear
124 }
G4double Energy() const
int G4int
Definition: G4Types.hh:78
double precision function energy(A, Z)
Definition: dpm25nuc6.f:4106
const G4NuclearLevel * GetLevel(G4int i) const
double G4double
Definition: G4Types.hh:76
G4int G4NuclearLevelManager::NumberOfLevels ( ) const
inline
void G4NuclearLevelManager::PrintAll ( void  )

Definition at line 349 of file G4NuclearLevelManager.cc.

References G4cout, G4endl, GetLevel(), MaxLevelEnergy(), MinLevelEnergy(), NumberOfLevels(), and G4NuclearLevel::PrintAll().

350 {
351  G4int nLevels = NumberOfLevels();
352 
353  G4cout << " ==== G4NuclearLevelManager ==== (" << _nucleusZ << ", " << _nucleusA
354  << ") has " << nLevels << " levels" << G4endl
355  << "Highest level is at energy " << MaxLevelEnergy() << " MeV "
356  << G4endl << "Lowest level is at energy " << MinLevelEnergy()
357  << " MeV " << G4endl;
358 
359  for (G4int i=0; i<nLevels; i++)
360  GetLevel(i)->PrintAll();
361 }
G4double MinLevelEnergy() const
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
void PrintAll() const
const G4NuclearLevel * GetLevel(G4int i) const
#define G4endl
Definition: G4ios.hh:61
G4double MaxLevelEnergy() const
void G4NuclearLevelManager::SetNucleus ( G4int  Z,
G4int  A,
const G4String filename 
)

Definition at line 80 of file G4NuclearLevelManager.cc.

81 {
82  if (A <= 0 || Z <= 0 || Z > A ) {
83  throw G4HadronicException(__FILE__, __LINE__,
84  "==== G4NuclearLevelManager ==== (Z,A) <0, or Z>A");
85  }
86  if (_nucleusZ != Z || _nucleusA != A)
87  {
88  _nucleusA = A;
89  _nucleusZ = Z;
90  _fileName = filename;
91  MakeLevels();
92  }
93 }

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