Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // 27 // G4MicroElecLOPhononModel.cc, 28 // 2020/05/20 P. Caron, C. Ingui 29 // Q. Gibaru is with 30 // M. Raine and D. La 31 // 32 // A part of this work has been funded by the 33 // [a] CEA, DAM, DIF - 91297 ARPAJON, France 34 // [b] ONERA - DPHY, 2 avenue E.Belin, 31055 T 35 // [c] CNES, 18 av.E.Belin, 31401 Toulouse CED 36 // 37 // Based on the following publications 38 // 39 // - J. Pierron, C. Inguimbert, M. Belhaj, T. 40 // Electron emission yield for low energy el 41 // Monte Carlo simulation and experimental c 42 // Journal of Applied Physics 121 (2017) 215 43 // https://doi.org/10.1063/1.4984761 44 // 45 // - P. Caron, 46 // Study of Electron-Induced Single-Event Up 47 // PHD, 16th October 2019 48 // 49 // - Q.Gibaru, C.Inguimbert, P.Caron, M.Raine, 50 // Geant4 physics processes for microdosimet 51 // Extension of MicroElec to very low energi 52 // NIM B, 2020, in review. 53 // 54 ////////////////////////////////////////////// 55 56 #include "G4MicroElecLOPhononModel.hh" 57 #include "G4SystemOfUnits.hh" 58 #include "G4PhysicalConstants.hh" 59 60 G4MicroElecLOPhononModel::G4MicroElecLOPhononM 61 62 : G4VEmModel(nam),isInitialised(false) 63 { 64 G4cout << "Phonon model is constructed " << 65 << "Phonon Energy = " << phononEnergy 66 } 67 68 //....oooOO0OOooo........oooOO0OOooo........oo 69 70 void G4MicroElecLOPhononModel::Initialise(cons 71 const G4DataVector& /*cuts*/ 72 { 73 if (isInitialised) { return; } 74 fParticleChangeForGamma = GetParticleChangeF 75 isInitialised = true; 76 } 77 78 //....oooOO0OOooo........oooOO0OOooo........oo 79 80 G4double G4MicroElecLOPhononModel:: 81 CrossSectionPerVolume(const G4Material* materi 82 const G4ParticleDefiniti 83 G4double ekin, 84 G4double, G4double 85 { 86 const G4double e = CLHEP::eplus / CLHEP::cou 87 const G4double m0 = CLHEP::electron_mass_c2 88 const G4double h = CLHEP::hbar_Planck * CLHE 89 const G4double eps0 = CLHEP::epsilon0 * CLHE 90 const G4double kb = CLHEP::k_Boltzmann * CLH 91 const G4double T = 300; 92 G4double eps = 9; 93 G4double einf = 3; 94 95 const G4DataVector cuts; 96 Initialise(p, cuts); 97 98 if (material->GetName() != "G4_SILICON_DIOXI 99 && material->GetName() != "G4_ALUMINUM_OXID 100 && material->GetName() != "G4_BORON_NITRIDE 101 { 102 return 1 / DBL_MAX; 103 } 104 105 G4double E =(ekin/eV)*e; 106 107 if (material->GetName() == "G4_ALUMINUM_OXID 108 { 109 eps = 9; 110 einf = 3; 111 phononEnergy = 0.1*eV; 112 } 113 if (material->GetName() == "G4_SILICON_DIOXI 114 { 115 eps = 3.84; 116 einf = 2.25; 117 phononEnergy = (0.75*0.153+0.25*0.063 )* e 118 } 119 120 // Nuclear Instruments and Methods in Physic 121 // Beam Interactions with Materials and Atom 122 // Volume 454, 1 September 2019, Pages 14 - 123 // Nuclear Instruments and Methods in Physic 124 // Beam Interactions with Materials and Atom 125 // Monte Carlo modeling of low - energy elec 126 // electron emission yields in micro - archi 127 128 if (material->GetName() == "G4_BORON_NITRIDE 129 { 130 eps = 7.1; 131 einf = 4.5; 132 phononEnergy = 0.17 * eV; 133 } 134 135 G4double hw = (phononEnergy / eV) * e; 136 G4double n = 1.0 / (std::exp(hw / (kb*T)) - 137 138 if (absor) // Absorption 139 { 140 Eprim = E + hw; 141 signe = -1; 142 } 143 else // Emission 144 { 145 Eprim = E - hw; 146 signe = +1; 147 } 148 149 G4double racine = std::sqrt(1 + ((-signe*hw) 150 G4double P = (std::pow(e, 2) / (4 * pi*eps0* 151 G4double MFP = (std::sqrt(2 * E / m0) / P)*m 152 153 if (material->GetName() == "G4_SILICON_DIOXI 154 return 1/(MFP); 155 // correction CI 12/1/2023 add 156 } 157 158 //....oooOO0OOooo........oooOO0OOooo........oo 159 160 void G4MicroElecLOPhononModel:: 161 SampleSecondaries(std::vector<G4DynamicParticl 162 const G4MaterialCutsCouple*, 163 const G4DynamicParticle* aDy 164 G4double, G4double) 165 { 166 G4double E = aDynamicElectron->GetKineticEne 167 Eprim = (absor) ? E + phononEnergy : E - pho 168 169 G4double rand = G4UniformRand(); 170 G4double B = (E + Eprim + 2 * std::sqrt(E*Ep 171 / (E + Eprim - 2 * std::sqrt(E*Ep 172 G4double cosTheta = ((E + Eprim) / (2 * std: 173 * (1 - std::pow(B, rand)) 174 if(Interband) 175 { 176 cosTheta = 1 - 2 * G4UniformRand(); //Isot 177 } 178 G4double phi = twopi * G4UniformRand(); 179 G4ThreeVector zVers = aDynamicElectron->GetM 180 G4ThreeVector xVers = zVers.orthogonal(); 181 G4ThreeVector yVers = zVers.cross(xVers); 182 183 G4double xDir = std::sqrt(1. - cosTheta*cosT 184 G4double yDir = xDir; 185 xDir *= std::cos(phi); 186 yDir *= std::sin(phi); 187 188 G4ThreeVector zPrimeVers((xDir*xVers + yDir* 189 190 fParticleChangeForGamma->ProposeMomentumDire 191 fParticleChangeForGamma->SetProposedKineticE 192 } 193 194 //....oooOO0OOooo........oooOO0OOooo........oo 195