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