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 93 class G4MicroElecInelasticModel_new : public G 94 class G4MicroElecInelasticModel_new : public G4VEmModel 94 { 95 { 95 96 96 public: 97 public: 97 explicit G4MicroElecInelasticModel_new(const << 98 >> 99 G4MicroElecInelasticModel_new(const G4ParticleDefinition* p = 0, 98 const G4String& nam = "MicroElecInelas 100 const G4String& nam = "MicroElecInelasticModel"); 99 ~G4MicroElecInelasticModel_new() override; 101 ~G4MicroElecInelasticModel_new() override; 100 102 101 void Initialise(const G4ParticleDefinition*, 103 void Initialise(const G4ParticleDefinition*, const G4DataVector&) override; 102 104 103 G4double CrossSectionPerVolume(const G4Mater 105 G4double CrossSectionPerVolume(const G4Material* material, 104 const G4ParticleDefinition* p, 106 const G4ParticleDefinition* p, 105 G4double ekin, 107 G4double ekin, 106 G4double emin, 108 G4double emin, 107 G4double emax) override; 109 G4double emax) override; 108 110 109 void SampleSecondaries(std::vector<G4Dynamic 111 void SampleSecondaries(std::vector<G4DynamicParticle*>*, 110 const G4MaterialCutsCouple*, 112 const G4MaterialCutsCouple*, 111 const G4DynamicParticle*, 113 const G4DynamicParticle*, 112 G4double tmin, 114 G4double tmin, 113 G4double maxEnergy) override; 115 G4double maxEnergy) override; 114 116 115 G4double DifferentialCrossSection(const G4Pa 117 G4double DifferentialCrossSection(const G4ParticleDefinition * aParticleDefinition, 116 G4double k 118 G4double k, G4double energyTransfer, G4int shell); 117 119 118 G4double ComputeRelativistVelocity(G4double 120 G4double ComputeRelativistVelocity(G4double E, G4double mass); 119 121 120 G4double ComputeElasticQmax(G4double T1i, G4 122 G4double ComputeElasticQmax(G4double T1i, G4double T2i, G4double m1, G4double m2); 121 123 122 G4double BKZ(G4double Ep, G4double mp, G4int 124 G4double BKZ(G4double Ep, G4double mp, G4int Zp, G4double EF); 123 // compute the effective charge according Br 125 // compute the effective charge according Brandt et Kitagawa theory 124 126 125 G4double stepFunc(G4double x); 127 G4double stepFunc(G4double x); 126 G4double vrkreussler(G4double v, G4double vF << 127 128 128 G4MicroElecInelasticModel_new & operator=(co << 129 G4double vrkreussler(G4double v, G4double vF); 129 G4MicroElecInelasticModel_new(const G4Micro << 130 >> 131 protected: >> 132 G4ParticleChangeForGamma* fParticleChangeForGamma = nullptr; 130 133 131 private: 134 private: 132 // 135 // 133 // private methods 136 // private methods 134 // 137 // >> 138 G4MicroElecInelasticModel_new & operator=(const G4MicroElecInelasticModel_new &right); >> 139 G4MicroElecInelasticModel_new(const G4MicroElecInelasticModel_new&); >> 140 135 G4int RandomSelect(G4double energy,const G4S 141 G4int RandomSelect(G4double energy,const G4String& particle, G4double originalMass, G4int originalZ ); 136 142 137 G4double RandomizeCreatedElectronEnergy(G4do 143 G4double RandomizeCreatedElectronEnergy(G4double secondaryKinetic); 138 144 139 G4double RandomizeEjectedElectronEnergy(cons 145 G4double RandomizeEjectedElectronEnergy(const G4ParticleDefinition * aParticleDefinition, 140 G4double incomingParticleEnergy, G 146 G4double incomingParticleEnergy, G4int shell, 141 G4double originalMass, G4int origi 147 G4double originalMass, G4int originalZ) ; 142 148 143 G4double RandomizeEjectedElectronEnergyFromC 149 G4double RandomizeEjectedElectronEnergyFromCumulatedDcs(const G4ParticleDefinition*, 144 G4double k, G4int shell); << 150 G4double k, G4int shell); 145 151 146 G4double TransferedEnergy(const G4ParticleDe 152 G4double TransferedEnergy(const G4ParticleDefinition*, G4double k, 147 G4int ionizationLevelIndex, G4double 153 G4int ionizationLevelIndex, G4double random); 148 154 149 G4double Interpolate(G4double e1, G4double e 155 G4double Interpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); 150 156 151 G4double QuadInterpolator( G4double e11, G4d 157 G4double QuadInterpolator( G4double e11, G4double e12, G4double e21, G4double e22, 152 G4double x11, G4double x12, G4doubl 158 G4double x11, G4double x12, G4double x21, G4double x22, 153 G4double t1, G4double t2, G4doubl 159 G4double t1, G4double t2, G4double t, G4double e); 154 // 160 // 155 // private elements 161 // private elements 156 // << 162 // 157 G4ParticleChangeForGamma* fParticleChangeFor << 163 G4String currentMaterial = ""; 158 << 164 G4bool fasterCode = false; 159 //deexcitation manager to produce fluo photn 165 //deexcitation manager to produce fluo photns and e- 160 G4VAtomDeexcitation* fAtomDeexcitation = nul 166 G4VAtomDeexcitation* fAtomDeexcitation = nullptr; 161 G4Material* nistSi = nullptr; 167 G4Material* nistSi = nullptr; 162 G4MicroElecMaterialStructure* currentMateria << 168 std::map<G4String,G4double,std::less<G4String> > lowEnergyLimit; 163 << 169 std::map<G4String,G4double,std::less<G4String> > highEnergyLimit; >> 170 G4bool isInitialised = false; >> 171 G4int verboseLevel = 0; 164 typedef std::map<G4String,G4String,std::less 172 typedef std::map<G4String,G4String,std::less<G4String> > MapFile; 165 typedef std::map<G4String,G4MicroElecCrossSe 173 typedef std::map<G4String,G4MicroElecCrossSectionDataSet_new*,std::less<G4String> > MapData; 166 typedef std::map<G4double, std::map<G4double 174 typedef std::map<G4double, std::map<G4double, G4double> > TriDimensionMap; 167 typedef std::map<G4double, std::vector<G4dou 175 typedef std::map<G4double, std::vector<G4double> > VecMap; 168 << 169 //Tables for multilayers 176 //Tables for multilayers 170 typedef std::map<G4String, MapData*, std::le 177 typedef std::map<G4String, MapData*, std::less<G4String> > TCSMap; 171 TCSMap tableTCS; //TCS tables by particle 178 TCSMap tableTCS; //TCS tables by particle 172 typedef std::map<G4String, std::vector<TriDi 179 typedef std::map<G4String, std::vector<TriDimensionMap>* > dataDiffCSMap; 173 dataDiffCSMap eDiffDatatable, pDiffDatatable 180 dataDiffCSMap eDiffDatatable, pDiffDatatable; //Transfer probabilities (for slower code) 174 dataDiffCSMap eNrjTransStorage, pNrjTransSto 181 dataDiffCSMap eNrjTransStorage, pNrjTransStorage; //Transfered energies and corresponding probability (faster code) 175 typedef std::map<G4String, std::vector<VecMa 182 typedef std::map<G4String, std::vector<VecMap>* > dataProbaShellMap; 176 dataProbaShellMap eProbaShellStorage, pProba 183 dataProbaShellMap eProbaShellStorage, pProbaShellStorage; //Cumulated Transfer probabilities (faster code) 177 typedef std::map<G4String, std::vector<G4dou 184 typedef std::map<G4String, std::vector<G4double>* > incidentEnergyMap; 178 incidentEnergyMap eIncidentEnergyStorage, pI 185 incidentEnergyMap eIncidentEnergyStorage, pIncidentEnergyStorage; //Incident energies for interpolation (faster code) 179 typedef std::map<G4String, VecMap* > TranfEn 186 typedef std::map<G4String, VecMap* > TranfEnergyMap; 180 TranfEnergyMap eVecmStorage, pVecmStorage; / 187 TranfEnergyMap eVecmStorage, pVecmStorage; //Transfered energy for interpolation (slower code) 181 typedef std::map<G4String, G4MicroElecMateri 188 typedef std::map<G4String, G4MicroElecMaterialStructure*, std::less<G4String> > MapStructure; 182 MapStructure tableMaterialsStructures; //Str 189 MapStructure tableMaterialsStructures; //Structures of all materials simulated 183 << 190 G4MicroElecMaterialStructure* currentMaterialStructure = nullptr; 184 G4String currentMaterial = ""; << 191 185 std::map<G4String,G4double,std::less<G4Strin << 186 std::map<G4String,G4double,std::less<G4Strin << 187 << 188 G4int verboseLevel; << 189 G4bool isInitialised ; << 190 G4bool fasterCode; << 191 G4bool SEFromFermiLevel; << 192 << 193 }; 192 }; 194 193 195 #endif 194 #endif 196 195