Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 // 28 // Based on G4AtomicTransition.cc by 29 // Elena Guardincerri (Elena.Guardincerri@ge.infn.it) 30 // 31 // Author: Alfonso Mantero (Alfonso.Mantero@ge.infn.it) 32 // 33 // History: 34 // ----------- 35 // 4 Mar 2002: first implementation 36 // 37 // ------------------------------------------------------------------- 38 39 #include "G4AugerTransition.hh" 40 41 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 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 and transition probability) 44 G4AugerTransition::G4AugerTransition(G4int finalShell, std::vector<G4int> transIds, 45 const std::map<G4int,std::vector<G4int>,std::less<G4int> >* idMap, 46 const std::map<G4int,G4DataVector,std::less<G4int> >* energyMap, 47 const std::map<G4int,G4DataVector,std::less<G4int> >* probabilityMap) 48 { 49 finalShellId = finalShell; 50 augerOriginatingShellIdsMap = *idMap; 51 augerTransitionEnergiesMap = *energyMap; 52 augerTransitionProbabilitiesMap = *probabilityMap; 53 transitionOriginatingShellIds = std::move(transIds); 54 } 55 56 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 57 58 G4AugerTransition::~G4AugerTransition() 59 {;} 60 61 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 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 from. 64 const std::vector<G4int>* G4AugerTransition::AugerOriginatingShellIds(G4int startShellId) const 65 { 66 auto shellId = augerOriginatingShellIdsMap.find(startShellId); 67 68 const std::vector<G4int>* dataSet = &(*shellId).second; 69 if (dataSet->empty()) 70 G4cout << "Error: no auger Id found"<< G4endl; 71 return dataSet; 72 } 73 74 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 75 // Returns the ids of the shells from wich an electron cuuld fill the vacancy in finalShellId 76 const std::vector<G4int>* G4AugerTransition::TransitionOriginatingShellIds() const 77 { 78 const std::vector<G4int>* dataSet = &transitionOriginatingShellIds; 79 return dataSet; 80 } 81 82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 83 // Returns the energies of the possible auger electrons, given the shell 84 // from which the transition electron came from. 85 const G4DataVector* G4AugerTransition::AugerTransitionEnergies(G4int startShellId) const 86 { 87 auto shellId = augerTransitionEnergiesMap.find(startShellId); 88 89 if (shellId == augerTransitionEnergiesMap.end() ) 90 { 91 G4Exception("G4AugerTransition::AugerTransitionEnergies()","de0002",JustWarning, 92 "corresponding map element not found, energy deposited locally"); 93 return 0; 94 } 95 const G4DataVector* dataSet = &(*shellId).second; 96 return dataSet; 97 } 98 99 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 100 // Returns the emission probabilities of the auger electrons, given the shell 101 // from wich the transition electron cames from. 102 const G4DataVector* G4AugerTransition::AugerTransitionProbabilities(G4int startShellId) const 103 { 104 auto shellId = augerTransitionProbabilitiesMap.find(startShellId); 105 if (shellId == augerTransitionProbabilitiesMap.end() ) 106 { 107 108 G4Exception("G4AugerTransition::AugerTransitionProbabilities()","de0002", 109 JustWarning,"corresponding map element not found, energy deposited locally"); 110 return 0; 111 } 112 113 const G4DataVector* dataSet = &(*shellId).second; 114 return dataSet; 115 } 116 117 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 118 G4int G4AugerTransition::FinalShellId() const 119 { 120 return finalShellId; 121 } 122 123 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 124 // Returns the id of the shell from wich come the auger electron , given the shell 125 // from wich the transition electron cames from and the index number. 126 G4int G4AugerTransition::AugerOriginatingShellId(G4int index, G4int startShellId) const 127 { 128 const std::vector<G4int>* ids = AugerOriginatingShellIds(startShellId); 129 // G4int i = 130 std::vector<G4int>::const_iterator pos = ids->begin(); 131 G4int n = 0; 132 n = *(pos+index); 133 return n; 134 } 135 136 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 137 // Returns the energy of the auger electron, given the shell 138 // from wich the transition electron cames from and the index number. 139 G4double G4AugerTransition::AugerTransitionEnergy(G4int index, G4int startShellId) const 140 { 141 const G4DataVector* energies = AugerTransitionEnergies(startShellId); 142 G4double energy = 0; 143 if (index < (G4int) energies->size()) { 144 G4DataVector::const_iterator pos = energies->begin(); 145 energy = *(pos+index); 146 } 147 return energy; 148 } 149 150 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 151 // Returns the probability of the auger emission, given the shell 152 // from wich the transition electron cames from and the index number. 153 G4double G4AugerTransition::AugerTransitionProbability(G4int index, G4int startShellId) const 154 { 155 156 const G4DataVector *probabilities = AugerTransitionProbabilities(startShellId); 157 G4DataVector::const_iterator pos = probabilities->begin(); 158 159 G4double probability = 0; 160 probability = *(pos+index); 161 162 return probability; 163 } 164 165 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 166 G4int G4AugerTransition::TransitionOriginatingShellId(G4int index) const 167 { 168 return transitionOriginatingShellIds[index]; 169 } 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191