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 // G4MicroElecInelasticModel_new.hh, 2011/08/2 27 // G4MicroElecInelasticModel_new.hh, 2011/08/29 A.Valentin, M. Raine are with CEA [a] 28 // 2020/05/20 P. Caro 28 // 2020/05/20 P. Caron, C. Inguimbert are with ONERA [b] 29 // Q. Gibaru is with CEA [a] 29 // Q. Gibaru is with CEA [a], ONERA [b] and CNES [c] 30 // M. Raine and D. Lambert a 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 // - A.Valentin, M. Raine, 38 // - A.Valentin, M. Raine, 39 // Inelastic cross-sections of low energy e 39 // Inelastic cross-sections of low energy electrons in silicon 40 // for the simulation of heavy ion trac 40 // for the simulation of heavy ion tracks with the Geant4-DNA toolkit, 41 // NSS Conf. Record 2010, pp. 80-85 41 // NSS Conf. Record 2010, pp. 80-85 42 // https://doi.org/10.1109/NSSMIC. 42 // https://doi.org/10.1109/NSSMIC.2010.5873720 43 // 43 // 44 // - A.Valentin, M. Raine, M.Gaillardin, 44 // - A.Valentin, M. Raine, M.Gaillardin, P.Paillet 45 // Geant4 physics processes for microdo 45 // Geant4 physics processes for microdosimetry simulation: 46 // very low energy electromagnetic mode 46 // very low energy electromagnetic models for electrons in Silicon, 47 // https://doi.org/10.1016/j.nimb. 47 // https://doi.org/10.1016/j.nimb.2012.06.007 48 // NIM B, vol. 288, pp. 66-73, 2012, pa 48 // NIM B, vol. 288, pp. 66-73, 2012, part A 49 // heavy ions in Si, NIM B, vol. 287, p 49 // heavy ions in Si, NIM B, vol. 287, pp. 124-129, 2012, part B 50 // https://doi.org/10.1016/j.nimb. 50 // https://doi.org/10.1016/j.nimb.2012.07.028 51 // 51 // 52 // - M. Raine, M. Gaillardin, P. Paillet 52 // - M. Raine, M. Gaillardin, P. Paillet 53 // Geant4 physics processes for silicon 53 // Geant4 physics processes for silicon microdosimetry simulation: 54 // Improvements and extension of the en 54 // Improvements and extension of the energy-range validity up to 10 GeV/nucleon 55 // NIM B, vol. 325, pp. 97-100, 2014 55 // NIM B, vol. 325, pp. 97-100, 2014 56 // https://doi.org/10.1016/j.nimb. 56 // https://doi.org/10.1016/j.nimb.2014.01.014 57 // 57 // 58 // - J. Pierron, C. Inguimbert, M. Belhaj 58 // - J. Pierron, C. Inguimbert, M. Belhaj, T. Gineste, J. Puech, M. Raine 59 // Electron emission yield for low ener 59 // Electron emission yield for low energy electrons: 60 // Monte Carlo simulation and experimen 60 // Monte Carlo simulation and experimental comparison for Al, Ag, and Si 61 // Journal of Applied Physics 121 (2017 61 // Journal of Applied Physics 121 (2017) 215107. 62 // https://doi.org/10.1063/1.498 62 // https://doi.org/10.1063/1.4984761 63 // 63 // 64 // - P. Caron, 64 // - P. Caron, 65 // Study of Electron-Induced Single-Eve 65 // Study of Electron-Induced Single-Event Upset in Integrated Memory Devices 66 // PHD, 16th October 2019 66 // PHD, 16th October 2019 67 // 67 // 68 // - Q.Gibaru, C.Inguimbert, P.Caron, M.Raine 68 // - Q.Gibaru, C.Inguimbert, P.Caron, M.Raine, D.Lambert, J.Puech, 69 // Geant4 physics processes for microdo 69 // Geant4 physics processes for microdosimetry and secondary electron emission simulation : 70 // Extension of MicroElec to very low e 70 // Extension of MicroElec to very low energies and new materials 71 // NIM B, 2020, in review. 71 // NIM B, 2020, in review. 72 // 72 // 73 // 73 // 74 //....oooOO0OOooo........oooOO0OOooo........oo 74 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 75 75 76 #ifndef G4MICROELECINELASTICMODEL_NEW_HH 76 #ifndef G4MICROELECINELASTICMODEL_NEW_HH 77 #define G4MICROELECINELASTICMODEL_NEW_HH 1 77 #define G4MICROELECINELASTICMODEL_NEW_HH 1 78 78 79 #include "globals.hh" 79 #include "globals.hh" 80 #include "G4VEmModel.hh" 80 #include "G4VEmModel.hh" 81 #include "G4ParticleChangeForGamma.hh" 81 #include "G4ParticleChangeForGamma.hh" 82 #include "G4ProductionCutsTable.hh" 82 #include "G4ProductionCutsTable.hh" 83 #include "G4MicroElecMaterialStructure.hh" 83 #include "G4MicroElecMaterialStructure.hh" 84 #include "G4MicroElecCrossSectionDataSet_new.h 84 #include "G4MicroElecCrossSectionDataSet_new.hh" 85 #include "G4Electron.hh" 85 #include "G4Electron.hh" 86 #include "G4Proton.hh" 86 #include "G4Proton.hh" 87 #include "G4GenericIon.hh" 87 #include "G4GenericIon.hh" 88 #include "G4ParticleDefinition.hh" 88 #include "G4ParticleDefinition.hh" 89 #include "G4LogLogInterpolation.hh" 89 #include "G4LogLogInterpolation.hh" 90 #include "G4VAtomDeexcitation.hh" 90 #include "G4VAtomDeexcitation.hh" 91 #include "G4NistManager.hh" 91 #include "G4NistManager.hh" 92 92 93 class G4MicroElecInelasticModel_new : public G 93 class G4MicroElecInelasticModel_new : public G4VEmModel 94 { 94 { 95 95 96 public: 96 public: 97 explicit G4MicroElecInelasticModel_new(const 97 explicit G4MicroElecInelasticModel_new(const G4ParticleDefinition* p = nullptr, 98 const G4String& nam = "MicroElecInelas 98 const G4String& nam = "MicroElecInelasticModel"); 99 ~G4MicroElecInelasticModel_new() override; 99 ~G4MicroElecInelasticModel_new() override; 100 100 101 void Initialise(const G4ParticleDefinition*, 101 void Initialise(const G4ParticleDefinition*, const G4DataVector&) override; 102 102 103 G4double CrossSectionPerVolume(const G4Mater 103 G4double CrossSectionPerVolume(const G4Material* material, 104 const G4ParticleDefinition* p, 104 const G4ParticleDefinition* p, 105 G4double ekin, 105 G4double ekin, 106 G4double emin, 106 G4double emin, 107 G4double emax) override; 107 G4double emax) override; 108 108 109 void SampleSecondaries(std::vector<G4Dynamic 109 void SampleSecondaries(std::vector<G4DynamicParticle*>*, 110 const G4MaterialCutsCouple*, 110 const G4MaterialCutsCouple*, 111 const G4DynamicParticle*, 111 const G4DynamicParticle*, 112 G4double tmin, 112 G4double tmin, 113 G4double maxEnergy) override; 113 G4double maxEnergy) override; 114 114 115 G4double DifferentialCrossSection(const G4Pa 115 G4double DifferentialCrossSection(const G4ParticleDefinition * aParticleDefinition, 116 G4double k 116 G4double k, G4double energyTransfer, G4int shell); 117 117 118 G4double ComputeRelativistVelocity(G4double 118 G4double ComputeRelativistVelocity(G4double E, G4double mass); 119 119 120 G4double ComputeElasticQmax(G4double T1i, G4 120 G4double ComputeElasticQmax(G4double T1i, G4double T2i, G4double m1, G4double m2); 121 121 122 G4double BKZ(G4double Ep, G4double mp, G4int 122 G4double BKZ(G4double Ep, G4double mp, G4int Zp, G4double EF); 123 // compute the effective charge according Br 123 // compute the effective charge according Brandt et Kitagawa theory 124 124 125 G4double stepFunc(G4double x); 125 G4double stepFunc(G4double x); 126 G4double vrkreussler(G4double v, G4double vF 126 G4double vrkreussler(G4double v, G4double vF); 127 127 128 G4MicroElecInelasticModel_new & operator=(co 128 G4MicroElecInelasticModel_new & operator=(const G4MicroElecInelasticModel_new &right) = delete; 129 G4MicroElecInelasticModel_new(const G4Micro 129 G4MicroElecInelasticModel_new(const G4MicroElecInelasticModel_new&) = delete; 130 130 131 private: 131 private: 132 // 132 // 133 // private methods 133 // private methods 134 // 134 // 135 G4int RandomSelect(G4double energy,const G4S 135 G4int RandomSelect(G4double energy,const G4String& particle, G4double originalMass, G4int originalZ ); 136 136 137 G4double RandomizeCreatedElectronEnergy(G4do 137 G4double RandomizeCreatedElectronEnergy(G4double secondaryKinetic); 138 138 139 G4double RandomizeEjectedElectronEnergy(cons 139 G4double RandomizeEjectedElectronEnergy(const G4ParticleDefinition * aParticleDefinition, 140 G4double incomingParticleEnergy, G 140 G4double incomingParticleEnergy, G4int shell, 141 G4double originalMass, G4int origi 141 G4double originalMass, G4int originalZ) ; 142 142 143 G4double RandomizeEjectedElectronEnergyFromC 143 G4double RandomizeEjectedElectronEnergyFromCumulatedDcs(const G4ParticleDefinition*, 144 G4double k, G4int shell); 144 G4double k, G4int shell); 145 145 146 G4double TransferedEnergy(const G4ParticleDe 146 G4double TransferedEnergy(const G4ParticleDefinition*, G4double k, 147 G4int ionizationLevelIndex, G4double 147 G4int ionizationLevelIndex, G4double random); 148 148 149 G4double Interpolate(G4double e1, G4double e 149 G4double Interpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); 150 150 151 G4double QuadInterpolator( G4double e11, G4d 151 G4double QuadInterpolator( G4double e11, G4double e12, G4double e21, G4double e22, 152 G4double x11, G4double x12, G4doubl 152 G4double x11, G4double x12, G4double x21, G4double x22, 153 G4double t1, G4double t2, G4doubl 153 G4double t1, G4double t2, G4double t, G4double e); 154 // 154 // 155 // private elements 155 // private elements 156 // 156 // 157 G4ParticleChangeForGamma* fParticleChangeFor 157 G4ParticleChangeForGamma* fParticleChangeForGamma = nullptr; 158 158 159 //deexcitation manager to produce fluo photn 159 //deexcitation manager to produce fluo photns and e- 160 G4VAtomDeexcitation* fAtomDeexcitation = nul 160 G4VAtomDeexcitation* fAtomDeexcitation = nullptr; 161 G4Material* nistSi = nullptr; 161 G4Material* nistSi = nullptr; 162 G4MicroElecMaterialStructure* currentMateria 162 G4MicroElecMaterialStructure* currentMaterialStructure = nullptr; 163 163 164 typedef std::map<G4String,G4String,std::less 164 typedef std::map<G4String,G4String,std::less<G4String> > MapFile; 165 typedef std::map<G4String,G4MicroElecCrossSe 165 typedef std::map<G4String,G4MicroElecCrossSectionDataSet_new*,std::less<G4String> > MapData; 166 typedef std::map<G4double, std::map<G4double 166 typedef std::map<G4double, std::map<G4double, G4double> > TriDimensionMap; 167 typedef std::map<G4double, std::vector<G4dou 167 typedef std::map<G4double, std::vector<G4double> > VecMap; 168 168 169 //Tables for multilayers 169 //Tables for multilayers 170 typedef std::map<G4String, MapData*, std::le 170 typedef std::map<G4String, MapData*, std::less<G4String> > TCSMap; 171 TCSMap tableTCS; //TCS tables by particle 171 TCSMap tableTCS; //TCS tables by particle 172 typedef std::map<G4String, std::vector<TriDi 172 typedef std::map<G4String, std::vector<TriDimensionMap>* > dataDiffCSMap; 173 dataDiffCSMap eDiffDatatable, pDiffDatatable 173 dataDiffCSMap eDiffDatatable, pDiffDatatable; //Transfer probabilities (for slower code) 174 dataDiffCSMap eNrjTransStorage, pNrjTransSto 174 dataDiffCSMap eNrjTransStorage, pNrjTransStorage; //Transfered energies and corresponding probability (faster code) 175 typedef std::map<G4String, std::vector<VecMa 175 typedef std::map<G4String, std::vector<VecMap>* > dataProbaShellMap; 176 dataProbaShellMap eProbaShellStorage, pProba 176 dataProbaShellMap eProbaShellStorage, pProbaShellStorage; //Cumulated Transfer probabilities (faster code) 177 typedef std::map<G4String, std::vector<G4dou 177 typedef std::map<G4String, std::vector<G4double>* > incidentEnergyMap; 178 incidentEnergyMap eIncidentEnergyStorage, pI 178 incidentEnergyMap eIncidentEnergyStorage, pIncidentEnergyStorage; //Incident energies for interpolation (faster code) 179 typedef std::map<G4String, VecMap* > TranfEn 179 typedef std::map<G4String, VecMap* > TranfEnergyMap; 180 TranfEnergyMap eVecmStorage, pVecmStorage; / 180 TranfEnergyMap eVecmStorage, pVecmStorage; //Transfered energy for interpolation (slower code) 181 typedef std::map<G4String, G4MicroElecMateri 181 typedef std::map<G4String, G4MicroElecMaterialStructure*, std::less<G4String> > MapStructure; 182 MapStructure tableMaterialsStructures; //Str 182 MapStructure tableMaterialsStructures; //Structures of all materials simulated 183 183 184 G4String currentMaterial = ""; 184 G4String currentMaterial = ""; 185 std::map<G4String,G4double,std::less<G4Strin 185 std::map<G4String,G4double,std::less<G4String> > lowEnergyLimit; 186 std::map<G4String,G4double,std::less<G4Strin 186 std::map<G4String,G4double,std::less<G4String> > highEnergyLimit; 187 187 188 G4int verboseLevel; 188 G4int verboseLevel; 189 G4bool isInitialised ; 189 G4bool isInitialised ; 190 G4bool fasterCode; 190 G4bool fasterCode; 191 G4bool SEFromFermiLevel; 191 G4bool SEFromFermiLevel; 192 192 193 }; 193 }; 194 194 195 #endif 195 #endif 196 196