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.hh, 2011/08/29 A. 27 // G4MicroElecInelasticModel.hh, 2011/08/29 A.Valentin, M. Raine 28 // 28 // 29 // Based on the following publications 29 // Based on the following publications 30 // 30 // 31 // - Inelastic cross-sections of low 31 // - Inelastic cross-sections of low energy electrons in silicon 32 // for the simulation of heavy ion tracks 32 // for the simulation of heavy ion tracks with theGeant4-DNA toolkit, 33 // NSS Conf. Record 2010, pp. 80-85 33 // NSS Conf. Record 2010, pp. 80-85 34 // - Geant4 physics processes for microdo 34 // - Geant4 physics processes for microdosimetry simulation: 35 // very low energy electromagnetic models 35 // very low energy electromagnetic models for electrons in Si, 36 // NIM B, vol. 288, pp. 66-73, 2012. 36 // NIM B, vol. 288, pp. 66-73, 2012. 37 // - Geant4 physics processes for microdo 37 // - Geant4 physics processes for microdosimetry simulation: 38 // very low energy electromagnetic models 38 // very low energy electromagnetic models for protons and 39 // heavy ions in Si, NIM B, vol. 287, pp. 39 // heavy ions in Si, NIM B, vol. 287, pp. 124-129, 2012. 40 // 40 // 41 //....oooOO0OOooo........oooOO0OOooo........oo 41 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 42 42 43 #ifndef G4MicroElecInelasticModel_h 43 #ifndef G4MicroElecInelasticModel_h 44 #define G4MicroElecInelasticModel_h 1 44 #define G4MicroElecInelasticModel_h 1 45 45 46 46 47 #include "globals.hh" 47 #include "globals.hh" 48 #include "G4VEmModel.hh" 48 #include "G4VEmModel.hh" 49 #include "G4ParticleChangeForGamma.hh" 49 #include "G4ParticleChangeForGamma.hh" 50 #include "G4ProductionCutsTable.hh" 50 #include "G4ProductionCutsTable.hh" 51 #include "G4VAtomDeexcitation.hh" << 52 #include "G4MicroElecSiStructure.hh" << 53 51 54 class G4ParticleDefinition; << 52 #include "G4MicroElecCrossSectionDataSet.hh" 55 class G4NistManager; << 53 #include "G4Electron.hh" 56 class G4MicroElecCrossSectionDataSet; << 54 #include "G4Proton.hh" >> 55 #include "G4GenericIon.hh" >> 56 #include "G4ParticleDefinition.hh" >> 57 >> 58 #include "G4LogLogInterpolation.hh" >> 59 >> 60 #include "G4MicroElecSiStructure.hh" >> 61 #include "G4VAtomDeexcitation.hh" >> 62 #include "G4NistManager.hh" 57 63 58 class G4MicroElecInelasticModel : public G4VEm 64 class G4MicroElecInelasticModel : public G4VEmModel 59 { 65 { 60 66 61 public: 67 public: 62 68 63 G4MicroElecInelasticModel(const G4ParticleDe << 69 G4MicroElecInelasticModel(const G4ParticleDefinition* p = 0, 64 const G4String& nam = "MicroEle 70 const G4String& nam = "MicroElecInelasticModel"); >> 71 65 virtual ~G4MicroElecInelasticModel(); 72 virtual ~G4MicroElecInelasticModel(); 66 << 67 void Initialise(const G4ParticleDefinition*, << 68 73 69 G4double CrossSectionPerVolume( const G4Mat << 74 virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&); 70 const G4ParticleDefinition* p, << 75 71 G4double ekin, << 76 virtual G4double CrossSectionPerVolume( const G4Material* material, 72 G4double emin, << 77 const G4ParticleDefinition* p, 73 G4double emax) override; << 78 G4double ekin, 74 void SampleSecondaries(std::vector<G4Dynamic << 79 G4double emin, 75 const G4MaterialCutsCouple*, << 80 G4double emax); 76 const G4DynamicParticle*, << 81 77 G4double tmin, << 82 virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*, 78 G4double maxEnergy) override; << 83 const G4MaterialCutsCouple*, 79 G4double DifferentialCrossSection(G4Particle << 84 const G4DynamicParticle*, 80 G4double k << 85 G4double tmin, 81 G4int shel << 86 G4double maxEnergy); 82 G4double TransferedEnergy(G4ParticleDefiniti << 87 83 G4double incomingP << 88 double DifferentialCrossSection(G4ParticleDefinition * aParticleDefinition, G4double k, G4double energyTransfer, G4int shell); 84 << 85 inline void SelectFasterComputation(G4bool i << 86 89 87 G4MicroElecInelasticModel & operator=(const << 88 G4MicroElecInelasticModel(const G4MicroElec << 89 << 90 protected: 90 protected: >> 91 91 G4ParticleChangeForGamma* fParticleChangeFor 92 G4ParticleChangeForGamma* fParticleChangeForGamma; 92 93 93 private: 94 private: 94 G4double RandomizeEjectedElectronEnergy(G4Pa << 95 G4double incomingParticleEnergy, G << 96 G4double RandomizeEjectedElectronEnergyFromC << 97 G4double incomingParticleEnerg << 98 G4double Interpolate(G4double e1, G4double e << 99 G4double QuadInterpolator( G4double e11, << 100 G4double e12, << 101 G4double e21, << 102 G4double e22, << 103 G4double x11, << 104 G4double x12, << 105 G4double x21, << 106 G4double x22, << 107 G4double t1, << 108 G4double t2, << 109 G4double t, << 110 G4double e); << 111 // Partial cross section << 112 G4int RandomSelect(G4double energy,const G4S << 113 95 114 //deexcitation manager to produce fluo photn 96 //deexcitation manager to produce fluo photns and e- 115 G4VAtomDeexcitation* fAtomDeexcitation; 97 G4VAtomDeexcitation* fAtomDeexcitation; >> 98 116 G4Material* nistSi; 99 G4Material* nistSi; >> 100 117 std::map<G4String,G4double,std::less<G4Strin 101 std::map<G4String,G4double,std::less<G4String> > lowEnergyLimit; 118 std::map<G4String,G4double,std::less<G4Strin 102 std::map<G4String,G4double,std::less<G4String> > highEnergyLimit; 119 103 >> 104 G4bool isInitialised; >> 105 G4int verboseLevel; >> 106 120 // Cross section 107 // Cross section >> 108 121 typedef std::map<G4String,G4String,std::less 109 typedef std::map<G4String,G4String,std::less<G4String> > MapFile; 122 MapFile tableFile; 110 MapFile tableFile; 123 111 124 typedef std::map<G4String,G4MicroElecCrossSe 112 typedef std::map<G4String,G4MicroElecCrossSectionDataSet*,std::less<G4String> > MapData; 125 MapData tableData; 113 MapData tableData; 126 114 127 typedef std::map<G4double, std::map<G4double << 115 // Final state >> 116 >> 117 G4MicroElecSiStructure SiStructure; >> 118 >> 119 G4double RandomizeEjectedElectronEnergy(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4int shell) ; >> 120 >> 121 void RandomizeEjectedElectronDirection(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4double >> 122 outgoingParticleEnergy, G4double & cosTheta, G4double & phi ); >> 123 >> 124 G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); >> 125 >> 126 G4double QuadInterpolator( G4double e11, >> 127 G4double e12, >> 128 G4double e21, >> 129 G4double e22, >> 130 G4double x11, >> 131 G4double x12, >> 132 G4double x21, >> 133 G4double x22, >> 134 G4double t1, >> 135 G4double t2, >> 136 G4double t, >> 137 G4double e); >> 138 >> 139 typedef std::map<double, std::map<double, double> > TriDimensionMap; 128 TriDimensionMap eDiffCrossSectionData[7]; 140 TriDimensionMap eDiffCrossSectionData[7]; 129 TriDimensionMap eNrjTransfData[7]; // for cu << 130 TriDimensionMap pDiffCrossSectionData[7]; 141 TriDimensionMap pDiffCrossSectionData[7]; 131 TriDimensionMap pNrjTransfData[7]; // for cu << 142 std::vector<double> eTdummyVec; 132 std::vector<G4double> eTdummyVec; << 143 std::vector<double> pTdummyVec; 133 std::vector<G4double> pTdummyVec; << 134 144 135 typedef std::map<G4double, std::vector<G4dou << 145 typedef std::map<double, std::vector<double> > VecMap; 136 VecMap eVecm; 146 VecMap eVecm; 137 VecMap pVecm; 147 VecMap pVecm; 138 VecMap eProbaShellMap[7]; // for cumulated d << 139 VecMap pProbaShellMap[7]; // for cumulated d << 140 148 141 // Final state << 149 // Partial cross section 142 G4MicroElecSiStructure SiStructure; << 150 >> 151 G4int RandomSelect(G4double energy,const G4String& particle ); >> 152 >> 153 // >> 154 >> 155 G4MicroElecInelasticModel & operator=(const G4MicroElecInelasticModel &right); >> 156 G4MicroElecInelasticModel(const G4MicroElecInelasticModel&); 143 157 144 G4int verboseLevel; << 145 G4bool isInitialised; << 146 G4bool fasterCode; << 147 // << 148 }; 158 }; 149 << 150 //....oooOO0OOooo........oooOO0OOooo........oo << 151 << 152 inline void G4MicroElecInelasticModel::SelectF << 153 { << 154 fasterCode = input; << 155 } << 156 159 157 //....oooOO0OOooo........oooOO0OOooo........oo 160 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 158 161 159 #endif 162 #endif 160 163