Geant4  10.02.p03
G4ContinuumGammaTransition Class Reference

#include <G4ContinuumGammaTransition.hh>

Inheritance diagram for G4ContinuumGammaTransition:
Collaboration diagram for G4ContinuumGammaTransition:

Public Member Functions

 G4ContinuumGammaTransition (const G4NuclearLevelManager *manager, G4int Z, G4int A, G4double exc, G4int ver)
 
virtual ~G4ContinuumGammaTransition ()
 
virtual void SetEnergyFrom (G4double energy)
 
virtual G4double GetGammaEnergy ()
 
virtual G4double GetGammaCreationTime ()
 
virtual void SelectGamma ()
 
void Update (const G4NuclearLevelManager *manager, G4int Z, G4int A, G4double exc)
 
- Public Member Functions inherited from G4VGammaTransition
 G4VGammaTransition ()
 
virtual ~G4VGammaTransition ()
 

Private Member Functions

G4double E1Pdf (G4double energy)
 
G4double GammaTime ()
 

Private Attributes

G4int nucleusA
 
G4int nucleusZ
 
G4int nBins
 
G4int verbose
 
G4double eMin
 
G4double eMax
 
G4double minLevelE
 
G4double excitation
 
G4double eGamma
 
G4double gammaCreationTime
 
G4double energyGDR2
 
G4double widthGDR
 
G4double widthGDR2
 
std::vector< G4doublesampleArray
 
const G4NuclearLevelManagerlevelManager
 
G4Powg4pow
 
G4ConstantLevelDensityParameter ldPar
 

Detailed Description

Definition at line 62 of file G4ContinuumGammaTransition.hh.

Constructor & Destructor Documentation

◆ G4ContinuumGammaTransition()

G4ContinuumGammaTransition::G4ContinuumGammaTransition ( const G4NuclearLevelManager manager,
G4int  Z,
G4int  A,
G4double  exc,
G4int  ver 
)

Definition at line 66 of file G4ContinuumGammaTransition.cc.

