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