ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4EmCaptureCascade.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4EmCaptureCascade.cc
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 //
27 //-----------------------------------------------------------------------------
28 //
29 // GEANT4 Class file
30 //
31 // File name: G4EmCaptureCascade
32 //
33 // Author: V.Ivanchenko (Vladimir.Ivantchenko@cern.ch)
34 //
35 // Creation date: 22 April 2012 on base of G4MuMinusCaptureCascade
36 //
37 //
38 //-----------------------------------------------------------------------------
39 //
40 // Modifications:
41 //
42 //-----------------------------------------------------------------------------
43 
44 #include "G4EmCaptureCascade.hh"
45 #include "G4PhysicalConstants.hh"
46 #include "G4SystemOfUnits.hh"
47 #include "Randomize.hh"
48 #include "G4MuonMinus.hh"
49 #include "G4Electron.hh"
50 #include "G4Gamma.hh"
51 #include "G4NucleiProperties.hh"
52 
53 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
54 
56  : G4HadronicInteraction("emCaptureCascade")
57 {
61  fTime = 0.0;
62 
63  // Calculate the Energy of K Mesoatom Level for this Element using
64  // the Energy of Hydrogen Atom taken into account finite size of the
65  // nucleus
66  static const G4int nlevels = 28;
67  static const G4int listK[nlevels] = {
68  1, 2, 4, 6, 8, 11, 14, 17, 18, 21, 24,
69  26, 29, 32, 38, 40, 41, 44, 49, 53, 55,
70  60, 65, 70, 75, 81, 85, 92};
71  static const G4double listKEnergy[nlevels] = {
72  0.00275, 0.011, 0.043, 0.098, 0.173, 0.326,
73  0.524, 0.765, 0.853, 1.146, 1.472,
74  1.708, 2.081, 2.475, 3.323, 3.627,
75  3.779, 4.237, 5.016, 5.647, 5.966,
76  6.793, 7.602, 8.421, 9.249, 10.222,
77  10.923,11.984};
78 
79  fKLevelEnergy[0] = 0.0;
80  fKLevelEnergy[1] = listKEnergy[0];
81  G4int idx = 1;
82  for(G4int i=1; i<nlevels; ++i) {
83  G4int z1 = listK[idx];
84  G4int z2 = listK[i];
85  if(z1+1 < z2) {
86  G4double dz = G4double(z2 - z1);
87  G4double y1 = listKEnergy[idx]/G4double(z1*z1);
88  G4double y2 = listKEnergy[i]/G4double(z2*z2);
89  for(G4int z=z1+1; z<z2; ++z) {
90  fKLevelEnergy[z] = (y1 + (y2 - y1)*(z - z1)/dz)*z*z;
91  }
92  }
93  fKLevelEnergy[z2] = listKEnergy[i];
94  idx = i;
95  }
96  for(G4int i = 0; i<14; ++i) { fLevelEnergy[i] = 0.0; }
97 }
98 
99 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
100 
102 {}
103 
104 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
105 
108  G4Nucleus& targetNucleus)
109 {
110  result.Clear();
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[std::min(Z, 92)];
122  for(G4int i=1; i<14; ++i) {
123  fLevelEnergy[i] = e/(G4double)((i+1)*(i+1));
124  }
125 
126  G4int nElec = 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];
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  // Loop checking, 06-Aug-2015, Vladimir Ivanchenko
164  } while( nLevel > 0 );
165 
167  return &result;
168 }
169 
170 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
171 
172 void G4EmCaptureCascade::ModelDescription(std::ostream& outFile) const
173 {
174  outFile << "Simulation of electromagnetic cascade from capture level"
175  << " to K-shell of the mesonic atom\n."
176  << "Probabilities of gamma and Auger transitions from\n"
177  << " N.C.Mukhopadhyay Phys. Rep. 30 (1977) 1.\n";
178 }
179 
180 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....