Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4EmCaptureCascade.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// $Id$
27//
28//-----------------------------------------------------------------------------
29//
30// GEANT4 Class file
31//
32// File name: G4EmCaptureCascade
33//
34// Author: V.Ivanchenko (Vladimir.Ivantchenko@cern.ch)
35//
36// Creation date: 22 April 2012 on base of G4MuMinusCaptureCascade
37//
38//
39//-----------------------------------------------------------------------------
40//
41// Modifications:
42//
43//-----------------------------------------------------------------------------
44
45#include "G4EmCaptureCascade.hh"
47#include "G4SystemOfUnits.hh"
48#include "Randomize.hh"
49#include "G4MuonMinus.hh"
50#include "G4Electron.hh"
51#include "G4Gamma.hh"
52#include "G4NucleiProperties.hh"
53
54//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
55
57 : G4HadronicInteraction("emCaptureCascade")
58{
59 theElectron = G4Electron::Electron();
60 theGamma = G4Gamma::Gamma();
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 const G4int nlevels = 28;
68 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 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}
98
99//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
100
102{}
103
104//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
105
108 G4Nucleus& targetNucleus)
109{
110 result.Clear();
111 result.SetStatusChange(isAlive);
112 fTime = projectile.GetGlobalTime();
113
114 G4int Z = targetNucleus.GetZ_asInt();
115 G4int A = targetNucleus.GetA_asInt();
117 G4double mass = fMuMass * massA / (fMuMass + massA) ;
118 G4double e = 13.6 * eV * Z * Z * mass/ electron_mass_c2;
119
120 // precise corrections of energy only for K-shell
121 fLevelEnergy[0] = fKLevelEnergy[Z];
122 for( G4int i = 2; i < 15; ++i) {
123 fLevelEnergy[i-1] = e/G4double(i*i);
124 }
125
126 G4int nElec = G4int(Z);
127 G4int nAuger = 1;
128 G4int nLevel = 13;
129 G4double pGamma = Z*Z*Z*Z;
130
131 // Capture on 14-th level
132 G4double edep = fLevelEnergy[13];
133 AddNewParticle(theElectron,edep);
134 G4double deltaE;
135
136 // Emit new photon or electron
137 // Simplified model for probabilities
138 // N.C.Mukhopadhyay Phy. Rep. 30 (1977) 1.
139 do {
140
141 // case of Auger electrons
142 if((nAuger < nElec) && ((pGamma + 10000.0) * G4UniformRand() < 10000.0) ) {
143 ++nAuger;
144 deltaE = fLevelEnergy[nLevel-1] - fLevelEnergy[nLevel];
145 --nLevel;
146 AddNewParticle(theElectron, deltaE);
147
148 } else {
149
150 // Case of photon cascade, probabilities from
151 // C.S.Wu and L.Wilets, Ann. Rev. Nuclear Sci. 19 (1969) 527.
152
153 G4double var = (10.0 + G4double(nLevel - 1) ) * G4UniformRand();
154 G4int iLevel = nLevel - 1 ;
155 if(var > 10.0) iLevel -= G4int(var-10.0) + 1;
156 if( iLevel < 0 ) iLevel = 0;
157 deltaE = fLevelEnergy[iLevel] - fLevelEnergy[nLevel];
158 nLevel = iLevel;
159 AddNewParticle(theGamma, deltaE);
160 }
161 edep += deltaE;
162
163 } while( nLevel > 0 );
164
165 result.SetLocalEnergyDeposit(edep);
166 return &result;
167}
168
169//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
170
171void G4EmCaptureCascade::ModelDescription(std::ostream& outFile) const
172{
173 outFile << "Simulation of electromagnetic cascade from capture level"
174 << " to K-shell of the mesonic atom\n."
175 << "Probabilities of gamma and Auger transitions from\n"
176 << " N.C.Mukhopadhyay Phys. Rep. 30 (1977) 1.\n";
177}
178
179//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@ isAlive
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
#define G4UniformRand()
Definition: Randomize.hh:53
static G4Electron * Electron()
Definition: G4Electron.cc:94
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
void ModelDescription(std::ostream &outFile) const
static G4Gamma * Gamma()
Definition: G4Gamma.cc:86
void SetStatusChange(G4HadFinalStateStatus aS)
void SetLocalEnergyDeposit(G4double aE)
G4double GetGlobalTime() const
static G4MuonMinus * MuonMinus()
Definition: G4MuonMinus.cc:100
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4int GetA_asInt() const
Definition: G4Nucleus.hh:109
G4int GetZ_asInt() const
Definition: G4Nucleus.hh:115