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

#include <G4DiscreteGammaTransition.hh>

Inheritance diagram for G4DiscreteGammaTransition:
G4VGammaTransition

Public Member Functions

 G4DiscreteGammaTransition (const G4NuclearLevel &level, G4int Z, G4int A)
 
virtual ~G4DiscreteGammaTransition ()
 
virtual void SetEnergyFrom (G4double energy)
 
virtual G4double GetGammaEnergy ()
 
virtual G4double GetGammaCreationTime ()
 
virtual void SelectGamma ()
 
void SetICM (G4bool ic)
 
G4bool GetICM () const
 
G4double GetBondEnergy ()
 
G4int GetOrbitNumber ()
 
G4bool IsAGamma ()
 
- Public Member Functions inherited from G4VGammaTransition
 G4VGammaTransition ()
 
virtual ~G4VGammaTransition ()
 

Additional Inherited Members

- Protected Attributes inherited from G4VGammaTransition
G4int _verbose
 

Detailed Description

Definition at line 79 of file G4DiscreteGammaTransition.hh.

Constructor & Destructor Documentation

G4DiscreteGammaTransition::G4DiscreteGammaTransition ( const G4NuclearLevel level,
G4int  Z,
G4int  A 
)

Definition at line 78 of file G4DiscreteGammaTransition.cc.

References G4VGammaTransition::_verbose.

79  : _nucleusZ(Z), _orbitE(-1), _bondE(0.), _aGamma(true), _icm(false),
80  _gammaEnergy(0.), _level(level), _excitation(0.), _gammaCreationTime(0.)
81 {
82  _levelManager = 0;
83  _verbose = 0;
84  //JMQ: added tolerence in the mismatch
85  //VI: increased tolerence
86  _tolerance = 10*CLHEP::keV;
87 }
G4DiscreteGammaTransition::~G4DiscreteGammaTransition ( )
virtual

Definition at line 89 of file G4DiscreteGammaTransition.cc.

90 {}

Member Function Documentation

G4double G4DiscreteGammaTransition::GetBondEnergy ( )
inline

Definition at line 100 of file G4DiscreteGammaTransition.hh.

Referenced by G4VGammaDeexcitation::GenerateGamma().

100 {return _bondE;};
G4double G4DiscreteGammaTransition::GetGammaCreationTime ( )
virtual

Implements G4VGammaTransition.

Definition at line 235 of file G4DiscreteGammaTransition.cc.

236 {
237  return _gammaCreationTime;
238 }
G4double G4DiscreteGammaTransition::GetGammaEnergy ( )
virtual

Implements G4VGammaTransition.

Definition at line 230 of file G4DiscreteGammaTransition.cc.

231 {
232  return _gammaEnergy;
233 }
G4bool G4DiscreteGammaTransition::GetICM ( ) const
inline

Definition at line 99 of file G4DiscreteGammaTransition.hh.

Referenced by G4VGammaDeexcitation::GenerateGamma().

99 { return _icm;};
G4int G4DiscreteGammaTransition::GetOrbitNumber ( )
inline

Definition at line 101 of file G4DiscreteGammaTransition.hh.

Referenced by G4VGammaDeexcitation::GenerateGamma().

101 {return _orbitE;};
G4bool G4DiscreteGammaTransition::IsAGamma ( )
inline

Definition at line 102 of file G4DiscreteGammaTransition.hh.

Referenced by G4VGammaDeexcitation::GenerateGamma().

102 {return _aGamma;};
void G4DiscreteGammaTransition::SelectGamma ( )
virtual

Implements G4VGammaTransition.

Definition at line 92 of file G4DiscreteGammaTransition.cc.

References G4VGammaTransition::_verbose, G4cout, G4endl, G4Log(), G4UniformRand, G4NuclearLevel::GammaCumulativeProbabilities(), G4NuclearLevel::GammaEnergies(), G4NuclearLevel::GammaWeights(), G4AtomicShells::GetBindingEnergy(), G4Pow::GetInstance(), G4NuclearLevel::HalfLife(), G4NuclearLevel::KConvertionProbabilities(), python.hepunit::keV, G4NuclearLevel::L1ConvertionProbabilities(), G4NuclearLevel::L2ConvertionProbabilities(), G4NuclearLevel::L3ConvertionProbabilities(), G4Pow::logZ(), G4NuclearLevel::M1ConvertionProbabilities(), G4NuclearLevel::M2ConvertionProbabilities(), G4NuclearLevel::M3ConvertionProbabilities(), G4NuclearLevel::M4ConvertionProbabilities(), G4NuclearLevel::M5ConvertionProbabilities(), G4NuclearLevel::NumberOfGammas(), and G4NuclearLevel::TotalConvertionProbabilities().

