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 // Based on the work of M. Terrissol and M. C. Bordage 27 // 28 // Users are requested to cite the following papers: 29 // - M. Terrissol, A. Baudre, Radiat. Prot. Dosim. 31 (1990) 175-177 30 // - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, 31 // M. Bardies, N. Lampe, S. Incerti, Phys. Med. 32 (2016) 1833-1840 32 // 33 // Authors of this class: 34 // M.C. Bordage, M. Terrissol, S. Edel, J. Bordes, S. Incerti 35 // 36 // 15.01.2014: creation 37 // 38 // 39 // Modified for Adenine material by S. Zein on 20.04.2021 40 // Based on the study by S. Zein et. al. Nucl. Inst. Meth. B 488 (2021) 70-82 41 42 #include "G4DNACPA100ExcitationStructure.hh" 43 44 #include "G4Material.hh" 45 #include "G4SystemOfUnits.hh" 46 G4DNACPA100ExcitationStructure::G4DNACPA100ExcitationStructure() 47 { 48 fpGuanine = G4Material::GetMaterial("G4_GUANINE", false); 49 fpG4_WATER = G4Material::GetMaterial("G4_WATER", false); 50 fpDeoxyribose = G4Material::GetMaterial("G4_DEOXYRIBOSE", false); 51 fpCytosine = G4Material::GetMaterial("G4_CYTOSINE", false); 52 fpThymine = G4Material::GetMaterial("G4_THYMINE", false); 53 fpAdenine = G4Material::GetMaterial("G4_ADENINE", false); 54 fpPhosphate = G4Material::GetMaterial("G4_PHOSPHORIC_ACID", false); 55 56 if (fpGuanine != nullptr) { 57 InitialiseGuanine(); 58 } 59 60 if (fpG4_WATER != nullptr) { 61 InitialiseWater(); 62 } 63 64 if (fpDeoxyribose != nullptr) { 65 InitialiseDeoxyribose(); 66 } 67 68 if (fpCytosine != nullptr) { 69 InitialiseCytosine(); 70 } 71 72 if (fpThymine != nullptr) { 73 InitialiseThymine(); 74 } 75 76 if (fpAdenine != nullptr) { 77 InitialiseAdenine(); 78 } 79 80 if (fpPhosphate != nullptr) { 81 InitialisePhosphate(); 82 } 83 } 84 85 void G4DNACPA100ExcitationStructure::InitialiseGuanine() 86 { 87 auto index = fpGuanine->GetIndex(); 88 fEnergyConstant[index].push_back(8.2315 * eV); 89 fEnergyConstant[index].push_back(11.0928 * eV); 90 fEnergyConstant[index].push_back(11.5984 * eV); 91 fEnergyConstant[index].push_back(11.7906 * eV); 92 fEnergyConstant[index].push_back(11.9382 * eV); 93 fEnergyConstant[index].push_back(12.4424 * eV); 94 fEnergyConstant[index].push_back(13.3581 * eV); 95 fEnergyConstant[index].push_back(15.1381 * eV); 96 fEnergyConstant[index].push_back(16.4059 * eV); 97 fEnergyConstant[index].push_back(16.496 * eV); 98 fEnergyConstant[index].push_back(16.8457 * eV); 99 fEnergyConstant[index].push_back(17.297 * eV); 100 fEnergyConstant[index].push_back(18.0608 * eV); 101 fEnergyConstant[index].push_back(18.441 * eV); 102 fEnergyConstant[index].push_back(19.2414 * eV); 103 104 fnLevels[index] = fEnergyConstant[index].size(); 105 } 106 void G4DNACPA100ExcitationStructure::InitialiseWater() 107 { 108 auto index = fpG4_WATER->GetIndex(); 109 // The following values are extracted from the thesis of S. Edel, 110 // Paul Sabatier University, Toulouse, France, July 7, 2006 111 // Page 36 112 fEnergyConstant[index].push_back(8.17 * eV); 113 fEnergyConstant[index].push_back(10.13 * eV); 114 fEnergyConstant[index].push_back(11.31 * eV); 115 fEnergyConstant[index].push_back(12.91 * eV); 116 fEnergyConstant[index].push_back(14.50 * eV); 117 118 fUConstant[index].push_back(61.91 * eV); 119 fUConstant[index].push_back(59.52 * eV); 120 fUConstant[index].push_back(48.36 * eV); 121 fUConstant[index].push_back(70.71 * eV); 122 fUConstant[index].push_back(796.2 * eV); 123 124 fnLevels[index] = fEnergyConstant[index].size(); 125 } 126 void G4DNACPA100ExcitationStructure::InitialiseDeoxyribose() 127 { 128 auto index = fpDeoxyribose->GetIndex(); 129 fEnergyConstant[index].push_back(11.2410 * eV); 130 fEnergyConstant[index].push_back(11.7927 * eV); 131 fEnergyConstant[index].push_back(12.6579 * eV); 132 fEnergyConstant[index].push_back(12.8163 * eV); 133 fEnergyConstant[index].push_back(13.3238 * eV); 134 fEnergyConstant[index].push_back(13.9487 * eV); 135 fEnergyConstant[index].push_back(14.4374 * eV); 136 fEnergyConstant[index].push_back(14.7433 * eV); 137 fEnergyConstant[index].push_back(15.0818 * eV); 138 fEnergyConstant[index].push_back(15.6112 * eV); 139 fEnergyConstant[index].push_back(16.0547 * eV); 140 fEnergyConstant[index].push_back(16.8319 * eV); 141 fEnergyConstant[index].push_back(17.4294 * eV); 142 fEnergyConstant[index].push_back(18.0000 * eV); 143 fEnergyConstant[index].push_back(18.2696 * eV); 144 fEnergyConstant[index].push_back(18.6049 * eV); 145 fEnergyConstant[index].push_back(19.8378 * eV); 146 147 fnLevels[index] = fEnergyConstant[index].size(); 148 } 149 void G4DNACPA100ExcitationStructure::InitialiseCytosine() 150 { 151 auto index = fpCytosine->GetIndex(); 152 // The following values are extracted from the thesis of S. Edel, 153 fEnergyConstant[index].push_back(9.3222 * eV); 154 fEnergyConstant[index].push_back(10.4601 * eV); 155 fEnergyConstant[index].push_back(11.3044 * eV); 156 fEnergyConstant[index].push_back(11.9986 * eV); 157 fEnergyConstant[index].push_back(13.4528 * eV); 158 fEnergyConstant[index].push_back(14.7371 * eV); 159 fEnergyConstant[index].push_back(16.2286 * eV); 160 fEnergyConstant[index].push_back(16.5877 * eV); 161 fEnergyConstant[index].push_back(17.0741 * eV); 162 fEnergyConstant[index].push_back(17.1875 * eV); 163 fEnergyConstant[index].push_back(18.638 * eV); 164 fEnergyConstant[index].push_back(19.6884 * eV); 165 fnLevels[index] = fEnergyConstant[index].size(); 166 } 167 void G4DNACPA100ExcitationStructure::InitialiseThymine() 168 { 169 // The following values are extracted from the thesis of S. Edel, 170 auto index = fpThymine->GetIndex(); 171 172 fEnergyConstant[index].push_back(9.639 * eV); 173 fEnergyConstant[index].push_back(11.8278 * eV); 174 fEnergyConstant[index].push_back(12.0876 * eV); 175 fEnergyConstant[index].push_back(12.9656 * eV); 176 fEnergyConstant[index].push_back(13.9555 * eV); 177 fEnergyConstant[index].push_back(15.0774 * eV); 178 fEnergyConstant[index].push_back(15.4078 * eV); 179 fEnergyConstant[index].push_back(15.4689 * eV); 180 fEnergyConstant[index].push_back(16.1964 * eV); 181 fEnergyConstant[index].push_back(16.8955 * eV); 182 fEnergyConstant[index].push_back(17.5018 * eV); 183 fEnergyConstant[index].push_back(18.2979 * eV); 184 fEnergyConstant[index].push_back(18.4495 * eV); 185 fEnergyConstant[index].push_back(19.3186 * eV); 186 fnLevels[index] = fEnergyConstant[index].size(); 187 } 188 void G4DNACPA100ExcitationStructure::InitialiseAdenine() 189 { 190 auto index = fpAdenine->GetIndex(); 191 // The following values are extracted from the thesis of S. Edel, 192 193 fEnergyConstant[index].push_back(8.5114 * eV); 194 fEnergyConstant[index].push_back(10.1294 * eV); 195 fEnergyConstant[index].push_back(11.0606 * eV); 196 fEnergyConstant[index].push_back(11.5849 * eV); 197 fEnergyConstant[index].push_back(12.1533 * eV); 198 fEnergyConstant[index].push_back(13.356 * eV); 199 fEnergyConstant[index].push_back(13.6554 * eV); 200 fEnergyConstant[index].push_back(15.3296 * eV); 201 fEnergyConstant[index].push_back(16.179 * eV); 202 fEnergyConstant[index].push_back(16.7676 * eV); 203 fEnergyConstant[index].push_back(17.3489 * eV); 204 fEnergyConstant[index].push_back(17.5568 * eV); 205 fEnergyConstant[index].push_back(18.554 * eV); 206 fEnergyConstant[index].push_back(19.0866 * eV); 207 fnLevels[index] = fEnergyConstant[index].size(); 208 } 209 void G4DNACPA100ExcitationStructure::InitialisePhosphate() 210 { 211 // The following values are extracted from the thesis of S. Edel, 212 auto index = fpPhosphate->GetIndex(); 213 fEnergyConstant[index].push_back(12.9963 * eV); 214 fEnergyConstant[index].push_back(12.9972 * eV); 215 fEnergyConstant[index].push_back(14.3109 * eV); 216 fEnergyConstant[index].push_back(15.2221 * eV); 217 fEnergyConstant[index].push_back(16.0591 * eV); 218 fEnergyConstant[index].push_back(16.0622 * eV); 219 fEnergyConstant[index].push_back(17.6365 * eV); 220 fEnergyConstant[index].push_back(17.6401 * eV); 221 fEnergyConstant[index].push_back(18.8803 * eV); 222 fnLevels[index] = fEnergyConstant[index].size(); 223 } 224 225 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 226 227 G4double G4DNACPA100ExcitationStructure::ExcitationEnergy(const std::size_t& level, 228 const std::size_t& MatID) 229 { 230 G4double ionisation = 0.; 231 232 if (level < fnLevels[MatID]) { 233 ionisation = fEnergyConstant[MatID][level]; 234 } 235 else { 236 std::ostringstream oss; 237 oss << " material was not found. "; 238 G4Exception("G4DNACPA100ExcitationStructure::ExcitationEnergy", "CPA001", FatalException, 239 oss.str().c_str()); 240 } 241 242 return ionisation; 243 } 244 245 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 246 247 G4double G4DNACPA100ExcitationStructure::UEnergy(const std::size_t& level, const std::size_t& MatID) 248 { 249 G4double UEnergy = 0.; 250 if (level < fnLevels[MatID]) { 251 UEnergy = fUConstant[MatID][level]; 252 } 253 else { 254 std::ostringstream oss; 255 oss << " material was not found. "; 256 G4Exception("G4DNACPA100ExcitationStructure::ExcitationEnergy", "CPA001", FatalException, 257 oss.str().c_str()); 258 } 259 260 return UEnergy; 261 } 262