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 // Authors: S. Meylan and C. Villagrasa (IRSN, 26 // Models come from 27 // M. Bug et al, Rad. Phys and Chem. 130, 459- 28 29 #include "G4DNAPTBIonisationStructure.hh" 30 #include "G4Material.hh" 31 #include "G4SystemOfUnits.hh" 32 33 G4DNAPTBIonisationStructure::G4DNAPTBIonisatio 34 { 35 fpTHF = G4Material::GetMaterial("THF", false 36 fpPY = G4Material::GetMaterial("PY", false); 37 fpPU = G4Material::GetMaterial("PU", false); 38 fpTMP = G4Material::GetMaterial("TMP", false 39 fpG4_WATER = G4Material::GetMaterial("G4_WAT 40 fpBackbone_THF = G4Material::GetMaterial("ba 41 fpCytosine_PY = G4Material::GetMaterial("cyt 42 fpThymine_PY = G4Material::GetMaterial("thym 43 fpAdenine_PU = G4Material::GetMaterial("aden 44 fpBackbone_TMP = G4Material::GetMaterial("ba 45 fpGuanine_PU = G4Material::GetMaterial("guan 46 fpN2 = G4Material::GetMaterial("N2", false); 47 48 // MPietrzak 49 if (fpN2 != nullptr) { 50 auto index = fpN2->GetIndex(); 51 energyConstant[index].push_back(15.58 * eV 52 energyConstant[index].push_back(17.07 * eV 53 energyConstant[index].push_back(21.00 * eV 54 energyConstant[index].push_back(41.72 * eV 55 energyConstant[index].push_back(409.9*eV); 56 } 57 58 // MPietrzak 59 if (fpG4_WATER != nullptr) { 60 auto index = fpG4_WATER->GetIndex(); 61 energyConstant[index].push_back(10.79 * eV 62 energyConstant[index].push_back(13.39 * eV 63 energyConstant[index].push_back(16.05 * eV 64 energyConstant[index].push_back(32.30 * eV 65 energyConstant[index].push_back(539.0 * eV 66 } 67 if (fpTHF != nullptr) { 68 auto index = fpTHF->GetIndex(); 69 energyConstant[index].push_back(9.74 * eV) 70 energyConstant[index].push_back(12.31 * eV 71 energyConstant[index].push_back(12.99 * eV 72 energyConstant[index].push_back(13.57 * eV 73 energyConstant[index].push_back(13.60 * eV 74 energyConstant[index].push_back(15.11 * eV 75 energyConstant[index].push_back(15.97 * eV 76 energyConstant[index].push_back(16.28 * eV 77 energyConstant[index].push_back(18.19 * eV 78 energyConstant[index].push_back(18.69 * eV 79 energyConstant[index].push_back(22.14 * eV 80 energyConstant[index].push_back(22.25 * eV 81 energyConstant[index].push_back(27.21 * eV 82 energyConstant[index].push_back(28.97 * eV 83 energyConstant[index].push_back(36.97 * eV 84 energyConstant[index].push_back(305.07 * e 85 energyConstant[index].push_back(305.08 * e 86 energyConstant[index].push_back(306.17 * e 87 energyConstant[index].push_back(306.17 * e 88 energyConstant[index].push_back(557.94 * e 89 } 90 91 if (fpPY != nullptr) { 92 auto index = fpPY->GetIndex(); 93 energyConstant[index].push_back(9.73 * eV) 94 energyConstant[index].push_back(10.96 * eV 95 energyConstant[index].push_back(11.54 * eV 96 energyConstant[index].push_back(12.58 * eV 97 energyConstant[index].push_back(15.96 * eV 98 energyConstant[index].push_back(16.27 * eV 99 energyConstant[index].push_back(16.53 * eV 100 energyConstant[index].push_back(17.98 * eV 101 energyConstant[index].push_back(19.37 * eV 102 energyConstant[index].push_back(20.52 * eV 103 energyConstant[index].push_back(24.55 * eV 104 energyConstant[index].push_back(24.64 * eV 105 energyConstant[index].push_back(29.75 * eV 106 energyConstant[index].push_back(33.02 * eV 107 energyConstant[index].push_back(36.57 * eV 108 energyConstant[index].push_back(305.92 * e 109 energyConstant[index].push_back(307.09 * e 110 energyConstant[index].push_back(307.09 * e 111 energyConstant[index].push_back(307.52 * e 112 energyConstant[index].push_back(423.44 * e 113 energyConstant[index].push_back(423.44 * e 114 } 115 116 if (fpPU != nullptr) { 117 auto index = fpPU->GetIndex(); 118 energyConstant[index].push_back(9.58 * eV) 119 energyConstant[index].push_back(10.57 * eV 120 energyConstant[index].push_back(10.97 * eV 121 energyConstant[index].push_back(12.22 * eV 122 energyConstant[index].push_back(12.92 * eV 123 energyConstant[index].push_back(13.44 * eV 124 energyConstant[index].push_back(15.05 * eV 125 energyConstant[index].push_back(16.56 * eV 126 energyConstant[index].push_back(17.18 * eV 127 energyConstant[index].push_back(17.88 * eV 128 energyConstant[index].push_back(17.90 * eV 129 energyConstant[index].push_back(19.11 * eV 130 energyConstant[index].push_back(20.09 * eV 131 energyConstant[index].push_back(21.70 * eV 132 energyConstant[index].push_back(23.52 * eV 133 energyConstant[index].push_back(24.35 * eV 134 energyConstant[index].push_back(25.41 * eV 135 energyConstant[index].push_back(29.34 * eV 136 energyConstant[index].push_back(32.44 * eV 137 energyConstant[index].push_back(33.67 * eV 138 energyConstant[index].push_back(36.26 * eV 139 energyConstant[index].push_back(38.22 * eV 140 energyConstant[index].push_back(306.53 * e 141 energyConstant[index].push_back(307.19 * e 142 energyConstant[index].push_back(307.64 * e 143 energyConstant[index].push_back(308.14 * e 144 energyConstant[index].push_back(308.17 * e 145 energyConstant[index].push_back(423.31 * e 146 energyConstant[index].push_back(423.43 * e 147 energyConstant[index].push_back(423.64 * e 148 energyConstant[index].push_back(423.98 * e 149 } 150 151 if (fpTMP != nullptr) { 152 auto index = fpTMP->GetIndex(); 153 energyConstant[index].push_back(10.81 * eV 154 energyConstant[index].push_back(10.81 * eV 155 energyConstant[index].push_back(12.90 * eV 156 energyConstant[index].push_back(13.32 * eV 157 energyConstant[index].push_back(13.32 * eV 158 energyConstant[index].push_back(13.59 * eV 159 energyConstant[index].push_back(14.33 * eV 160 energyConstant[index].push_back(14.33 * eV 161 energyConstant[index].push_back(15.90 * eV 162 energyConstant[index].push_back(17.09 * eV 163 energyConstant[index].push_back(17.09 * eV 164 energyConstant[index].push_back(17.13 * eV 165 energyConstant[index].push_back(17.85 * eV 166 energyConstant[index].push_back(17.85 * eV 167 energyConstant[index].push_back(18.44 * eV 168 energyConstant[index].push_back(19.37 * eV 169 energyConstant[index].push_back(19.37 * eV 170 energyConstant[index].push_back(21.40 * eV 171 energyConstant[index].push_back(26.20 * eV 172 energyConstant[index].push_back(26.20 * eV 173 energyConstant[index].push_back(27.43 * eV 174 energyConstant[index].push_back(35.23 * eV 175 energyConstant[index].push_back(37.67 * eV 176 energyConstant[index].push_back(37.67 * eV 177 energyConstant[index].push_back(39.64 * eV 178 energyConstant[index].push_back(152.42 * e 179 energyConstant[index].push_back(152.42 * e 180 energyConstant[index].push_back(152.44 * e 181 energyConstant[index].push_back(209.59 * e 182 energyConstant[index].push_back(306.92 * e 183 energyConstant[index].push_back(306.92 * e 184 energyConstant[index].push_back(306.92 * e 185 energyConstant[index].push_back(557.34 * e 186 energyConstant[index].push_back(559.40 * e 187 energyConstant[index].push_back(559.40 * e 188 energyConstant[index].push_back(559.41 * e 189 energyConstant[index].push_back(2178.05 * 190 } 191 192 for (const auto& [index, levels] : energyCon 193 nLevels[index] = (G4int)levels.size(); 194 } 195 } 196 197 G4double G4DNAPTBIonisationStructure::Ionisati 198 { 199 size_t matNameModif = ReplaceMaterial(materi 200 201 // check if the material exist in the map 202 if (energyConstant.find(matNameModif) == ene 203 std::ostringstream oss; 204 oss << "Material name was not found in ene 205 << materialID; 206 G4Exception( 207 "G4DNAPTBIonisationStructure::Ionisation 208 } 209 210 G4double ionisation = 0.; 211 212 if (level >= 0 && level < nLevels[matNameMod 213 214 return ionisation; 215 } 216 217 G4int G4DNAPTBIonisationStructure::NumberOfLev 218 { 219 auto matNameModif = ReplaceMaterial(material 220 221 // check if the material exist in the map 222 if (nLevels.find(matNameModif) == nLevels.en 223 std::ostringstream oss; 224 oss << "Material name was not found in ene 225 << matNameModif; 226 G4Exception( 227 "G4DNAPTBIonisationStructure::NumberOfLe 228 } 229 230 return nLevels[matNameModif]; 231 } 232 233 size_t G4DNAPTBIonisationStructure::ReplaceMat 234 { 235 if (fpBackbone_THF != nullptr && materialID 236 return fpTHF->GetIndex(); 237 } 238 if (fpBackbone_TMP != nullptr && materialID 239 return fpTMP->GetIndex(); 240 } 241 if (fpAdenine_PU != nullptr && materialID == 242 return fpPU->GetIndex(); 243 } 244 if (fpGuanine_PU != nullptr && materialID == 245 return fpPU->GetIndex(); 246 } 247 if (fpThymine_PY != nullptr && materialID == 248 return fpPY->GetIndex(); 249 } 250 if (fpCytosine_PY != nullptr && materialID = 251 return fpPY->GetIndex(); 252 } 253 return materialID; 254 } 255