Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/dna/utils/src/G4DNACPA100IonisationStructure.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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 "G4DNACPA100IonisationStructure.hh"
 43 
 44 #include "G4Material.hh"
 45 #include "G4SystemOfUnits.hh"
 46 
 47 G4DNACPA100IonisationStructure::G4DNACPA100IonisationStructure()
 48 {
 49   fpGuanine = G4Material::GetMaterial("G4_GUANINE", false);
 50   fpG4_WATER = G4Material::GetMaterial("G4_WATER", false);
 51   fpDeoxyribose = G4Material::GetMaterial("G4_DEOXYRIBOSE", false);
 52   fpCytosine = G4Material::GetMaterial("G4_CYTOSINE", false);
 53   fpThymine = G4Material::GetMaterial("G4_THYMINE", false);
 54   fpAdenine = G4Material::GetMaterial("G4_ADENINE", false);
 55   fpPhosphate = G4Material::GetMaterial("G4_PHOSPHORIC_ACID", false);
 56 
 57   if (fpGuanine != nullptr) {
 58     InitialiseGuanine();
 59   }
 60 
 61   if (fpG4_WATER != nullptr) {
 62     InitialiseWater();
 63   }
 64 
 65   if (fpDeoxyribose != nullptr) {
 66     InitialiseDeoxyribose();
 67   }
 68 
 69   if (fpCytosine != nullptr) {
 70     InitialiseCytosine();
 71   }
 72 
 73   if (fpThymine != nullptr) {
 74     InitialiseThymine();
 75   }
 76 
 77   if (fpAdenine != nullptr) {
 78     InitialiseAdenine();
 79   }
 80 
 81   if (fpPhosphate != nullptr) {
 82     InitialisePhosphate();
 83   }
 84 }
 85 
 86 void G4DNACPA100IonisationStructure::InitialiseGuanine()
 87 {
 88   auto index = fpGuanine->GetIndex();
 89   ///    Guanine has 39 ionization levels
 90 
 91   fEnergyConstant[index].push_back(8.2315 * eV);
 92   fEnergyConstant[index].push_back(11.0928 * eV);
 93   fEnergyConstant[index].push_back(11.5984 * eV);
 94   fEnergyConstant[index].push_back(11.7906 * eV);
 95   fEnergyConstant[index].push_back(11.9382 * eV);
 96   fEnergyConstant[index].push_back(12.4424 * eV);
 97   fEnergyConstant[index].push_back(13.3581 * eV);
 98   fEnergyConstant[index].push_back(15.1381 * eV);
 99   fEnergyConstant[index].push_back(16.4059 * eV);
100   fEnergyConstant[index].push_back(16.496 * eV);
101   fEnergyConstant[index].push_back(16.8457 * eV);
102   fEnergyConstant[index].push_back(17.297 * eV);
103   fEnergyConstant[index].push_back(18.0608 * eV);
104   fEnergyConstant[index].push_back(18.441 * eV);
105   fEnergyConstant[index].push_back(19.2414 * eV);
106   fEnergyConstant[index].push_back(20.0877 * eV);
107   fEnergyConstant[index].push_back(20.3321 * eV);
108   fEnergyConstant[index].push_back(22.0153 * eV);
109   fEnergyConstant[index].push_back(22.9048 * eV);
110   fEnergyConstant[index].push_back(24.2447 * eV);
111   fEnergyConstant[index].push_back(24.692 * eV);
112   fEnergyConstant[index].push_back(28.2049 * eV);
113   fEnergyConstant[index].push_back(32.1299 * eV);
114   fEnergyConstant[index].push_back(33.2774 * eV);
115   fEnergyConstant[index].push_back(33.3958 * eV);
116   fEnergyConstant[index].push_back(36.6377 * eV);
117   fEnergyConstant[index].push_back(37.3483 * eV);
118   fEnergyConstant[index].push_back(38.3743 * eV);
119   fEnergyConstant[index].push_back(305.7284 * eV);
120   fEnergyConstant[index].push_back(307.4187 * eV);
121   fEnergyConstant[index].push_back(307.8468 * eV);
122   fEnergyConstant[index].push_back(308.9415 * eV);
123   fEnergyConstant[index].push_back(309.8057 * eV);
124   fEnergyConstant[index].push_back(423.1456 * eV);
125   fEnergyConstant[index].push_back(423.2615 * eV);
126   fEnergyConstant[index].push_back(424.5211 * eV);
127   fEnergyConstant[index].push_back(425.006 * eV);
128   fEnergyConstant[index].push_back(425.0315 * eV);
129   fEnergyConstant[index].push_back(558.2487 * eV);
130   fnLevels[index] = fEnergyConstant[index].size();
131 }
132 
133 void G4DNACPA100IonisationStructure::InitialiseWater()
134 {
135   auto index = fpG4_WATER->GetIndex();
136   // The following values are extracted from the thesis of S. Edel,
137   // Paul Sabatier University, Toulouse, France, July 7, 2006
138   // Page 36
139   fEnergyConstant[index].push_back(10.79 * eV);
140   fEnergyConstant[index].push_back(13.39 * eV);
141   fEnergyConstant[index].push_back(16.05 * eV);
142   fEnergyConstant[index].push_back(32.30 * eV);
143   fEnergyConstant[index].push_back(539.0 * eV);
144 
145   fUConstant[index].push_back(61.91 * eV);
146   fUConstant[index].push_back(59.52 * eV);
147   fUConstant[index].push_back(48.36 * eV);
148   fUConstant[index].push_back(70.71 * eV);
149   fUConstant[index].push_back(796.2 * eV);
150   fnLevels[index] = fEnergyConstant[index].size();
151 }
152 
153 void G4DNACPA100IonisationStructure::InitialiseDeoxyribose()
154 {
155   auto index = fpDeoxyribose->GetIndex();
156   fEnergyConstant[index].push_back(11.241 * eV);
157   fEnergyConstant[index].push_back(11.7927 * eV);
158   fEnergyConstant[index].push_back(12.6579 * eV);
159   fEnergyConstant[index].push_back(12.8163 * eV);
160   fEnergyConstant[index].push_back(13.3238 * eV);
161   fEnergyConstant[index].push_back(13.9487 * eV);
162   fEnergyConstant[index].push_back(14.4374 * eV);
163   fEnergyConstant[index].push_back(14.7433 * eV);
164   fEnergyConstant[index].push_back(15.0818 * eV);
165   fEnergyConstant[index].push_back(15.6112 * eV);
166   fEnergyConstant[index].push_back(16.0547 * eV);
167   fEnergyConstant[index].push_back(16.8319 * eV);
168   fEnergyConstant[index].push_back(17.4294 * eV);
169   fEnergyConstant[index].push_back(18.0 * eV);
170   fEnergyConstant[index].push_back(18.2696 * eV);
171   fEnergyConstant[index].push_back(18.6049 * eV);
172   fEnergyConstant[index].push_back(19.8378 * eV);
173   fEnergyConstant[index].push_back(20.5787 * eV);
174   fEnergyConstant[index].push_back(22.0146 * eV);
175   fEnergyConstant[index].push_back(22.9176 * eV);
176   fEnergyConstant[index].push_back(24.9005 * eV);
177   fEnergyConstant[index].push_back(28.0268 * eV);
178   fEnergyConstant[index].push_back(28.7417 * eV);
179   fEnergyConstant[index].push_back(36.9571 * eV);
180   fEnergyConstant[index].push_back(37.1881 * eV);
181   fEnergyConstant[index].push_back(37.5798 * eV);
182   fEnergyConstant[index].push_back(39.2622 * eV);
183   fEnergyConstant[index].push_back(305.446 * eV);
184   fEnergyConstant[index].push_back(306.6421 * eV);
185   fEnergyConstant[index].push_back(306.8925 * eV);
186   fEnergyConstant[index].push_back(307.0377 * eV);
187   fEnergyConstant[index].push_back(308.5849 * eV);
188   fEnergyConstant[index].push_back(559.0236 * eV);
189   fEnergyConstant[index].push_back(559.3832 * eV);
190   fEnergyConstant[index].push_back(559.6416 * eV);
191   fEnergyConstant[index].push_back(559.7734 * eV);
192 
193   fnLevels[index] = fEnergyConstant[index].size();
194 }
195 
196 void G4DNACPA100IonisationStructure::InitialiseCytosine()
197 {
198   auto index = fpCytosine->GetIndex();
199   ///    Cytosine has 29 ionization levels
200   fEnergyConstant[index].push_back(9.3222 * eV);
201   fEnergyConstant[index].push_back(10.4601 * eV);
202   fEnergyConstant[index].push_back(11.3044 * eV);
203   fEnergyConstant[index].push_back(11.9986 * eV);
204   fEnergyConstant[index].push_back(13.4528 * eV);
205   fEnergyConstant[index].push_back(14.7371 * eV);
206   fEnergyConstant[index].push_back(16.2286 * eV);
207   fEnergyConstant[index].push_back(16.5877 * eV);
208   fEnergyConstant[index].push_back(17.0741 * eV);
209   fEnergyConstant[index].push_back(17.1875 * eV);
210   fEnergyConstant[index].push_back(18.638 * eV);
211   fEnergyConstant[index].push_back(19.6884 * eV);
212   fEnergyConstant[index].push_back(20.8713 * eV);
213   fEnergyConstant[index].push_back(20.9056 * eV);
214   fEnergyConstant[index].push_back(24.0179 * eV);
215   fEnergyConstant[index].push_back(24.5543 * eV);
216   fEnergyConstant[index].push_back(29.0576 * eV);
217   fEnergyConstant[index].push_back(32.0504 * eV);
218   fEnergyConstant[index].push_back(34.5499 * eV);
219   fEnergyConstant[index].push_back(35.5664 * eV);
220   fEnergyConstant[index].push_back(38.0707 * eV);
221   fEnergyConstant[index].push_back(305.7622 * eV);
222   fEnergyConstant[index].push_back(307.9891 * eV);
223   fEnergyConstant[index].push_back(308.674 * eV);
224   fEnergyConstant[index].push_back(309.0146 * eV);
225   fEnergyConstant[index].push_back(422.5331 * eV);
226   fEnergyConstant[index].push_back(424.1245 * eV);
227   fEnergyConstant[index].push_back(424.7781 * eV);
228   fEnergyConstant[index].push_back(557.6346 * eV);
229   fnLevels[index] = fEnergyConstant[index].size();
230 }
231 
232 void G4DNACPA100IonisationStructure::InitialiseThymine()
233 {
234   // The following values are extracted from the thesis of S. Edel,
235   auto index = fpThymine->GetIndex();
236 
237   ///    THYMINE has 33 ionization levels
238 
239   fEnergyConstant[index].push_back(9.639 * eV);
240   fEnergyConstant[index].push_back(11.8278 * eV);
241   fEnergyConstant[index].push_back(12.0876 * eV);
242   fEnergyConstant[index].push_back(12.9656 * eV);
243   fEnergyConstant[index].push_back(13.9555 * eV);
244   fEnergyConstant[index].push_back(15.0774 * eV);
245   fEnergyConstant[index].push_back(15.4078 * eV);
246   fEnergyConstant[index].push_back(15.4689 * eV);
247   fEnergyConstant[index].push_back(16.1964 * eV);
248   fEnergyConstant[index].push_back(16.8955 * eV);
249   fEnergyConstant[index].push_back(17.5018 * eV);
250   fEnergyConstant[index].push_back(18.2979 * eV);
251   fEnergyConstant[index].push_back(18.4495 * eV);
252   fEnergyConstant[index].push_back(19.3186 * eV);
253   fEnergyConstant[index].push_back(20.9944 * eV);
254   fEnergyConstant[index].push_back(21.0797 * eV);
255   fEnergyConstant[index].push_back(24.3676 * eV);
256   fEnergyConstant[index].push_back(24.9072 * eV);
257   fEnergyConstant[index].push_back(26.3981 * eV);
258   fEnergyConstant[index].push_back(30.1684 * eV);
259   fEnergyConstant[index].push_back(33.9007 * eV);
260   fEnergyConstant[index].push_back(35.6553 * eV);
261   fEnergyConstant[index].push_back(38.4935 * eV);
262   fEnergyConstant[index].push_back(39.3191 * eV);
263   fEnergyConstant[index].push_back(305.6808 * eV);
264   fEnergyConstant[index].push_back(306.1885 * eV);
265   fEnergyConstant[index].push_back(307.9374 * eV);
266   fEnergyConstant[index].push_back(309.3127 * eV);
267   fEnergyConstant[index].push_back(310.2121 * eV);
268   fEnergyConstant[index].push_back(424.8945 * eV);
269   fEnergyConstant[index].push_back(425.2178 * eV);
270   fEnergyConstant[index].push_back(558.7154 * eV);
271   fEnergyConstant[index].push_back(558.8106 * eV);
272   fnLevels[index] = fEnergyConstant[index].size();
273 }
274 
275 void G4DNACPA100IonisationStructure::InitialiseAdenine()
276 {
277   auto index = fpAdenine->GetIndex();
278   ///    Adenine has 35 ionization levels
279 
280   fEnergyConstant[index].push_back(8.5114 * eV);
281   fEnergyConstant[index].push_back(10.1294 * eV);
282   fEnergyConstant[index].push_back(11.0606 * eV);
283   fEnergyConstant[index].push_back(11.5849 * eV);
284   fEnergyConstant[index].push_back(12.1533 * eV);
285   fEnergyConstant[index].push_back(13.356 * eV);
286   fEnergyConstant[index].push_back(13.6554 * eV);
287   fEnergyConstant[index].push_back(15.3296 * eV);
288   fEnergyConstant[index].push_back(16.179 * eV);
289   fEnergyConstant[index].push_back(16.7676 * eV);
290   fEnergyConstant[index].push_back(17.3489 * eV);
291   fEnergyConstant[index].push_back(17.5568 * eV);
292   fEnergyConstant[index].push_back(18.554 * eV);
293   fEnergyConstant[index].push_back(19.0866 * eV);
294   fEnergyConstant[index].push_back(20.2559 * eV);
295   fEnergyConstant[index].push_back(21.4027 * eV);
296   fEnergyConstant[index].push_back(23.0384 * eV);
297   fEnergyConstant[index].push_back(23.9742 * eV);
298   fEnergyConstant[index].push_back(24.479 * eV);
299   fEnergyConstant[index].push_back(28.3224 * eV);
300   fEnergyConstant[index].push_back(31.4796 * eV);
301   fEnergyConstant[index].push_back(32.4597 * eV);
302   fEnergyConstant[index].push_back(34.1263 * eV);
303   fEnergyConstant[index].push_back(35.6423 * eV);
304   fEnergyConstant[index].push_back(37.5026 * eV);
305   fEnergyConstant[index].push_back(305.9305 * eV);
306   fEnergyConstant[index].push_back(307.4532 * eV);
307   fEnergyConstant[index].push_back(307.6866 * eV);
308   fEnergyConstant[index].push_back(307.8303 * eV);
309   fEnergyConstant[index].push_back(308.2887 * eV);
310   fEnergyConstant[index].push_back(422.8443 * eV);
311   fEnergyConstant[index].push_back(423.0296 * eV);
312   fEnergyConstant[index].push_back(423.3954 * eV);
313   fEnergyConstant[index].push_back(423.8101 * eV);
314   fEnergyConstant[index].push_back(425.0749 * eV);
315   fnLevels[index] = fEnergyConstant[index].size();
316 }
317 
318 void G4DNACPA100IonisationStructure::InitialisePhosphate()
319 {
320   auto index = fpPhosphate->GetIndex();
321   ///    Phosphate has 25 ionization levels
322 
323   fEnergyConstant[index].push_back(12.9963 * eV);
324   fEnergyConstant[index].push_back(12.9972 * eV);
325   fEnergyConstant[index].push_back(14.3109 * eV);
326   fEnergyConstant[index].push_back(15.2221 * eV);
327   fEnergyConstant[index].push_back(16.0591 * eV);
328   fEnergyConstant[index].push_back(16.0622 * eV);
329   fEnergyConstant[index].push_back(17.6365 * eV);
330   fEnergyConstant[index].push_back(17.6401 * eV);
331   fEnergyConstant[index].push_back(18.8803 * eV);
332   fEnergyConstant[index].push_back(20.6975 * eV);
333   fEnergyConstant[index].push_back(20.7054 * eV);
334   fEnergyConstant[index].push_back(24.2764 * eV);
335   fEnergyConstant[index].push_back(35.6676 * eV);
336   fEnergyConstant[index].push_back(38.1681 * eV);
337   fEnergyConstant[index].push_back(38.1685 * eV);
338   fEnergyConstant[index].push_back(40.1946 * eV);
339   fEnergyConstant[index].push_back(150.138 * eV);
340   fEnergyConstant[index].push_back(150.1381 * eV);
341   fEnergyConstant[index].push_back(150.1414 * eV);
342   fEnergyConstant[index].push_back(207.3392 * eV);
343   fEnergyConstant[index].push_back(558.1119 * eV);
344   fEnergyConstant[index].push_back(560.5803 * eV);
345   fEnergyConstant[index].push_back(560.5808 * eV);
346   fEnergyConstant[index].push_back(560.5817 * eV);
347   fEnergyConstant[index].push_back(2179.592 * eV);
348   fnLevels[index] = fEnergyConstant[index].size();
349 }
350 
351 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
352 
353 G4double G4DNACPA100IonisationStructure::IonisationEnergy(const std::size_t& level,
354                                                           const std::size_t& MatID)
355 {
356   G4double ionisation = 0.;
357 
358   if (level < fnLevels[MatID]) {
359     ionisation = fEnergyConstant[MatID][level];
360   }
361   else {
362     std::ostringstream oss;
363     oss << " material was not found. ";
364     G4Exception("G4DNACPA100IonisationStructure::IonisationEnergy", "CPA013", FatalException,
365                 oss.str().c_str());
366   }
367 
368   return ionisation;
369 }
370 
371 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
372 
373 G4double G4DNACPA100IonisationStructure::UEnergy(const std::size_t& level, const std::size_t& MatID)
374 {
375   G4double UEnergy = 0.;
376   if (level < fnLevels[MatID]) {
377     UEnergy = fUConstant[MatID][level];
378   }
379   else {
380     std::ostringstream oss;
381     oss << " material was not found. ";
382     G4Exception("G4DNACPA100IonisationStructure::IonisationEnergy", "CPA001", FatalException,
383                 oss.str().c_str());
384   }
385 
386   return UEnergy;
387 }
388