93 {
94  // default gamma
95  _aGamma = true;
96  _gammaEnergy = 0.;
97 
98  G4int nGammas = _level.NumberOfGammas();
99  if (nGammas > 0)
100  {
101  G4int iGamma = 0;
102  if(1 < nGammas) {
103  G4double random = G4UniformRand();
104 
105  //G4cout << "G4DiscreteGammaTransition::SelectGamma N= "
106  // << nGammas << " rand= " << random << G4endl;
107  for(iGamma=0; iGamma<nGammas; ++iGamma)
108  {
109  //G4cout << iGamma << " prob= "
110  // << (_level.GammaCumulativeProbabilities())[iGamma] << G4endl;
111  if(random <= (_level.GammaCumulativeProbabilities())[iGamma])
112  { break; }
113  }
114  }
115  /*
116  G4cout << "Elevel(MeV)= " << _level.Energy()/MeV
117  << " Etran(MeV)= " << (_level.GammaEnergies())[iGamma]/MeV
118  << " Eexc(MeV)= " << _excitation/MeV << G4endl;
119  */
120 
121  // VI: do not apply correction here in order do not make
122  // double correction
123  //G4double eCorrection = _level.Energy() - _excitation;
124  //_gammaEnergy = (_level.GammaEnergies())[iGamma] - eCorrection;
125  _gammaEnergy = (_level.GammaEnergies())[iGamma];
126 
127  //JMQ:
128  //1)If chosen gamma energy is close enough to excitation energy,
129  // the later is used instead for gamma dacey to gs (it guarantees
130  // energy conservation)
131  //2)For energy conservation, level energy differences instead of
132  // tabulated gamma energies must be used (origin of final fake photons)
133 
134  // VI: remove fake photons - applied only for the last transition
135  // do not applied on each transition
136  if(std::fabs(_excitation - _gammaEnergy) < _tolerance) {
137  _gammaEnergy =_excitation;
138  }
139 
140  // JMQ: Warning: the following check is needed to avoid loops:
141  // Due essentially to missing nuclear levels in data files, it is
142  // possible that _gammaEnergy is so low as the nucleus doesn't change
143  // its level after the transition.
144  // When such case is found, force the full deexcitation of the nucleus.
145  //
146  // NOTE: you should force the transition to the next lower level,
147  // but this change needs a more complex revision of actual
148  // design.
149  // I leave this for a later revision.
150 
151  // VI: the check has no sence and we make this very simple
152  if (_gammaEnergy < _tolerance) {
153  _gammaEnergy = _excitation;
154  }
155 
156  //G4cout << "G4DiscreteGammaTransition::SelectGamma: " << _gammaEnergy
157  // << " _icm: " << _icm << G4endl;
158 
159  // now decide whether Internal Coversion electron should be emitted instead
160  if (_icm) {
161  G4double random = G4UniformRand();
162  if ( random <= (_level.TotalConvertionProbabilities())[iGamma]
163  *(_level.GammaWeights())[iGamma]
164  /((_level.TotalConvertionProbabilities())[iGamma]*(_level.GammaWeights())[iGamma]
165  +(_level.GammaWeights())[iGamma]))
166  {
167  G4int iShell = 9;
168  random = G4UniformRand() ;
169  if ( random <= (_level.KConvertionProbabilities())[iGamma])
170  { iShell = 0;}
171  else if ( random <= (_level.L1ConvertionProbabilities())[iGamma])
172  { iShell = 1;}
173  else if ( random <= (_level.L2ConvertionProbabilities())[iGamma])
174  { iShell = 2;}
175  else if ( random <= (_level.L3ConvertionProbabilities())[iGamma])
176  { iShell = 3;}
177  else if ( random <= (_level.M1ConvertionProbabilities())[iGamma])
178  { iShell = 4;}
179  else if ( random <= (_level.M2ConvertionProbabilities())[iGamma])
180  { iShell = 5;}
181  else if ( random <= (_level.M3ConvertionProbabilities())[iGamma])
182  { iShell = 6;}
183  else if ( random <= (_level.M4ConvertionProbabilities())[iGamma])
184  { iShell = 7;}
185  else if ( random <= (_level.M5ConvertionProbabilities())[iGamma])
186  { iShell = 8;}
187  // the following is needed to match the ishell to that used in G4AtomicShells
188  if ( iShell == 9) {
189  if ( (_nucleusZ < 28) && (_nucleusZ > 20)) {
190  iShell--;
191  } else if ( _nucleusZ == 20 || _nucleusZ == 19 ) {
192  iShell = iShell -2;
193  }
194  }
195  //L.Desorgher 02/11/2011
196  //Atomic shell information is available in Geant4 only up top Z=100
197  //To extend the photo evaporation code to Z>100 the call
198  // to G4AtomicShells::GetBindingEnergy should be forbidden for Z>100
199  _bondE = 0.;
200  if (_nucleusZ <=100)
201  _bondE = G4AtomicShells::GetBindingEnergy(_nucleusZ, iShell);
202  if (_verbose > 0) {
203  G4cout << "G4DiscreteGammaTransition: _nucleusZ = " <<_nucleusZ
204  << " , iShell = " << iShell
205  << " , Shell binding energy = " << _bondE/keV
206  << " keV " << G4endl;
207  }
208 
209  // 09.05.2010 VI : it is an error - cannot subtract bond energy from
210  // transition energy here
211  //_gammaEnergy = _gammaEnergy - _bondE;
212  //G4cout << "_gammaEnergy = " << _gammaEnergy << G4endl;
213 
214  _orbitE = iShell;
215  _aGamma = false ; // emitted is not a gamma now
216  }
217  }
218 
219  G4double tau = _level.HalfLife() / G4Pow::GetInstance()->logZ(2);
220 
221  //09.05.2010 VI rewrite samling of decay time
222  // assuming ordinary exponential low
223  _gammaCreationTime = 0.;
224  if(tau > 0.0) { _gammaCreationTime = -tau*G4Log(G4UniformRand()); }
225 
226  }
227  return;
228 }
const std::vector< G4double > & L2ConvertionProbabilities() const
static G4Pow * GetInstance()
Definition: G4Pow.cc:53
const std::vector< G4double > & M1ConvertionProbabilities() const
G4double HalfLife() const
const std::vector< G4double > & M4ConvertionProbabilities() const
G4int NumberOfGammas() const
const std::vector< G4double > & M2ConvertionProbabilities() const
const std::vector< G4double > & KConvertionProbabilities() const
const std::vector< G4double > & L1ConvertionProbabilities() const
int G4int
Definition: G4Types.hh:78
const std::vector< G4double > & M5ConvertionProbabilities() const
const std::vector< G4double > & GammaEnergies() const
G4double logZ(G4int Z) const
Definition: G4Pow.hh:165
#define G4UniformRand()
Definition: Randomize.hh:87
G4GLOB_DLL std::ostream G4cout
static G4double GetBindingEnergy(G4int Z, G4int SubshellNb)
const std::vector< G4double > & L3ConvertionProbabilities() const
const std::vector< G4double > & M3ConvertionProbabilities() const
G4double G4Log(G4double x)
Definition: G4Log.hh:227
const std::vector< G4double > & GammaWeights() const
#define G4endl
Definition: G4ios.hh:61
const std::vector< G4double > & TotalConvertionProbabilities() const
double G4double
Definition: G4Types.hh:76
const std::vector< G4double > & GammaCumulativeProbabilities() const
void G4DiscreteGammaTransition::SetEnergyFrom ( G4double  energy)
virtual

Implements G4VGammaTransition.

Definition at line 240 of file G4DiscreteGammaTransition.cc.

References energy().

241 {
242  _excitation = energy;
243 }
double precision function energy(A, Z)
Definition: dpm25nuc6.f:4106
void G4DiscreteGammaTransition::SetICM ( G4bool  ic)
inline

Definition at line 98 of file G4DiscreteGammaTransition.hh.

Referenced by G4DiscreteGammaDeexcitation::CreateTransition().

98 { _icm = ic; };

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