69 {
70  nBins = 100;
71  verbose = verb;
72  eMin = keV;
74  sampleArray.resize(nBins+1,0.0);
76  Update(manager, Z, A, exc);
77 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
double A(double temperature)
Float_t Z
void Update(const G4NuclearLevelManager *manager, G4int Z, G4int A, G4double exc)
static const double keV
Definition: G4SIunits.hh:213
Here is the call graph for this function:

◆ ~G4ContinuumGammaTransition()

G4ContinuumGammaTransition::~G4ContinuumGammaTransition ( )
virtual

Definition at line 79 of file G4ContinuumGammaTransition.cc.

80 {}

Member Function Documentation

◆ E1Pdf()

G4double G4ContinuumGammaTransition::E1Pdf ( G4double  energy)
private

Definition at line 182 of file G4ContinuumGammaTransition.cc.

183 {
184  G4double theProb = 0.0;
185  G4double U = excitation - e;
186 
187  if(U < 0.0) { return theProb; }
188 
189  G4double aLevelDensityParam =
191 
192  //G4double levelDensBef = G4Exp(2.0*std::sqrt(aLevelDensityParam*excitation));
193  //G4double levelDensAft = G4Exp(2.0*std::sqrt(aLevelDensityParam*(excitation - e)));
194  G4double coeff = G4Exp(2.0*(std::sqrt(aLevelDensityParam*U)
195  - std::sqrt(aLevelDensityParam*excitation)));
196 
197  //if(verbose > 20)
198  // G4cout << nucleusA << " LevelDensityParameter = " << aLevelDensityParam
199  // << " Bef Aft " << levelDensBef << " " << levelDensAft << G4endl;
200 
201  // Now form the probability density
202  // Define constants for the photoabsorption cross-section (the reverse
203  // process of our de-excitation)
204 
205  G4double sigma0 = 2.5 * nucleusA;
206 
207  G4double e2 = e*e;
208  G4double numerator = sigma0 * e2 * widthGDR2;
209  G4double denominator = (e2 - energyGDR2)* (e2 - energyGDR2) + widthGDR2*e2;
210  // if (denominator < 1.0e-9) denominator = 1.0e-9;
211 
212  G4double sigmaAbs = numerator/denominator;
213 
214  if(verbose > 2) {
215  G4cout << "E_GDR(MeV)= " << std::sqrt(energyGDR2) << " W_GDR(MeV)= " << widthGDR
216  << " sigAbs= " << sigmaAbs
217  << " E(MeV)= " << e << " coeff= " << coeff
218  << G4endl;
219  }
220 
221  theProb = sigmaAbs * e2 * coeff;
222 
223  return theProb;
224 }
G4double LevelDensityParameter(const G4int A, const G4int, const G4double) const
static const G4double e2
G4GLOB_DLL std::ostream G4cout
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
G4ConstantLevelDensityParameter ldPar
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GammaTime()

G4double G4ContinuumGammaTransition::GammaTime ( )
private

Definition at line 226 of file G4ContinuumGammaTransition.cc.

227 {
229  G4double creationTime = -tau*G4Log(G4UniformRand());
230 
231  return creationTime;
232 }
#define G4UniformRand()
Definition: Randomize.hh:97
G4double G4Log(G4double x)
Definition: G4Log.hh:230
float hbar_Planck
Definition: hepunit.py:264
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetGammaCreationTime()

G4double G4ContinuumGammaTransition::GetGammaCreationTime ( )
virtual

Implements G4VGammaTransition.

Definition at line 172 of file G4ContinuumGammaTransition.cc.

173 {
174  return gammaCreationTime;
175 }

◆ GetGammaEnergy()

G4double G4ContinuumGammaTransition::GetGammaEnergy ( )
virtual

Implements G4VGammaTransition.

Definition at line 167 of file G4ContinuumGammaTransition.cc.

168 {
169  return eGamma;
170 }

◆ SelectGamma()

void G4ContinuumGammaTransition::SelectGamma ( )
virtual

Implements G4VGammaTransition.

Definition at line 109 of file G4ContinuumGammaTransition.cc.

110 {
111  eGamma = 0.;
112  sampleArray[0] = 0.0;
113  G4int i;
114  G4double del = (eMax - eMin) / G4double(nBins);
115  G4double sum = 0;
116  G4double w1 = E1Pdf(eMin);
117  G4double w2;
118  //G4cout << eMin << " " << eMax << " " << del << G4endl;
119  for (i=1; i<=nBins; i++) {
120  G4double e = eMin + del * i;
121  w2 = E1Pdf(e);
122  sum += 0.5*(w1 + w2);
123  w1 = w2;
124  sampleArray[i] = sum;
125  if(verbose > 1) {
126  G4cout << "*---* G4ContinuumTransition: e = " << e
127  << " pdf = " << sampleArray[i] << G4endl;
128  }
129  }
130  sum *= G4UniformRand();
131  eGamma = eMax;
132  for (i=1; i<=nBins; i++) {
133  if(sum <= sampleArray[i]) {
134  eGamma = eMin + del * i;
135  G4double w = sampleArray[i] - sampleArray[i-1];
136  //G4cout << eGamma << " " << w << G4endl;
137  if(w != 0.0) {
138  eGamma -= (sampleArray[i] - sum)*del/w;
139  }
140  break;
141  }
142  }
143 
144  G4double finalExcitation = excitation - eGamma;
145 
146  if(verbose > 1) {
147  G4cout << "*---*---* G4ContinuumTransition: eGamma = " << eGamma
148  << " finalExcitation = " << finalExcitation << G4endl;
149  }
150 
151  if(finalExcitation <= minLevelE) {
152  eGamma = excitation;
153 
154  } else {
155  finalExcitation = levelManager->NearestLevel(finalExcitation)->Energy();
156  eGamma = excitation - finalExcitation;
157  }
158 
160 
161  if(verbose > 1) {
162  G4cout << "*---*---* G4ContinuumTransition: gammaCreationTime = "
164  }
165 }
const G4NuclearLevel * NearestLevel(G4double energy, G4double eDiffMax=1.e+8) const
G4double Energy() const
int G4int
Definition: G4Types.hh:78
#define G4UniformRand()
Definition: Randomize.hh:97
G4GLOB_DLL std::ostream G4cout
static const double second
Definition: G4SIunits.hh:156
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
const G4NuclearLevelManager * levelManager
Here is the call graph for this function:

◆ SetEnergyFrom()

void G4ContinuumGammaTransition::SetEnergyFrom ( G4double  energy)
virtual

Implements G4VGammaTransition.

Definition at line 177 of file G4ContinuumGammaTransition.cc.

178 {
179  excitation = energy;
180 }
double energy
Definition: plottest35.C:25

◆ Update()

void G4ContinuumGammaTransition::Update ( const G4NuclearLevelManager manager,
G4int  Z,
G4int  A,
G4double  exc 
)

Definition at line 82 of file G4ContinuumGammaTransition.cc.

84 {
85  levelManager = manager;
86  nucleusZ = Z;
87  nucleusA = A;
88  excitation = exc;
89  eGamma = 0.;
90  gammaCreationTime = 0.;
91 
93  if(levelManager) {
95  }
96  // Energy range for photon generation;
97  // upper limit is defined 5*Gamma(GDR) from GDR peak
98  // Giant Dipole Resonance energy
99  G4double energyGDR = (40.3 / g4pow->powZ(nucleusA,0.2) ) * MeV;
100  energyGDR2 = energyGDR*energyGDR;
101  // Giant Dipole Resonance width
102  widthGDR = 0.30 * energyGDR;
104  // Extend
105  eMax = energyGDR + factor * widthGDR;
106  if (eMax > excitation) { eMax = excitation; }
107 }
static const double MeV
Definition: G4SIunits.hh:211
static const G4double tolerance
G4double powZ(G4int Z, G4double y) const
Definition: G4Pow.hh:254
double A(double temperature)
Float_t Z
static const G4double factor
double G4double
Definition: G4Types.hh:76
const G4NuclearLevelManager * levelManager
#define DBL_MAX
Definition: templates.hh:83
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ eGamma

G4double G4ContinuumGammaTransition::eGamma
private

Definition at line 93 of file G4ContinuumGammaTransition.hh.

◆ eMax

G4double G4ContinuumGammaTransition::eMax
private

Definition at line 90 of file G4ContinuumGammaTransition.hh.

◆ eMin

G4double G4ContinuumGammaTransition::eMin
private

Definition at line 89 of file G4ContinuumGammaTransition.hh.

◆ energyGDR2

G4double G4ContinuumGammaTransition::energyGDR2
private

Definition at line 95 of file G4ContinuumGammaTransition.hh.

◆ excitation

G4double G4ContinuumGammaTransition::excitation
private

Definition at line 92 of file G4ContinuumGammaTransition.hh.

◆ g4pow

G4Pow* G4ContinuumGammaTransition::g4pow
private

Definition at line 102 of file G4ContinuumGammaTransition.hh.

◆ gammaCreationTime

G4double G4ContinuumGammaTransition::gammaCreationTime
private

Definition at line 94 of file G4ContinuumGammaTransition.hh.

◆ ldPar

G4ConstantLevelDensityParameter G4ContinuumGammaTransition::ldPar
private

Definition at line 103 of file G4ContinuumGammaTransition.hh.

◆ levelManager

const G4NuclearLevelManager* G4ContinuumGammaTransition::levelManager
private

Definition at line 101 of file G4ContinuumGammaTransition.hh.

◆ minLevelE

G4double G4ContinuumGammaTransition::minLevelE
private

Definition at line 91 of file G4ContinuumGammaTransition.hh.

◆ nBins

G4int G4ContinuumGammaTransition::nBins
private

Definition at line 86 of file G4ContinuumGammaTransition.hh.

◆ nucleusA

G4int G4ContinuumGammaTransition::nucleusA
private

Definition at line 84 of file G4ContinuumGammaTransition.hh.

◆ nucleusZ

G4int G4ContinuumGammaTransition::nucleusZ
private

Definition at line 85 of file G4ContinuumGammaTransition.hh.

◆ sampleArray

std::vector<G4double> G4ContinuumGammaTransition::sampleArray
private

Definition at line 99 of file G4ContinuumGammaTransition.hh.

◆ verbose

G4int G4ContinuumGammaTransition::verbose
private

Definition at line 87 of file G4ContinuumGammaTransition.hh.

◆ widthGDR

G4double G4ContinuumGammaTransition::widthGDR
private

Definition at line 96 of file G4ContinuumGammaTransition.hh.

◆ widthGDR2

G4double G4ContinuumGammaTransition::widthGDR2
private

Definition at line 97 of file G4ContinuumGammaTransition.hh.


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