Geant4  10.02.p03
G4DiscreteGammaTransition Class Reference

#include <G4DiscreteGammaTransition.hh>

Inheritance diagram for G4DiscreteGammaTransition:
Collaboration diagram for G4DiscreteGammaTransition:

Public Member Functions

 G4DiscreteGammaTransition (const G4NuclearLevel *level, G4int Z, G4int ver)
 
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 ()
 
void Update (const G4NuclearLevel *level, G4int Z)
 
- Public Member Functions inherited from G4VGammaTransition
 G4VGammaTransition ()
 
virtual ~G4VGammaTransition ()
 

Private Attributes

G4int nucleusZ
 
G4int orbitE
 
G4int verbose
 
G4double bondE
 
G4double gammaEnergy
 
G4double excitation
 
G4double gammaCreationTime
 
G4bool aGamma
 
G4bool icm
 
const G4NuclearLevelaLevel
 

Detailed Description

Definition at line 78 of file G4DiscreteGammaTransition.hh.

Constructor & Destructor Documentation

◆ G4DiscreteGammaTransition()

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

Definition at line 82 of file G4DiscreteGammaTransition.cc.

Here is the call graph for this function:

◆ ~G4DiscreteGammaTransition()

G4DiscreteGammaTransition::~G4DiscreteGammaTransition ( )
virtual

Definition at line 91 of file G4DiscreteGammaTransition.cc.

92 {}

Member Function Documentation

◆ GetBondEnergy()

G4double G4DiscreteGammaTransition::GetBondEnergy ( )
inline

Definition at line 94 of file G4DiscreteGammaTransition.hh.

Here is the caller graph for this function:

◆ GetGammaCreationTime()

G4double G4DiscreteGammaTransition::GetGammaCreationTime ( )
virtual

Implements G4VGammaTransition.

Definition at line 241 of file G4DiscreteGammaTransition.cc.

242 {
243  return gammaCreationTime;
244 }

◆ GetGammaEnergy()

G4double G4DiscreteGammaTransition::GetGammaEnergy ( )
virtual

Implements G4VGammaTransition.

Definition at line 236 of file G4DiscreteGammaTransition.cc.

237 {
238  return gammaEnergy;
239 }

◆ GetICM()

G4bool G4DiscreteGammaTransition::GetICM ( ) const
inline

Definition at line 93 of file G4DiscreteGammaTransition.hh.

◆ GetOrbitNumber()

G4int G4DiscreteGammaTransition::GetOrbitNumber ( )
inline

Definition at line 95 of file G4DiscreteGammaTransition.hh.

Here is the caller graph for this function:

◆ IsAGamma()

G4bool G4DiscreteGammaTransition::IsAGamma ( )
inline

Definition at line 96 of file G4DiscreteGammaTransition.hh.

Here is the caller graph for this function:

◆ SelectGamma()

void G4DiscreteGammaTransition::SelectGamma ( )
virtual

Implements G4VGammaTransition.

Definition at line 94 of file G4DiscreteGammaTransition.cc.

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

◆ SetEnergyFrom()

void G4DiscreteGammaTransition::SetEnergyFrom ( G4double  energy)
virtual

Implements G4VGammaTransition.

Definition at line 246 of file G4DiscreteGammaTransition.cc.

247 {
248  excitation = energy;
249 }
double energy
Definition: plottest35.C:25
Here is the caller graph for this function:

◆ SetICM()

void G4DiscreteGammaTransition::SetICM ( G4bool  ic)
inline

Definition at line 92 of file G4DiscreteGammaTransition.hh.

Here is the caller graph for this function:

◆ Update()

void G4DiscreteGammaTransition::Update ( const G4NuclearLevel level,
G4int  Z 
)
inline

Definition at line 98 of file G4DiscreteGammaTransition.hh.

99  {
100  aLevel = level;
101  nucleusZ = Z;
102  }
Float_t Z
Here is the caller graph for this function:

Member Data Documentation

◆ aGamma

G4bool G4DiscreteGammaTransition::aGamma
private

Definition at line 115 of file G4DiscreteGammaTransition.hh.

◆ aLevel

const G4NuclearLevel* G4DiscreteGammaTransition::aLevel
private

Definition at line 118 of file G4DiscreteGammaTransition.hh.

◆ bondE

G4double G4DiscreteGammaTransition::bondE
private

Definition at line 110 of file G4DiscreteGammaTransition.hh.

◆ excitation

G4double G4DiscreteGammaTransition::excitation
private

Definition at line 112 of file G4DiscreteGammaTransition.hh.

◆ gammaCreationTime

G4double G4DiscreteGammaTransition::gammaCreationTime
private

Definition at line 113 of file G4DiscreteGammaTransition.hh.

◆ gammaEnergy

G4double G4DiscreteGammaTransition::gammaEnergy
private

Definition at line 111 of file G4DiscreteGammaTransition.hh.

◆ icm

G4bool G4DiscreteGammaTransition::icm
private

Definition at line 116 of file G4DiscreteGammaTransition.hh.

◆ nucleusZ

G4int G4DiscreteGammaTransition::nucleusZ
private

Definition at line 106 of file G4DiscreteGammaTransition.hh.

◆ orbitE

G4int G4DiscreteGammaTransition::orbitE
private

Definition at line 107 of file G4DiscreteGammaTransition.hh.

◆ verbose

G4int G4DiscreteGammaTransition::verbose
private

Definition at line 108 of file G4DiscreteGammaTransition.hh.


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