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 // 27 // 28 // Based on G4AtomicTransition.cc by 28 // Based on G4AtomicTransition.cc by 29 // Elena Guardincerri (Elena.Guardincerri@ge.i 29 // Elena Guardincerri (Elena.Guardincerri@ge.infn.it) 30 // 30 // 31 // Author: Alfonso Mantero (Alfonso.Mantero@ge 31 // Author: Alfonso Mantero (Alfonso.Mantero@ge.infn.it) 32 // 32 // 33 // History: 33 // History: 34 // ----------- 34 // ----------- 35 // 4 Mar 2002: first implementation 35 // 4 Mar 2002: first implementation 36 // 36 // 37 // ------------------------------------------- 37 // ------------------------------------------------------------------- 38 38 39 #include "G4AugerTransition.hh" 39 #include "G4AugerTransition.hh" 40 40 41 //....oooOO0OOooo........oooOO0OOooo........oo 41 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 42 // the final shell in wich the electron goes i 42 // the final shell in wich the electron goes is needed, to know the data for the auger electron emitted 43 // (i.e. originating shell id, electron energy 43 // (i.e. originating shell id, electron energy and transition probability) 44 G4AugerTransition::G4AugerTransition(G4int fin 44 G4AugerTransition::G4AugerTransition(G4int finalShell, std::vector<G4int> transIds, 45 const std::map<G4int,std::vector< 45 const std::map<G4int,std::vector<G4int>,std::less<G4int> >* idMap, 46 const std::map<G4int,G4DataVector 46 const std::map<G4int,G4DataVector,std::less<G4int> >* energyMap, 47 const std::map<G4int,G4DataVector 47 const std::map<G4int,G4DataVector,std::less<G4int> >* probabilityMap) 48 { 48 { 49 finalShellId = finalShell; 49 finalShellId = finalShell; 50 augerOriginatingShellIdsMap = *idMap; 50 augerOriginatingShellIdsMap = *idMap; 51 augerTransitionEnergiesMap = *energyMap; 51 augerTransitionEnergiesMap = *energyMap; 52 augerTransitionProbabilitiesMap = *probabili 52 augerTransitionProbabilitiesMap = *probabilityMap; 53 transitionOriginatingShellIds = std::move(tr << 53 transitionOriginatingShellIds = transIds; 54 } 54 } 55 55 56 //....oooOO0OOooo........oooOO0OOooo........oo 56 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 57 57 58 G4AugerTransition::~G4AugerTransition() 58 G4AugerTransition::~G4AugerTransition() 59 {;} 59 {;} 60 60 61 //....oooOO0OOooo........oooOO0OOooo........oo 61 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 62 // Returns the ids of the shells from wich an 62 // Returns the ids of the shells from wich an auger electron culd came from, given th shell 63 // from wich the transition electron cames fro 63 // from wich the transition electron cames from. 64 const std::vector<G4int>* G4AugerTransition::A 64 const std::vector<G4int>* G4AugerTransition::AugerOriginatingShellIds(G4int startShellId) const 65 { 65 { 66 auto shellId = augerOriginatingShellIdsMap.f 66 auto shellId = augerOriginatingShellIdsMap.find(startShellId); 67 67 68 const std::vector<G4int>* dataSet = &(*shell 68 const std::vector<G4int>* dataSet = &(*shellId).second; 69 if (dataSet->empty()) 69 if (dataSet->empty()) 70 G4cout << "Error: no auger Id found"<< G4e 70 G4cout << "Error: no auger Id found"<< G4endl; 71 return dataSet; 71 return dataSet; 72 } 72 } 73 73 74 //....oooOO0OOooo........oooOO0OOooo........oo 74 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 75 // Returns the ids of the shells from wich an 75 // Returns the ids of the shells from wich an electron cuuld fill the vacancy in finalShellId 76 const std::vector<G4int>* G4AugerTransition::T 76 const std::vector<G4int>* G4AugerTransition::TransitionOriginatingShellIds() const 77 { 77 { 78 const std::vector<G4int>* dataSet = &transit 78 const std::vector<G4int>* dataSet = &transitionOriginatingShellIds; 79 return dataSet; 79 return dataSet; 80 } 80 } 81 81 82 //....oooOO0OOooo........oooOO0OOooo........oo 82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 83 // Returns the energies of the possible auger 83 // Returns the energies of the possible auger electrons, given the shell 84 // from which the transition electron came fro 84 // from which the transition electron came from. 85 const G4DataVector* G4AugerTransition::AugerTr 85 const G4DataVector* G4AugerTransition::AugerTransitionEnergies(G4int startShellId) const 86 { 86 { 87 auto shellId = augerTransitionEnergiesMap.fi 87 auto shellId = augerTransitionEnergiesMap.find(startShellId); 88 88 89 if (shellId == augerTransitionEnergiesMap.en 89 if (shellId == augerTransitionEnergiesMap.end() ) 90 { 90 { 91 G4Exception("G4AugerTransition::AugerTra 91 G4Exception("G4AugerTransition::AugerTransitionEnergies()","de0002",JustWarning, 92 "corresponding map element not found, en 92 "corresponding map element not found, energy deposited locally"); 93 return 0; 93 return 0; 94 } 94 } 95 const G4DataVector* dataSet = &(*shellId).se 95 const G4DataVector* dataSet = &(*shellId).second; 96 return dataSet; 96 return dataSet; 97 } 97 } 98 98 99 //....oooOO0OOooo........oooOO0OOooo........oo 99 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 100 // Returns the emission probabilities of the a 100 // Returns the emission probabilities of the auger electrons, given the shell 101 // from wich the transition electron cames fro 101 // from wich the transition electron cames from. 102 const G4DataVector* G4AugerTransition::AugerTr 102 const G4DataVector* G4AugerTransition::AugerTransitionProbabilities(G4int startShellId) const 103 { 103 { 104 auto shellId = augerTransitionProbabilitiesM 104 auto shellId = augerTransitionProbabilitiesMap.find(startShellId); 105 if (shellId == augerTransitionProbabilitiesM 105 if (shellId == augerTransitionProbabilitiesMap.end() ) 106 { 106 { 107 107 108 G4Exception("G4AugerTransition::AugerTra 108 G4Exception("G4AugerTransition::AugerTransitionProbabilities()","de0002", 109 JustWarning,"corresponding map element n 109 JustWarning,"corresponding map element not found, energy deposited locally"); 110 return 0; 110 return 0; 111 } 111 } 112 112 113 const G4DataVector* dataSet = &(*shellId).se 113 const G4DataVector* dataSet = &(*shellId).second; 114 return dataSet; 114 return dataSet; 115 } 115 } 116 116 117 //....oooOO0OOooo........oooOO0OOooo........oo 117 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 118 G4int G4AugerTransition::FinalShellId() const 118 G4int G4AugerTransition::FinalShellId() const 119 { 119 { 120 return finalShellId; 120 return finalShellId; 121 } 121 } 122 122 123 //....oooOO0OOooo........oooOO0OOooo........oo 123 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 124 // Returns the id of the shell from wich come 124 // Returns the id of the shell from wich come the auger electron , given the shell 125 // from wich the transition electron cames fro 125 // from wich the transition electron cames from and the index number. 126 G4int G4AugerTransition::AugerOriginatingShell 126 G4int G4AugerTransition::AugerOriginatingShellId(G4int index, G4int startShellId) const 127 { 127 { 128 const std::vector<G4int>* ids = AugerOrigina 128 const std::vector<G4int>* ids = AugerOriginatingShellIds(startShellId); 129 // G4int i = 129 // G4int i = 130 std::vector<G4int>::const_iterator pos = ids 130 std::vector<G4int>::const_iterator pos = ids->begin(); 131 G4int n = 0; 131 G4int n = 0; 132 n = *(pos+index); 132 n = *(pos+index); 133 return n; 133 return n; 134 } 134 } 135 135 136 //....oooOO0OOooo........oooOO0OOooo........oo 136 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 137 // Returns the energy of the auger electron, g 137 // Returns the energy of the auger electron, given the shell 138 // from wich the transition electron cames fro 138 // from wich the transition electron cames from and the index number. 139 G4double G4AugerTransition::AugerTransitionEne 139 G4double G4AugerTransition::AugerTransitionEnergy(G4int index, G4int startShellId) const 140 { 140 { 141 const G4DataVector* energies = AugerTransiti 141 const G4DataVector* energies = AugerTransitionEnergies(startShellId); 142 G4double energy = 0; 142 G4double energy = 0; 143 if (index < (G4int) energies->size()) { 143 if (index < (G4int) energies->size()) { 144 G4DataVector::const_iterator pos = energie 144 G4DataVector::const_iterator pos = energies->begin(); 145 energy = *(pos+index); 145 energy = *(pos+index); 146 } 146 } 147 return energy; 147 return energy; 148 } 148 } 149 149 150 //....oooOO0OOooo........oooOO0OOooo........oo 150 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 151 // Returns the probability of the auger emissi 151 // Returns the probability of the auger emission, given the shell 152 // from wich the transition electron cames fro 152 // from wich the transition electron cames from and the index number. 153 G4double G4AugerTransition::AugerTransitionPro 153 G4double G4AugerTransition::AugerTransitionProbability(G4int index, G4int startShellId) const 154 { 154 { 155 155 156 const G4DataVector *probabilities = AugerTra 156 const G4DataVector *probabilities = AugerTransitionProbabilities(startShellId); 157 G4DataVector::const_iterator pos = probabili 157 G4DataVector::const_iterator pos = probabilities->begin(); 158 158 159 G4double probability = 0; 159 G4double probability = 0; 160 probability = *(pos+index); 160 probability = *(pos+index); 161 161 162 return probability; 162 return probability; 163 } 163 } 164 164 165 //....oooOO0OOooo........oooOO0OOooo........oo 165 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 166 G4int G4AugerTransition::TransitionOriginating 166 G4int G4AugerTransition::TransitionOriginatingShellId(G4int index) const 167 { 167 { 168 return transitionOriginatingShellIds[index] 168 return transitionOriginatingShellIds[index]; 169 } 169 } 170 170 171 171 172 172 173 173 174 174 175 175 176 176 177 177 178 178 179 179 180 180 181 181 182 182 183 183 184 184 185 185 186 186 187 187 188 188 189 189 190 190 191 191