Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // History: 27 // ----------- 28 // 10 Nov 2021 S. Guatelli & S. Bakr, Wollo 29 // 30 // Class description 31 // ---------------- 32 // Computation of K, L & M shell ECPSSR ionis 33 // Based on the work of 34 // - S. Bakr et al. (2021) NIM B, 507:11-19. 35 // - S. Bakr et al (2018), NIMB B, 436: 285-2 36 // ------------------------------------------- 37 38 #include <fstream> 39 #include <iomanip> 40 41 #include "globals.hh" 42 #include "G4ios.hh" 43 #include "G4SystemOfUnits.hh" 44 45 #include "G4EMDataSet.hh" 46 #include "G4LinInterpolation.hh" 47 #include "G4Proton.hh" 48 #include "G4Alpha.hh" 49 50 #include "G4ANSTOecpssrMixsModel.hh" 51 52 //....oooOO0OOooo........oooOO0OOooo........oo 53 54 G4ANSTOecpssrMixsModel::G4ANSTOecpssrMixsModel 55 { 56 G4cout << "Using ANSTO M Cross Sections! "<< 57 58 interpolation = new G4LinInterpolation(); 59 60 for (G4int i=67; i<93; i++) 61 { 62 protonM1DataSetMap[i] = new G4EMDataSet( 63 protonM1DataSetMap[i]->LoadData("pixe_AN 64 65 protonM2DataSetMap[i] = new G4EMDataSet( 66 protonM2DataSetMap[i]->LoadData("pixe_AN 67 68 protonM3DataSetMap[i] = new G4EMDataSet( 69 protonM3DataSetMap[i]->LoadData("pixe_AN 70 71 protonM4DataSetMap[i] = new G4EMDataSet( 72 protonM4DataSetMap[i]->LoadData("pixe_AN 73 74 protonM5DataSetMap[i] = new G4EMDataSet( 75 protonM5DataSetMap[i]->LoadData("pixe_AN 76 } 77 78 protonMiXsVector.push_back(protonM1DataSetMa 79 protonMiXsVector.push_back(protonM2DataSetMa 80 protonMiXsVector.push_back(protonM3DataSetMa 81 protonMiXsVector.push_back(protonM4DataSetMa 82 protonMiXsVector.push_back(protonM5DataSetMa 83 84 85 for (G4int i=67; i<93; i++) 86 { 87 alphaM1DataSetMap[i] = new G4EMDataSet(i 88 alphaM1DataSetMap[i]->LoadData("pixe_ANS 89 90 alphaM2DataSetMap[i] = new G4EMDataSet(i 91 alphaM2DataSetMap[i]->LoadData("pixe_ANS 92 93 alphaM3DataSetMap[i] = new G4EMDataSet(i 94 alphaM3DataSetMap[i]->LoadData("pixe_ANS 95 96 alphaM4DataSetMap[i] = new G4EMDataSet(i 97 alphaM4DataSetMap[i]->LoadData("pixe_ANS 98 99 alphaM5DataSetMap[i] = new G4EMDataSet(i 100 alphaM5DataSetMap[i]->LoadData("pixe_ANS 101 } 102 103 alphaMiXsVector.push_back(alphaM1DataSetMap) 104 alphaMiXsVector.push_back(alphaM2DataSetMap) 105 alphaMiXsVector.push_back(alphaM3DataSetMap) 106 alphaMiXsVector.push_back(alphaM4DataSetMap) 107 alphaMiXsVector.push_back(alphaM5DataSetMap) 108 } 109 110 //....oooOO0OOooo........oooOO0OOooo........oo 111 112 G4ANSTOecpssrMixsModel::~G4ANSTOecpssrMixsMode 113 { 114 protonM1DataSetMap.clear(); 115 alphaM1DataSetMap.clear(); 116 117 protonM2DataSetMap.clear(); 118 alphaM2DataSetMap.clear(); 119 120 protonM3DataSetMap.clear(); 121 alphaM3DataSetMap.clear(); 122 123 protonM4DataSetMap.clear(); 124 alphaM4DataSetMap.clear(); 125 126 protonM5DataSetMap.clear(); 127 alphaM5DataSetMap.clear(); 128 129 delete interpolation; 130 } 131 132 //....oooOO0OOooo........oooOO0OOooo........oo 133 134 G4double G4ANSTOecpssrMixsModel::CalculateMiCr 135 { 136 G4Proton* aProton = G4Proton::Proton(); 137 G4Alpha* aAlpha = G4Alpha::Alpha(); 138 G4double sigma = 0; 139 G4int mShellIndex = mShellId -1; 140 141 if (massIncident == aProton->GetPDGMass()) 142 { 143 if (energyIncident > 0.2*MeV && energyInc 144 145 sigma = protonMiXsVector[mShellIndex][zT 146 if (sigma !=0 && energyIncident > prot 147 } 148 } 149 150 else if (massIncident == aAlpha->GetPDGMas 151 { 152 if (energyIncident > 0.2*MeV && en 153 154 sigma = alphaMiXsVector[mShellInde 155 if (sigma !=0 && energyIncident > 156 } 157 } 158 159 else 160 { 161 sigma = 0.; 162 } 163 164 165 // sigma is in internal units: it has been c 166 // the input file in barns bt the EmDataset 167 return sigma; 168 } 169 170 //....oooOO0OOooo........oooOO0OOooo........oo 171 172 G4double G4ANSTOecpssrMixsModel::CalculateM1Cr 173 { 174 175 // mShellId 176 return CalculateMiCrossSection (zTarget, ma 177 178 } 179 180 //....oooOO0OOooo........oooOO0OOooo........oo 181 182 G4double G4ANSTOecpssrMixsModel::CalculateM2Cr 183 { 184 185 // mShellId 186 return CalculateMiCrossSection (zTarget, ma 187 188 /* 189 190 G4Proton* aProton = G4Proton::Proton(); 191 G4Alpha* aAlpha = G4Alpha::Alpha(); 192 G4double sigma = 0; 193 194 if (energyIncident > 0.1*MeV && energyIncide 195 196 if (massIncident == aProton->GetPDGMass()) 197 { 198 sigma = protonM2DataSetMap[zTarget]->FindVal 199 if (sigma !=0 && energyIncident > prot 200 } 201 else if (massIncident == aAlpha->GetPDGMas 202 { 203 sigma = alphaM2DataSetMap[zTarget]->Fi 204 if (sigma !=0 && energyIncident > alph 205 } 206 else 207 { 208 sigma = 0.; 209 } 210 } 211 212 // sigma is in internal units: it has been c 213 // the input file in barns bt the EmDataset 214 return sigma; 215 */ 216 } 217 218 //....oooOO0OOooo........oooOO0OOooo........oo 219 220 G4double G4ANSTOecpssrMixsModel::CalculateM3Cr 221 { 222 223 return CalculateMiCrossSection (zTarget, ma 224 /* 225 226 227 G4Proton* aProton = G4Proton::Proton(); 228 G4Alpha* aAlpha = G4Alpha::Alpha(); 229 G4double sigma = 0; 230 231 if (energyIncident > 0.1*MeV && energyIncide 232 233 if (massIncident == aProton->GetPDGMass()) 234 { 235 sigma = protonM3DataSetMap[zTarget]->FindVal 236 if (sigma !=0 && energyIncident > prot 237 } 238 else if (massIncident == aAlpha->GetPDGMas 239 { 240 sigma = alphaM3DataSetMap[zTarget]->Fi 241 if (sigma !=0 && energyIncident > alph 242 } 243 else 244 { 245 sigma = 0.; 246 } 247 } 248 249 // sigma is in internal units: it has been c 250 // the input file in barns bt the EmDataset 251 return sigma; 252 */ 253 } 254 255 //....oooOO0OOooo........oooOO0OOooo........oo 256 257 G4double G4ANSTOecpssrMixsModel::CalculateM4Cr 258 { 259 260 return CalculateMiCrossSection (zTarget, ma 261 /* 262 G4Proton* aProton = G4Proton::Proton(); 263 G4Alpha* aAlpha = G4Alpha::Alpha(); 264 G4double sigma = 0; 265 266 if (energyIncident > 0.1*MeV && energyIncide 267 268 if (massIncident == aProton->GetPDGMass()) 269 { 270 sigma = protonM3DataSetMap[zTarget]->FindVal 271 if (sigma !=0 && energyIncident > prot 272 } 273 else if (massIncident == aAlpha->GetPDGMas 274 { 275 sigma = alphaM3DataSetMap[zTarget]->Fi 276 if (sigma !=0 && energyIncident > alph 277 } 278 else 279 { 280 sigma = 0.; 281 } 282 } 283 284 // sigma is in internal units: it has been c 285 // the input file in barns bt the EmDataset 286 return sigma; 287 */ 288 } 289 290 //....oooOO0OOooo........oooOO0OOooo........oo 291 292 G4double G4ANSTOecpssrMixsModel::CalculateM5Cr 293 { 294 295 return CalculateMiCrossSection (zTarget, ma 296 /* 297 G4Proton* aProton = G4Proton::Proton(); 298 G4Alpha* aAlpha = G4Alpha::Alpha(); 299 G4double sigma = 0; 300 301 if (energyIncident > 0.1*MeV && energyIncide 302 303 if (massIncident == aProton->GetPDGMass()) 304 { 305 sigma = protonM3DataSetMap[zTarget]->FindVal 306 if (sigma !=0 && energyIncident > prot 307 } 308 else if (massIncident == aAlpha->GetPDGMas 309 { 310 sigma = alphaM3DataSetMap[zTarget]->Fi 311 if (sigma !=0 && energyIncident > alph 312 } 313 else 314 { 315 sigma = 0.; 316 } 317 } 318 319 // sigma is in internal units: it has been c 320 // the input file in barns bt the EmDataset 321 return sigma; 322 */ 323 } 324