Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4EmCaptureCascade Class Reference

#include <G4EmCaptureCascade.hh>

Inheritance diagram for G4EmCaptureCascade:
Collaboration diagram for G4EmCaptureCascade:

Public Member Functions

 G4EmCaptureCascade ()
 
virtual ~G4EmCaptureCascade ()
 
virtual G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
 
virtual void ModelDescription (std::ostream &outFile) const
 
- Public Member Functions inherited from G4HadronicInteraction
 G4HadronicInteraction (const G4String &modelName="HadronicModel")
 
virtual ~G4HadronicInteraction ()
 
virtual G4double SampleInvariantT (const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
 
virtual G4bool IsApplicable (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
 
G4double GetMinEnergy () const
 
G4double GetMinEnergy (const G4Material *aMaterial, const G4Element *anElement) const
 
void SetMinEnergy (G4double anEnergy)
 
void SetMinEnergy (G4double anEnergy, const G4Element *anElement)
 
void SetMinEnergy (G4double anEnergy, const G4Material *aMaterial)
 
G4double GetMaxEnergy () const
 
G4double GetMaxEnergy (const G4Material *aMaterial, const G4Element *anElement) const
 
void SetMaxEnergy (const G4double anEnergy)
 
void SetMaxEnergy (G4double anEnergy, const G4Element *anElement)
 
void SetMaxEnergy (G4double anEnergy, const G4Material *aMaterial)
 
G4int GetVerboseLevel () const
 
void SetVerboseLevel (G4int value)
 
const G4StringGetModelName () const
 
void DeActivateFor (const G4Material *aMaterial)
 
void ActivateFor (const G4Material *aMaterial)
 
void DeActivateFor (const G4Element *anElement)
 
void ActivateFor (const G4Element *anElement)
 
G4bool IsBlocked (const G4Material *aMaterial) const
 
G4bool IsBlocked (const G4Element *anElement) const
 
void SetRecoilEnergyThreshold (G4double val)
 
G4double GetRecoilEnergyThreshold () const
 
virtual const std::pair
< G4double, G4double
GetFatalEnergyCheckLevels () const
 
virtual std::pair< G4double,
G4double
GetEnergyMomentumCheckLevels () const
 
void SetEnergyMomentumCheckLevels (G4double relativeLevel, G4double absoluteLevel)
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void InitialiseModel ()
 

Additional Inherited Members

- Protected Member Functions inherited from G4HadronicInteraction
void SetModelName (const G4String &nam)
 
G4bool IsBlocked () const
 
void Block ()
 
- Protected Attributes inherited from G4HadronicInteraction
G4HadFinalState theParticleChange
 
G4int verboseLevel
 
G4double theMinEnergy
 
G4double theMaxEnergy
 
G4bool isBlocked
 

Detailed Description

Definition at line 67 of file G4EmCaptureCascade.hh.

Constructor & Destructor Documentation

G4EmCaptureCascade::G4EmCaptureCascade ( )
explicit

Definition at line 56 of file G4EmCaptureCascade.cc.

57  : G4HadronicInteraction("emCaptureCascade")
58 {
59  theElectron = G4Electron::Electron();
60  theGamma = G4Gamma::Gamma();
61  fMuMass = G4MuonMinus::MuonMinus()->GetPDGMass();
62  fTime = 0.0;
63 
64  // Calculate the Energy of K Mesoatom Level for this Element using
65  // the Energy of Hydrogen Atom taken into account finite size of the
66  // nucleus
67  static const G4int nlevels = 28;
68  static const G4int listK[nlevels] = {
69  1, 2, 4, 6, 8, 11, 14, 17, 18, 21, 24,
70  26, 29, 32, 38, 40, 41, 44, 49, 53, 55,
71  60, 65, 70, 75, 81, 85, 92};
72  static const G4double listKEnergy[nlevels] = {
73  0.00275, 0.011, 0.043, 0.098, 0.173, 0.326,
74  0.524, 0.765, 0.853, 1.146, 1.472,
75  1.708, 2.081, 2.475, 3.323, 3.627,
76  3.779, 4.237, 5.016, 5.647, 5.966,
77  6.793, 7.602, 8.421, 9.249, 10.222,
78  10.923,11.984};
79 
80  fKLevelEnergy[0] = 0.0;
81  fKLevelEnergy[1] = listKEnergy[0];
82  G4int idx = 1;
83  for(G4int i=1; i<nlevels; ++i) {
84  G4int z1 = listK[idx];
85  G4int z2 = listK[i];
86  if(z1+1 < z2) {
87  G4double dz = G4double(z2 - z1);
88  G4double y1 = listKEnergy[idx]/G4double(z1*z1);
89  G4double y2 = listKEnergy[i]/G4double(z2*z2);
90  for(G4int z=z1+1; z<z2; ++z) {
91  fKLevelEnergy[z] = (y1 + (y2 - y1)*(z - z1)/dz)*z*z;
92  }
93  }
94  fKLevelEnergy[z2] = listKEnergy[i];
95  idx = i;
96  }
97  for(G4int i = 0; i<14; ++i) { fLevelEnergy[i] = 0.0; }
98 }
int G4int
Definition: G4Types.hh:78
G4HadronicInteraction(const G4String &modelName="HadronicModel")
static G4Gamma * Gamma()
Definition: G4Gamma.cc:86
G4double GetPDGMass() const
static G4MuonMinus * MuonMinus()
Definition: G4MuonMinus.cc:100
static G4Electron * Electron()
Definition: G4Electron.cc:94
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

G4EmCaptureCascade::~G4EmCaptureCascade ( )
virtual

Definition at line 102 of file G4EmCaptureCascade.cc.

103 {}

Member Function Documentation

G4HadFinalState * G4EmCaptureCascade::ApplyYourself ( const G4HadProjectile aTrack,
G4Nucleus targetNucleus 
)
virtual

Implements G4HadronicInteraction.

Definition at line 108 of file G4EmCaptureCascade.cc.

110 {
111  result.Clear();
112  result.SetStatusChange(isAlive);
113  fTime = projectile.GetGlobalTime();
114 
115  G4int Z = targetNucleus.GetZ_asInt();
116  G4int A = targetNucleus.GetA_asInt();
118  G4double mass = fMuMass * massA / (fMuMass + massA) ;
119  G4double e = 13.6 * eV * (Z * Z) * mass/ electron_mass_c2;
120 
121  // precise corrections of energy only for K-shell
122  fLevelEnergy[0] = fKLevelEnergy[std::min(Z, 92)];
123  for(G4int i=1; i<14; ++i) {
124  fLevelEnergy[i] = e/(G4double)((i+1)*(i+1));
125  }
126 
127  G4int nElec = Z;
128  G4int nAuger = 1;
129  G4int nLevel = 13;
130  G4double pGamma = (Z*Z*Z*Z);
131 
132  // Capture on 14-th level
133  G4double edep = fLevelEnergy[13];
134  AddNewParticle(theElectron,edep);
135  G4double deltaE;
136 
137  // Emit new photon or electron
138  // Simplified model for probabilities
139  // N.C.Mukhopadhyay Phy. Rep. 30 (1977) 1.
140  do {
141 
142  // case of Auger electrons
143  if((nAuger < nElec) && ((pGamma + 10000.0) * G4UniformRand() < 10000.0) ) {
144  ++nAuger;
145  deltaE = fLevelEnergy[nLevel-1] - fLevelEnergy[nLevel];
146  --nLevel;
147  AddNewParticle(theElectron, deltaE);
148 
149  } else {
150 
151  // Case of photon cascade, probabilities from
152  // C.S.Wu and L.Wilets, Ann. Rev. Nuclear Sci. 19 (1969) 527.
153 
154  G4double var = (10.0 + G4double(nLevel - 1) ) * G4UniformRand();
155  G4int iLevel = nLevel - 1 ;
156  if(var > 10.0) iLevel -= G4int(var-10.0) + 1;
157  if( iLevel < 0 ) iLevel = 0;
158  deltaE = fLevelEnergy[iLevel] - fLevelEnergy[nLevel];
159  nLevel = iLevel;
160  AddNewParticle(theGamma, deltaE);
161  }
162  edep += deltaE;
163 
164  // Loop checking, 06-Aug-2015, Vladimir Ivanchenko
165  } while( nLevel > 0 );
166 
167  result.SetLocalEnergyDeposit(edep);
168  return &result;
169 }
G4int GetA_asInt() const
Definition: G4Nucleus.hh:109
static G4double GetNuclearMass(const G4double A, const G4double Z)
int G4int
Definition: G4Types.hh:78
static constexpr double electron_mass_c2
void SetStatusChange(G4HadFinalStateStatus aS)
#define G4UniformRand()
Definition: Randomize.hh:97
double A(double temperature)
static constexpr double eV
Definition: G4SIunits.hh:215
G4int GetZ_asInt() const
Definition: G4Nucleus.hh:115
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
void SetLocalEnergyDeposit(G4double aE)
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

void G4EmCaptureCascade::ModelDescription ( std::ostream &  outFile) const
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 173 of file G4EmCaptureCascade.cc.

174 {
175  outFile << "Simulation of electromagnetic cascade from capture level"
176  << " to K-shell of the mesonic atom\n."
177  << "Probabilities of gamma and Auger transitions from\n"
178  << " N.C.Mukhopadhyay Phys. Rep. 30 (1977) 1.\n";
179 }

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