Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4NucleonNuclearCrossSection.cc
Go to the documentation of this file.
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 // author: Vladimir.Grichine@cern.ch
27 //
28 // Implements data from: Barashenkov V.S., Nucleon-Nucleus Cross Section,
29 // Preprint JINR P2-89-770, p. 12, Dubna 1989 (scanned version from KEK)
30 // Based on G. Folger version of G4PiNuclearCrossSection class
31 //
32 // Modified:
33 // 05.03.07 V.Ivanchenko - add IfZAApplicable, remove "debug"
34 // 11.09.09 V.Ivanchenko - fixed bug in interpolation
35 //
36 
38 #include "G4SystemOfUnits.hh"
39 #include "G4DynamicParticle.hh"
40 #include "G4Neutron.hh"
41 #include "G4Proton.hh"
42 
43 // factory
44 #include "G4CrossSectionFactory.hh"
45 //
47 
48 
49 // Group 1: He, Be, C for 44 energies
50 
51 const G4double G4NucleonNuclearCrossSection::e1[44] =
52 {
53  0.014, 0.015, 0.017, 0.02, 0.022, 0.025, 0.027, 0.03, 0.035, 0.04,
54  0.045, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.12, 0.14, 0.15,
55  0.16, 0.18, 0.20, 0.25, 0.30, 0.35, 0.4, 0.5, 0.6, 0.7,
56  0.8, 0.9, 1.0, 1.5, 2.0, 3.0, 5.0, 7.0, 10.0, 20.0,
57  50.0, 100.0, 500.0, 1000.0
58 };
59 
60 const G4double G4NucleonNuclearCrossSection::he_m_t[44] =
61 {
62  1090, 1020, 915, 800, 710, 640, 600, 560, 500, 440, 390, 360, 295, 256, 220, 192,
63  168, 136, 120, 116, 114, 110, 107, 104, 106, 108, 110, 120, 126, 135, 140, 144, 146,
64  148, 152, 150, 146, 142, 138, 132, 129, 126, 127, 128
65 };
66 const G4double G4NucleonNuclearCrossSection::he_m_in[44] =
67 {
68  0, 5, 10, 20, 35, 55, 70, 80, 90, 105, 115, 115, 100, 90, 86, 84, 84, 82, 80, 80, 80, 80,
69  79, 78, 80, 84, 88, 94, 100, 105, 108, 108, 108, 112, 114, 114, 112, 110, 108, 106, 104,
70  101, 102, 102
71 };
72 const G4double G4NucleonNuclearCrossSection::he_p_in[44] =
73 {
74  0, 2, 3, 13, 30, 50, 65, 77, 90, 105, 115, 115, 100, 90, 86, 84, 84, 82, 80, 80, 80, 80,
75  79, 78, 80, 84, 88, 94, 100, 105, 108, 108, 108, 112, 114, 114, 112, 110, 108, 106, 104,
76  101, 102, 102
77 };
78 
79 const G4double G4NucleonNuclearCrossSection::be_m_t[44] =
80 {
81  1490, 1460, 1400, 1350, 1270, 1200, 1160, 1100, 1000, 910, 810, 740, 625, 575, 455, 406,
82  365, 310, 275, 262, 255, 240, 235, 225, 225, 230, 238, 252, 270, 282, 288, 290, 294, 303,
83  303, 300, 292, 284, 277, 267, 263, 264, 268, 268
84 };
85 const G4double G4NucleonNuclearCrossSection::be_m_in[44] =
86 {
87  650, 640, 617, 595, 555, 520, 495, 470, 430, 385, 350, 320, 270, 250, 210, 190, 185, 178,
88  175, 175, 175, 175, 175, 170, 170, 172, 176, 184, 194, 200, 209, 213, 214, 216, 216, 212,
89  210, 210, 210, 210, 210, 210, 210, 210
90 };
91 const G4double G4NucleonNuclearCrossSection::be_p_in[44] =
92 {
93  490, 540, 580, 545, 525, 495, 470, 450, 420, 370, 340, 310, 262, 242, 205, 185, 180, 175,
94  172, 175, 175, 175, 175, 170, 170, 172, 176, 184, 194, 200, 209, 213, 214, 216, 216, 212,
95  210, 210, 210, 210, 210, 210, 210, 210
96 };
97 
98 const G4double G4NucleonNuclearCrossSection::c_m_t[44] =
99 {
100  1240, 1370, 1450, 1455, 1445, 1385, 1345, 1290, 1210, 1110, 1020, 940, 800, 700, 604, 530,
101  475, 396, 350, 336, 320, 303, 294, 280, 280, 286, 296, 314, 330, 344, 356, 360, 364, 384,
102  388, 384, 364, 352, 344, 330, 324, 324, 332, 332
103 };
104 const G4double G4NucleonNuclearCrossSection::c_m_in[44] =
105 {
106  590, 570, 542, 510, 500, 460, 445, 430, 395, 380, 350, 330, 295, 270, 255, 240, 228, 222,
107  216, 216, 210, 210, 210, 208, 210, 214, 216, 228, 240, 248, 254, 257, 260, 262, 260, 256,
108  252, 252, 250, 250, 248, 248, 248, 248
109 };
110 const G4double G4NucleonNuclearCrossSection::c_p_in[44] =
111 {
112  310, 330, 400, 440, 450, 435, 430, 420, 385, 370, 340, 320, 288, 263, 249, 234, 222, 216,
113  210, 211, 205, 208, 210, 208, 210, 214, 216, 228, 240, 248, 254, 257, 260, 262, 260, 256,
114  252, 252, 250, 250, 248, 248, 248, 248
115 };
116 
117 // Group 2: N, O, Na for 44 energies (e1=e2)
118 
119 const G4double G4NucleonNuclearCrossSection::e2[44] =
120 {
121  0.014, 0.015, 0.017, .02, 0.022, 0.025, 0.027, 0.03, 0.035, .04, 0.045, 0.05, .06, 0.07,
122  .08, 0.09, .1, .12, .14, .15, .16, .18, .20, .25, .30, .35, .4 , 0.5, 0.6, 0.7, 0.8,
123  0.9, 1, 1.5, 2, 3, 5, 7, 10,
124  20, 50, 100, 500, 1000
125 };
126 
127 const G4double G4NucleonNuclearCrossSection::n_m_t[44] =
128 {
129  1420,1480, 1537, 1550, 1525, 1500, 1480, 1425, 1340, 1260, 1175, 1090, 930, 805, 690, 612,
130  552, 462, 402, 384, 372, 350, 345, 326, 324, 328, 336, 356, 372, 388, 400, 408, 415, 430,
131  435, 432, 415, 402, 390, 375, 367, 370, 382, 385
132 };
133 const G4double G4NucleonNuclearCrossSection::n_m_in[44] =
134 {
135  680, 665, 625, 580, 562, 525, 510, 485, 450, 435, 410, 387, 340, 310, 290, 280, 276, 274,
136  260, 258, 254, 247, 245, 240, 240, 244, 250, 260, 268, 275, 280, 285, 290, 295, 300, 294,
137  292, 290, 285, 285, 282, 282, 282, 282
138 };
139 const G4double G4NucleonNuclearCrossSection::n_p_in[44] =
140 {
141  420, 440, 470, 490, 497, 500, 480, 462, 440, 425, 400, 377, 333, 303, 284, 274, 270, 268,
142  254, 252, 247, 245, 245, 240, 240, 244, 250, 260, 268, 275, 280, 285, 290, 295, 300, 294,
143  292, 290, 285, 285, 282, 282, 282, 282
144 };
145 
146 const G4double G4NucleonNuclearCrossSection::o_m_t[44] =
147 {
148  1520, 1570, 1630, 1660, 1647, 1623, 1595, 1555, 1475, 1395, 1290, 1207, 1035, 925, 816,
149  720, 645, 540, 462, 438, 415, 392, 378, 362, 361, 381, 390, 403, 417, 440, 460, 470,
150  479, 498, 504, 498, 477, 457, 443, 427, 420, 425, 429, 430
151 };
152 const G4double G4NucleonNuclearCrossSection::o_m_in[44] =
153 {
154  750, 740, 700, 650, 620, 575, 555, 530, 505, 462, 435, 420, 375, 345, 320, 310, 300, 293,
155  288, 282, 282, 280, 276, 270, 271, 275, 280, 290, 295, 304, 310, 315, 318, 332, 335, 330,
156  323, 320, 317, 315, 315, 315, 315, 315
157 };
158 const G4double G4NucleonNuclearCrossSection::o_p_in[44] =
159 {
160  460, 485, 510, 535, 537, 532, 520, 500, 460, 432, 405, 390, 350, 320, 310, 304, 293, 287,
161  283, 279, 279, 278, 276, 270, 271, 275, 280, 290, 295, 304, 310, 315, 318, 332, 335, 330,
162  323, 320, 317, 315, 315, 315, 315, 315
163 };
164 
165 const G4double G4NucleonNuclearCrossSection::na_m_t[44] =
166 {
167  1570, 1620, 1695, 1730, 1750, 1760, 1755, 1740, 1710, 1643, 1560, 1480, 1343, 1220, 1073,
168  953, 860, 720, 618, 582, 546, 522, 504, 484, 492, 500, 512, 538, 560, 586, 608, 622, 632,
169  660, 668, 664, 640, 616, 596, 568, 568, 568, 568, 568
170 };
171 const G4double G4NucleonNuclearCrossSection::na_m_in[44] =
172 {
173  960, 930, 890, 822, 790, 750, 725, 686, 620, 600, 575, 540, 497, 450, 414, 390, 380, 372,
174  354, 360, 355, 354, 350, 350, 350, 356, 364, 384, 392, 400, 408, 410, 420, 408, 412, 420,
175  411, 409, 407, 403, 400, 400, 400, 400
176 };
177 const G4double G4NucleonNuclearCrossSection::na_p_in[44] =
178 {
179  600, 617, 660, 675, 680, 680, 670, 650, 575, 550, 525, 490, 450, 420, 385, 367, 360, 350,
180  350, 350, 345, 347, 350, 350, 350, 356, 364, 384, 392, 400, 408, 410, 420, 408, 412, 420,
181  411, 409, 407, 403, 400, 400, 400, 400
182 };
183 
184 // Al, Si, Ca for 45 energies
185 
186 const G4double G4NucleonNuclearCrossSection::e3[45] =
187 {
188  0.014, 0.015, 0.016, 0.017, .02, 0.022, 0.025, 0.027, 0.03, 0.035, .04, 0.045, 0.05, .06, 0.07,
189  .08, 0.09, .1, .12, .14, .15, .16, .18, .20, .25, .30, .35, 0.4, 0.5, 0.6,
190  0.7, 0.8, 0.9, 1, 1.5, 2, 3, 5, 7, 10, 20, 50, 100, 500, 1000
191 };
192 
193 const G4double G4NucleonNuclearCrossSection::al_m_t[45] =
194 {
195  1735, 1750, 1760, 1795, 1830, 1855, 1885, 1895, 1900, 1870, 1835, 1785, 1710, 1522, 1350,
196  1212, 1080, 972, 816, 720, 678, 642, 600, 567, 558, 560, 578, 592, 616, 644,
197  672, 688, 708, 720, 736, 754, 736, 706, 680, 672, 646, 632, 632, 632, 632
198 };
199 const G4double G4NucleonNuclearCrossSection::al_m_in[45] =
200 {
201  1000, 990, 975, 950, 905, 875, 825, 800, 762, 690, 652, 610, 570, 495, 480,
202  456, 444, 432, 420, 420, 420, 420, 410, 410, 400, 402, 404, 408, 424, 438,
203  448, 450, 454, 456, 472, 480, 466, 456, 452, 448, 444, 440, 440, 440, 440
204 };
205 const G4double G4NucleonNuclearCrossSection::al_p_in[45] =
206 {
207  650, 682, 690, 715, 750, 762, 750, 740, 720, 655, 617, 575, 540, 470, 455,
208  // 532, 420, 408, 400, 403, 403, 408, 406, 404, 400, 402, 404, 408, 424, 438,
209  432, 420, 408, 400, 403, 403, 408, 406, 404, 400, 402, 404, 408, 424, 438,
210  448, 450, 454, 456, 472, 480, 466, 456, 452, 448, 444, 440, 440, 440, 440
211 };
212 
213 const G4double G4NucleonNuclearCrossSection::si_m_t[45] =
214 {
215  1810, 1833, 1850, 1872, 1920, 1950, 1995, 2020, 2035, 2000, 1930, 1850, 1760, 1570, 1400,
216  1255, 1110, 1008, 846, 742, 696, 671, 623, 588, 584, 584, 602, 618, 645, 679,
217  708, 727, 746, 757, 769, 782, 771, 734, 710, 698, 672, 654, 650, 650, 650
218 };
219 const G4double G4NucleonNuclearCrossSection::si_m_in[45] =
220 {
221  1060, 1035, 1015, 990, 935, 900, 860, 830, 790, 725, 665, 630, 600, 520, 504,
222  486, 470, 456, 444, 432, 432, 432, 418, 418, 415, 412, 416, 422, 440, 460,
223  472, 476, 479, 480, 492, 496, 488, 472, 472, 464, 460, 452, 448, 448, 448
224 };
225 const G4double G4NucleonNuclearCrossSection::si_p_in[45] =
226 {
227  670, 700, 725, 750, 780, 780, 770, 757, 735, 690, 635, 585, 570, 490, 475,
228  460, 446, 431, 423, 425, 425, 425, 425, 422, 422, 412, 416, 422, 440, 460,
229  472, 476, 479, 480, 492, 496, 488, 472, 472, 464, 460, 452, 448, 448, 448
230 };
231 
232 const G4double G4NucleonNuclearCrossSection::ca_m_t[45] =
233 {
234  2180, 2130, 2095, 2075, 2115, 2150, 2220, 2250, 2300, 2365, 2360, 2280, 2180, 2000,
235  1805, 1650, 1500, 1340, 1140, 990, 940, 890, 825, 790, 770, 773, 787, 800, 830, 870,
236  905, 930, 950, 965, 990, 1002, 990, 965, 945, 925, 892, 860, 860, 860, 860
237 };
238 const G4double G4NucleonNuclearCrossSection::ca_m_in[45] =
239 {
240  1240, 1225, 1200, 1180, 1125, 1090, 1045, 1020, 980, 925, 880, 825, 770, 680, 640,
241  620, 615, 600, 580, 565, 560, 560, 560, 550, 535, 530, 540, 550, 570, 595, 610, 615,
242  620, 622, 629, 630, 620, 612, 607, 592, 587, 580, 580, 580, 580
243 };
244 const G4double G4NucleonNuclearCrossSection::ca_p_in[45] =
245 {
246  770, 800, 823, 850, 900, 925, 935, 920, 895, 835, 800, 750, 715, 640, 605, 590, 588,
247  573, 555, 543, 540, 540, 540, 535, 530, 530, 540, 550, 570, 595, 610, 615,
248  620, 622, 629, 630, 620, 612, 607, 592, 587, 580, 580, 580, 580
249 };
250 
251 // Fe, Cu, Mo for 47 energies
252 
253 const G4double G4NucleonNuclearCrossSection::e4[47] =
254 {
255  0.014, 0.015, 0.017, .02, 0.022, 0.025, 0.027, 0.03, 0.033, 0.035, 0.037, .04, 0.045,
256  0.05, 0.055, .06, 0.07, .08, 0.09, .1, .12, .14, .15, .16, .18, .20, .25, .30, .35,
257  .4 , 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.5, 2, 3, 5, 7, 10,
258  20, 50, 100, 500, 1000
259 };
260 
261 const G4double G4NucleonNuclearCrossSection::fe_m_t[47] =
262 {
263  2580, 2490, 2370, 2282, 2275, 2285, 2320, 2370, 2432, 2445, 2460, 2485, 2530, 2540,
264  2517, 2480, 2290, 2110, 1940, 1790, 1510, 1290, 1220, 1150, 1070, 1030, 1013, 1020,
265  1030, 1043, 1075, 1110, 1133, 1163, 1185, 1225, 1252, 1260, 1260, 1233, 1207, 1185,
266  1140, 1110, 1110, 1110, 1110
267 };
268 const G4double G4NucleonNuclearCrossSection::fe_m_in[47] =
269 {
270  1440, 1433, 1390, 1325, 1280, 1260, 1215, 1180, 1140, 1110, 1080, 1040, 990, 955, 920,
271  885, 835, 800, 780, 765, 750, 725, 720, 720, 710, 700, 700, 700, 712, 705, 735, 750,
272  765, 775, 780, 795, 810, 813, 810, 784, 757, 743, 735, 720, 720, 720, 720
273 };
274 const G4double G4NucleonNuclearCrossSection::fe_p_in[47] =
275 {
276  900, 960, 1070, 1090, 1115, 1120, 1115, 1080, 1045, 1025, 1000, 960, 900, 885, 865, 790,
277  765, 740, 720, 700, 697, 697, 697, 697, 695, 690, 688, 690, 712, 705, 735, 750,
278  765, 775, 780, 795, 810, 813, 810, 784, 757, 743, 735, 720, 720, 720, 720
279 };
280 
281 const G4double G4NucleonNuclearCrossSection::cu_m_t[47] =
282 {
283  2920, 2800, 2615, 2480, 2455, 2430, 2440, 2460, 2500, 2530, 2560, 2615, 2690, 2720,
284  2700, 2645, 2500, 2320, 2140, 1970, 1670, 1460, 1380, 1285, 1200, 1160, 1140, 1147,
285  1163, 1170, 1200, 1237, 1265, 1285, 1305, 1328, 1375, 1390, 1395, 1370, 1335, 1315,
286  1270, 1230, 1230, 1230, 1230
287 };
288 const G4double G4NucleonNuclearCrossSection::cu_m_in[47] =
289 {
290  1540, 1535, 1500, 1445, 1407, 1380, 1330, 1300, 1285, 1270, 1240, 1190, 1090, 1010,
291  940, 920, 860, 835, 820, 810, 800, 780, 775, 770, 760, 760, 758, 765, 765, 770, 795,
292  810, 825, 830, 840, 848, 870, 870, 868, 840, 825, 810, 803, 795, 795, 795, 795
293 };
294 const G4double G4NucleonNuclearCrossSection::cu_p_in[47] =
295 {
296  935, 1000, 1060, 1190, 1220, 1250, 1240, 1210, 1150, 1130, 1115, 1050, 985, 950, 890,
297  870, 820, 800, 785, 780, 770, 750, 745, 740, 735, 735, 745, 760, 762, 770, 795,
298  810, 825, 830, 840, 848, 870, 870, 868, 840, 825, 810, 803, 795, 795, 795, 795
299 };
300 
301 const G4double G4NucleonNuclearCrossSection::mo_m_t[47] =
302 {
303  4150, 4040, 3800, 3490, 3300, 3060, 2960, 2845, 2785, 2820, 2850, 2980, 3170, 3230,
304  3270, 3280, 3225, 3075, 2895, 2710, 2355, 2060, 1925, 1800, 1630, 1560, 1540, 1550,
305  1570, 1590, 1650, 1685, 1715, 1740, 1760, 1780, 1850, 1880, 1858, 1815, 1790, 1782,
306  1720, 1690, 1690, 1690, 1690
307 };
308 const G4double G4NucleonNuclearCrossSection::mo_m_in[47] =
309 {
310  1790, 1775, 1740, 1680, 1640, 1580, 1550, 1510, 1460, 1440, 1418, 1380, 1330, 1280,
311  1240, 1200, 1155, 1140, 1110, 1110, 1080, 1065, 1050, 1050, 1025, 1020, 1015, 1020,
312  1022, 1026, 1060, 1085, 1100, 1110, 1120, 1127, 1150, 1160, 1140, 1100, 1085, 1080,
313  1070, 1070, 1070, 1070, 1070
314 };
315 const G4double G4NucleonNuclearCrossSection::mo_p_in[47] =
316 {
317  1025, 1080, 1190, 1380, 1440, 1495, 1475, 1420, 1350, 1310, 1300, 1290, 1250, 1200,
318  1170, 1130, 1095, 1060, 1040, 1022, 1020, 1016, 1016, 1016, 1016, 1012, 1005, 1005,
319  1005, 1010, 1060, 1085, 1100, 1110, 1120, 1127, 1150, 1160, 1140, 1100, 1085, 1080,
320  1070, 1070, 1070, 1070, 1070
321 };
322 
323 // Cd, Sn, W for 48 energies
324 
325 const G4double G4NucleonNuclearCrossSection::e5[48] =
326 {
327  0.014, 0.015, 0.017, 0.018, .02, 0.022, 0.025, 0.027, 0.03, 0.033, 0.035, .04,
328  0.045, 0.05, 0.055, .06, .065, 0.07, .08, 0.09, .1, .12, .14, .15, .16, .18,
329  .20, .25, .30, .35, .4 , 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.5, 2, 3, 5, 7, 10, 20,
330  50, 100, 500, 1000
331 };
332 
333 const G4double G4NucleonNuclearCrossSection::cd_m_t[48] =
334 {
335  4420, 4280, 4170, 4070, 3860, 3680, 3420, 3280, 3125, 3060, 3080, 3190, 3350, 3445,
336  3510, 3540, 3560, 3550, 3460, 3300, 3030, 2640, 2340, 2190, 2070, 1950, 1770, 1732,
337  1740, 1760, 1780, 1832, 1885, 1925, 1945, 1960, 1980, 2070, 2080, 2065, 2040, 2022,
338  1980, 1940, 1870, 1870, 1870, 1870
339 };
340 const G4double G4NucleonNuclearCrossSection::cd_m_in[48]=
341 {
342  1920, 1910, 1880, 1860, 1840, 1800, 1760, 1720, 1675, 1630, 1600, 1520, 1465, 1420,
343  1390, 1340, 1310, 1280, 1275, 1235, 1225, 1200, 1170, 1170, 1170, 1165, 1145, 1140,
344  1140, 1135, 1160, 1180, 1220, 1240, 1250, 1260, 1265, 1270, 1275, 1250, 1222, 1222,
345  1220, 1215, 1190, 1190, 1190, 1190
346 };
347 const G4double G4NucleonNuclearCrossSection::cd_p_in[48] =
348 {
349  1020, 1100, 1225, 1290, 1440, 1520, 1575, 1560, 1518, 1460, 1420, 1400, 1365, 1340,
350  1300, 1280, 1260, 1200, 1190, 1160, 1125, 1125, 1125, 1125, 1125, 1125, 1120, 1120,
351  1120, 1118, 1146, 1180, 1220, 1240, 1250, 1260, 1265, 1270, 1275, 1250, 1222, 1222,
352  1220, 1215, 1190, 1190, 1190, 1190
353 };
354 
355 const G4double G4NucleonNuclearCrossSection::sn_m_t[48] =
356 {
357  4420, 4400, 4260, 4150, 3980, 3770, 3530, 3370, 3245, 3180, 3170, 3260, 3400, 3500,
358  3560, 3610, 3650, 3680, 3580, 3390, 3190, 2760, 2430, 2295, 2175, 1990, 1880, 1810,
359  1820, 1840, 1865, 1940, 1985, 2020, 2040, 2060, 2080, 2160, 2185, 2180, 2110, 2105,
360  2080, 2050, 1980, 1980, 1980, 1980
361 };
362 const G4double G4NucleonNuclearCrossSection::sn_m_in[48] =
363 {
364  1945, 1940, 1905, 1890, 1860, 1830, 1780, 1755, 1717, 1680, 1645, 1570, 1500, 1455,
365  1410, 1370, 1340, 1320, 1290, 1285, 1260, 1240, 1235, 1212, 1200, 1200, 1200, 1190,
366  1190, 1200, 1210, 1240, 1270, 1285, 1300, 1300, 1310, 1320, 1320, 1290, 1240, 1240,
367  1240, 1240, 1240, 1240, 1240, 1240
368 };
369 const G4double G4NucleonNuclearCrossSection::sn_p_in[48] =
370 {
371  1020, 1080, 1270, 1335, 1465, 1505, 1610, 1610, 1550, 1535, 1500, 1440, 1407, 1370,
372  1340, 1300, 1285, 1260, 1230, 1215, 1200, 1180, 1170, 1170, 1165, 1165, 1170, 1165,
373  1165, 1183, 1195, 1240, 1270, 1285, 1300, 1300, 1310, 1320, 1320, 1290, 1240, 1240,
374  1240, 1240, 1240, 1240, 1240, 1240
375 };
376 
377 const G4double G4NucleonNuclearCrossSection::w_m_t[48] =
378 {
379  5320, 5430, 5480, 5450, 5330, 5190, 4960, 4790, 4550, 4340, 4200, 4070, 4000, 4030,
380  4125, 4220, 4270, 4390, 4440, 4360, 4200, 3800, 3380, 3200, 3040, 2790, 2660, 2575,
381  2575, 2600, 2640, 2690, 2755, 2790, 2812, 2837, 2850, 2950, 3000, 2970, 2940, 2910,
382  2880, 2820, 2730, 2730, 2730, 2730
383 };
384 const G4double G4NucleonNuclearCrossSection::w_m_in[48] =
385 {
386  2440, 2400, 2370, 2350, 2310, 2270, 2220, 2195, 2150, 2100, 2070, 2010, 1945, 1900,
387  1850, 1820, 1780, 1760, 1730, 1720, 1680, 1680, 1660, 1660, 1650, 1650, 1640, 1640,
388  1612, 1615, 1625, 1640, 1700, 1720, 1730, 1740, 1750, 1780, 1780, 1750, 1740, 1735,
389  1710, 1695, 1680, 1680, 1680, 1680
390 };
391 const G4double G4NucleonNuclearCrossSection::w_p_in[48] =
392 {
393  950, 1020, 1240, 1400, 1560, 1670, 1760, 1830, 1850, 1855, 1870, 1840, 1800, 1770,
394  1740, 1715, 1680, 1670, 1650, 1620, 1610, 1600, 1600, 1600, 1600, 1600, 1600, 1595,
395  1585, 1595, 1615, 1640, 1700, 1720, 1730, 1740, 1750, 1780, 1780, 1750, 1740, 1735,
396  1710, 1695, 1680, 1680, 1680, 1680
397 };
398 
399 // Pb, U for 46 energies
400 
401 const G4double G4NucleonNuclearCrossSection::e6[46] =
402 {
403  0.014, 0.015, 0.017, 0.019, 0.02, 0.022, 0.025, 0.027, 0.03, 0.035,
404  0.04, 0.045, 0.05, 0.055, 0.06, 0.07, 0.08, 0.09, 0.1, 0.12,
405  0.14, 0.15, 0.16, 0.18, 0.20, 0.25, 0.30, 0.35, 0.4 , 0.5,
406  0.6, 0.7, 0.8, 0.9, 1.0, 1.5, 2.0, 3.0, 5.0, 7.0,
407  10.0, 20.0, 50.0, 100.0, 500.0, 1000.0
408 };
409 
410 const G4double G4NucleonNuclearCrossSection::pb_m_t[46] =
411 {
412  5300, 5440, 5720, 5880, 5765, 5745, 5480, 5280, 4970, 4550, 4390, 4300, 4265, 4325,
413  4450, 4540, 4740, 4710, 4600, 4100, 3660, 3480, 3300, 3000, 2890, 2865, 2855, 2850,
414  2865, 2920, 2955, 3000, 3030, 3060, 3105, 3240, 3290, 3270, 3240, 3180, 3090, 3060,
415  2970, 2970, 2970, 2970
416 
417 };
418 const G4double G4NucleonNuclearCrossSection::pb_m_in[46] =
419 {
420  2580, 2550, 2505, 2462, 2460, 2435, 2380, 2355, 2280, 2180, 2170, 2130, 2080, 2035,
421  1980, 1940, 1900, 1870, 1840, 1800, 1800, 1800, 1780, 1760, 1760, 1740, 1730, 1725,
422  1740, 1785, 1815, 1835, 1860, 1890, 1895, 1920, 1920, 1890, 1850, 1835, 1830, 1830,
423  1830, 1830, 1830, 1830
424 };
425 const G4double G4NucleonNuclearCrossSection::pb_p_in[46] =
426 {
427  900, 1060, 1200, 1420, 1515, 1620, 1750, 1800, 1915, 2030, 1960, 1940, 1910, 1860,
428  1840, 1780, 1770, 1760, 1740, 1720, 1725, 1740, 1740, 1730, 1720, 1700, 1710, 1720,
429  1730, 1740, 1815, 1835, 1860, 1890, 1895, 1920, 1920, 1890, 1850, 1835, 1830, 1830,
430  1830, 1830, 1830, 1830
431 };
432 
433 const G4double G4NucleonNuclearCrossSection::u_m_t[46] =
434 {
435  5800, 5940, 6160, 6345, 6360, 6350, 6170, 6020, 5760, 5350, 4990, 4800, 4710, 4690,
436  4760, 5040, 5190, 5200, 5080, 4600, 4120, 3920, 3720, 3420, 3240, 3150, 3160, 3180,
437  3210, 3240, 3280, 3350, 3390, 3435, 3480, 3560, 3585, 3580, 3540, 3500, 3470, 3410,
438  3335, 3335, 3335, 3335
439 };
440 const G4double G4NucleonNuclearCrossSection::u_m_in[46] =
441 {
442  2820, 2770, 2700, 2660, 2645, 2620, 2580, 2550, 2515, 2450, 2390, 2320, 2260, 2225,
443  2200, 2140, 2080, 2060, 2040, 2000, 1980, 1965, 1960, 1930, 1920, 1890, 1905, 1920,
444  1945, 1970, 1985, 2010, 2040, 2070, 2080, 2090, 2095, 2080, 2063, 2060, 2050, 2040,
445  2005, 2005, 2005, 2005
446 };
447 const G4double G4NucleonNuclearCrossSection::u_p_in[46] =
448 {
449  800, 900, 1100, 1300, 1410, 1510, 1680, 1800, 2000, 2200, 2080, 2060, 2035, 2100,
450  2030, 2030, 2000, 1960, 1960, 1960, 1940, 1925, 1920, 1905, 1890, 1860, 1880, 1910,
451  1930, 1945, 1985, 2010, 2040, 2070, 2080, 2090, 2095, 2080, 2063, 2060, 2050, 2040,
452  2005, 2005, 2005, 2005
453 };
454 
455 using namespace std;
456 
457 ///////////////////////////////////////////////////////////////////////////////
458 
460  : G4VCrossSectionDataSet(Default_Name()),
461  fTotalXsc(0.0), fElasticXsc(0.0)
462 {
463  theNeutron = G4Neutron::Neutron();
464  theProton = G4Proton::Proton();
465 
466  // He, Be, C
467 
468  thePimData.push_back(new G4PiData(he_m_t, he_m_in, e1, 44));
469  thePipData.push_back(new G4PiData(he_m_t, he_p_in, e1, 44));
470 
471  thePimData.push_back(new G4PiData(be_m_t, be_m_in, e1, 44));
472  thePipData.push_back(new G4PiData(be_m_t, be_p_in, e1, 44));
473 
474  thePimData.push_back(new G4PiData(c_m_t, c_m_in, e1, 44));
475  thePipData.push_back(new G4PiData(c_m_t, c_p_in, e1, 44));
476 
477  // N, O, Na
478 
479  thePimData.push_back(new G4PiData(n_m_t, n_m_in, e2, 44));
480  thePipData.push_back(new G4PiData(n_m_t, n_p_in, e2, 44));
481 
482  thePimData.push_back(new G4PiData(o_m_t, o_m_in, e2, 44));
483  thePipData.push_back(new G4PiData(o_m_t, o_p_in, e2, 44));
484 
485  thePimData.push_back(new G4PiData(na_m_t, na_m_in, e2, 44));
486  thePipData.push_back(new G4PiData(na_m_t, na_p_in, e2, 44));
487 
488  // Al, Si, Ca
489 
490  thePimData.push_back(new G4PiData(al_m_t, al_m_in, e3, 45));
491  thePipData.push_back(new G4PiData(al_m_t, al_p_in, e3, 45));
492 
493  thePimData.push_back(new G4PiData(si_m_t, si_m_in, e3, 45));
494  thePipData.push_back(new G4PiData(si_m_t, si_p_in, e3, 45));
495 
496  thePimData.push_back(new G4PiData(ca_m_t, ca_m_in, e3, 45));
497  thePipData.push_back(new G4PiData(ca_m_t, ca_p_in, e3, 45));
498 
499  // Fe, Cu, Mo
500 
501  thePimData.push_back(new G4PiData(fe_m_t, fe_m_in, e4, 47));
502  thePipData.push_back(new G4PiData(fe_m_t, fe_p_in, e4, 47));
503 
504  thePimData.push_back(new G4PiData(cu_m_t, cu_m_in, e4, 47));
505  thePipData.push_back(new G4PiData(cu_m_t, cu_p_in, e4, 47));
506 
507  thePimData.push_back(new G4PiData(mo_m_t, mo_m_in, e4, 47));
508  thePipData.push_back(new G4PiData(mo_m_t, mo_p_in, e4, 47));
509 
510  // Cd, Sn, W
511 
512  thePimData.push_back(new G4PiData(cd_m_t, cd_m_in, e5, 48));
513  thePipData.push_back(new G4PiData(cd_m_t, cd_p_in, e5, 48));
514 
515  thePimData.push_back(new G4PiData(sn_m_t, sn_m_in, e5, 48));
516  thePipData.push_back(new G4PiData(sn_m_t, sn_p_in, e5, 48));
517 
518  thePimData.push_back(new G4PiData(w_m_t, w_m_in, e5, 48));
519  thePipData.push_back(new G4PiData(w_m_t, w_p_in, e5, 48));
520 
521  // Pb, U
522 
523  thePimData.push_back(new G4PiData(pb_m_t, pb_m_in, e6, 46));
524  thePipData.push_back(new G4PiData(pb_m_t, pb_p_in, e6, 46));
525 
526  thePimData.push_back(new G4PiData(u_m_t, u_m_in, e6, 46));
527  thePipData.push_back(new G4PiData(u_m_t, u_p_in, e6, 46));
528 
529  theZ.push_back(2); // He
530  theZ.push_back(4); // Be
531  theZ.push_back(6); // C
532  theZ.push_back(7); // N
533  theZ.push_back(8); // O
534  theZ.push_back(11); // Na
535  theZ.push_back(13); // Al
536  theZ.push_back(14); // Si
537  theZ.push_back(20); // Ca
538  theZ.push_back(26); // Fe
539  theZ.push_back(29); // Cu
540  theZ.push_back(42); // Mo
541  theZ.push_back(48); // Cd
542  theZ.push_back(50); // Sn
543  theZ.push_back(74); // W
544  theZ.push_back(82); // Pb
545  theZ.push_back(92); // U
546 
547 }
548 
549 ///////////////////////////////////////////////////////////////////////////////
550 //
551 
553 {
554  std::for_each(thePimData.begin(), thePimData.end(), G4PiData::Delete());
555  std::for_each(thePipData.begin(), thePipData.end(), G4PiData::Delete());
556 }
557 
558 ////////////////////////////////////////////////////////////////////////////
559 //
560 
561 G4bool
563  G4int Z,
564  const G4Material*)
565 {
566  G4bool result = false;
567  if(aParticle->GetDefinition() == theNeutron ) result = true;
568  if(aParticle->GetDefinition() == theProton) result = true;
569  if(Z < 2) result = false;
570  if(aParticle->GetKineticEnergy() > 999.9*GeV) result = false;
571  return result;
572 }
573 
574 ////////////////////////////////////////////////////////////////////////////
575 //
576 
577 G4double
579  G4int Z, const G4Material*)
580 {
581  G4double kineticEnergy = aParticle->GetKineticEnergy();
582 
583  G4double result = 0;
584  // G4cout<<"Z = "<<Z<<G4endl;
585 
586  size_t it = 0;
587  size_t itmax = theZ.size() - 1;
588  for(; it <= itmax; ++it) { if(Z <= theZ[it]) { break; } }
589  if( it > itmax ) { it = itmax; }
590  G4int Z1, Z2;
591  G4double x1, x2, xt1, xt2;
592 
593  std::vector<G4PiData *> * theData = &thePimData;
594  if(aParticle->GetDefinition() == theProton) { theData = &thePipData; }
595 
596  if( theZ[it] == Z )
597  {
598  result = (*theData)[it]->ReactionXSection(kineticEnergy);
599  fTotalXsc = (*theData)[it]->TotalXSection(kineticEnergy);
600  }
601  else
602  {
603  if(0 == it) { it = 1; }
604  x1 = (*theData)[it-1]->ReactionXSection(kineticEnergy);
605  xt1 = (*theData)[it-1]->TotalXSection(kineticEnergy);
606  Z1 = theZ[it-1];
607  x2 = (*theData)[it]->ReactionXSection(kineticEnergy);
608  xt2 = (*theData)[it]->TotalXSection(kineticEnergy);
609  Z2 = theZ[it];
610 
611  result = Interpolate(Z1, Z2, Z, x1, x2);
612  fTotalXsc = Interpolate(Z1, Z2, Z, xt1, xt2);
613  }
614 
615  fElasticXsc = fTotalXsc - result;
616  if( fElasticXsc < 0.) { fElasticXsc = 0.; }
617 
618  return result;
619 }
620 
621 /////////////////////////////////////////////////////////////////////////////
622 //
623 
624 G4double G4NucleonNuclearCrossSection::
625 Interpolate(G4int Z1, G4int Z2, G4int Z, G4double x1, G4double x2)
626 {
627 // Nucleon numbers obtained from G4NistManager G4 8.0
628 
629  static const G4double alpha = 2./3.;
630 
631  static const G4double A[92] =
632  {
633  1.0001, 4.0000, 6.9241, 9.0000, 10.801, 12.011, 14.004, 16.004, 19.000, 20.188,
634  23.000, 24.320, 27.000, 28.109, 31.000, 32.094, 35.484, 39.985, 39.135, 40.116,
635  45.000, 47.918, 50.998, 52.055, 55.000, 55.910, 59.000, 58.760, 63.617, 65.468,
636  69.798, 72.691, 75.000, 79.042, 79.986, 83.887, 85.557, 87.710, 89.000, 91.318,
637  93.000, 96.025, 98.000, 101.16, 103.00, 106.51, 107.96, 112.51, 114.91, 118.81,
638  121.86, 127.70, 127.00, 131.39, 133.00, 137.42, 139.00, 140.21, 141.00, 144.32,
639  145.00, 150.45, 152.04, 157.33, 159.00, 162.57, 165.00, 167.32, 169.00, 173.10,
640  175.03, 178.54, 181.00, 183.89, 186.25, 190.27, 192.25, 195.11, 197.00, 200.63,
641  204.41, 207.24, 209.00, 209.00, 210.00, 222.00, 223.00, 226.00, 227.00, 232.00,
642  231.00, 237.98
643  };
644  static G4ThreadLocal G4bool NeedInit = true;
645 
646  static G4ThreadLocal G4double A75[92];
647 
648  if ( NeedInit )
649  {
650  for (G4int i=0; i<92; ++i)
651  {
652  A75[i] = std::pow(A[i], alpha); // interpolate by square ~ A^(2/3)
653  }
654  NeedInit=false;
655  }
656 
657  // for tabulated data, cross section scales with A^(2/3)
658  G4double r1 = x1 / A75[Z1-1] * A75[Z-1];
659  G4double r2 = x2 / A75[Z2-1] * A75[Z-1];
660  G4double result = 0.5*(r1+r2);
661 
662  // More precise average
663  if(Z1 != Z2) {
664  G4double alp1 = (A[Z-1] - A[Z1-1]);
665  G4double alp2 = (A[Z2-1] - A[Z-1]);
666  result = (r1*alp2 + r2*alp1)/(alp1 + alp2);
667  }
668  // G4cout << "x1/2, z1/2 z" <<x1<<" "<<x2<<" "<<Z1<<" "<<Z2<<" "<<Z<<G4endl;
669  // G4cout << "res1/2 " << r1 <<" " << r2 <<" " << result<< G4endl;
670  return result;
671 }
672 
673 void
675 {
676  outFile << "G4NucleonNuclearCrossSection is a variant of the Barashenkov\n"
677  << "cross section parameterization to be used of protons and\n"
678  << "nucleons on targets heavier than hydrogen. It is intended for\n"
679  << "use as a cross section component and is currently used by\n"
680  << "G4BGGNucleonInelasticXS. It is valid for incident energies up\n"
681  << "to 1 TeV.\n";
682 }
683 
G4double GetKineticEnergy() const
std::ofstream outFile
Definition: GammaRayTel.cc:68
virtual G4bool IsElementApplicable(const G4DynamicParticle *aParticle, G4int Z, const G4Material *mat=0)
virtual G4double GetElementCrossSection(const G4DynamicParticle *aParticle, G4int Z, const G4Material *mat=0)
G4ParticleDefinition * GetDefinition() const
virtual void CrossSectionDescription(std::ostream &) const
#define G4ThreadLocal
Definition: tls.hh:52
int G4int
Definition: G4Types.hh:78
bool G4bool
Definition: G4Types.hh:79
static G4Proton * Proton()
Definition: G4Proton.cc:93
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
double G4double
Definition: G4Types.hh:76
G4_DECLARE_XS_FACTORY(G4NucleonNuclearCrossSection)