Geant4  10.01.p03
G4PiNuclearCrossSection.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 
28 #include "G4SystemOfUnits.hh"
29 #include "G4DynamicParticle.hh"
30 #include "G4HadronicException.hh"
31 #include "G4HadTmpUtil.hh"
32 
33 // factory
34 #include "G4CrossSectionFactory.hh"
35 //
37 
38 
39 // by J.P Wellisch, Sun Sep 15 2002.
40 // corrected G.Folger 17-8-2006: inel. Ca pim was missing two number,
41 // + formatting
42 //
43 // updated G.Folger 21-8-2006: Change scaling of cross section for
44 // elements not tabulated from scaling in Z^(2/3) to A^0.75
45 // Implements P2-90-158;
46 //
47 // 22 Dec 2006 - D.H. Wright added isotope dependence
48 //
49 // 19 Aug 2011, V.Ivanchenko move to new design and make x-section per element
50 
52  .02, .04, .06, .08, .1, .12, .13, .14, .15, .16, .17, .18, .19, .20,
53  .22, .24, .26, .28, .30, .35, .40, .45, 0.5, 0.55, 0.6, 0.7, 0.8, 0.9,
54  1, 2, 3, 5, 10, 20, 50, 100, 500, 100000};
55 
57  40, 70, 108, 152, 208, 276, 300, 320, 329, 333, 332, 328, 322, 310, 288,
58  260, 240, 216, 196, 144, 125, 112,108.5, 109, 110.5, 117, 123,128.5, 135,
59  110, 96, 87, 85, 83.5, 83.5, 83.5, 83.5, 83.5};
60 
62  18, 38, 62, 98, 136, 176, 190, 200, 209, 212, 212, 208, 204, 196,
63  176, 164, 150, 134, 124,97.5, 90, 85, 82.5, 83.5, 86.5, 93, 97.5, 100,
64  102, 83, 77, 75, 74, 72.5, 72.5, 72.5, 72.5, 72.5};
65 
67  150, 210, 294, 396, 520, 600, 623, 635, 642, 640, 630, 615, 600, 576, 540,
68  504, 470, 435, 400, 340, 294, 258, 236, 230, 233, 244, 257, 270, 276, 250,
69  230, 215, 205, 194, 188, 186, 186, 186};
70 
72  90, 126, 177, 240, 320, 380, 400, 410, 414, 410, 400, 387, 371, 360, 333,
73  312, 285, 260, 237, 216, 198, 187, 182, 180, 182, 187, 193, 203, 207, 179,
74  172, 165, 159, 155, 144, 144, 144, 144};
75 
77  96, 150, 222, 320, 430, 514, 545, 565, 574, 574, 564, 552, 535, 522, 490,
78  462, 432, 398, 367, 314, 276, 248, 232, 230};
79 
81  60, 95, 142, 194, 262, 319, 345, 361, 364, 364, 354, 350, 330, 319, 298,
82  280, 258, 237, 216, 200, 189, 183, 182, 180};
83 
85  .02, .04, .06, .08, .10, .11, .12, .13, .14, .15, .16, .17, .18, .20, .22,
86  .24, .26, .28, .30, .35, .40, .45, .50, .55, .575, .60, .70, .80, .90, 1,
87  2, 3, 5, 10, 20, 50, 100, 500, 100000};
88 
90  204, 260, 366, 517, 630, 673, 694, 704, 710, 711, 706, 694, 676, 648, 616,
91  584, 548, 518, 489, 426, 376, 342, 323, 310, 312, 313, 319, 333, 342, 348,
92  310, 290, 268, 250, 245, 237, 234, 234, 234};
93 
95  128, 160, 224, 315, 388, 416, 430, 438, 444, 445, 440, 432, 416, 400, 380,
96  354, 320, 304, 288, 264, 246, 240, 233, 232, 233, 234, 238, 246, 252, 256,
97  220, 210, 198, 187, 183, 176, 174, 174, 174};
98 
100  140, 192, 294, 428, 594, 642, 662, 687, 685, 688, 684, 672, 656, 630, 598,
101  567, 533, 504, 474, 416, 369, 336, 319, 310};
102 
104  94, 132, 184, 260, 370, 398, 408, 420, 426, 428, 424, 416, 400, 386, 366,
105  340, 308, 294, 280, 257, 241, 236, 231, 232};
106 
108  246, 308, 424, 590, 729, 776, 800, 821, 822, 817, 800, 778, 768, 728, 690,
109  654, 615, 584, 556, 480, 430, 393, 373, 367, 368, 370, 375, 388, 390, 397,
110  364, 337, 310, 291, 275, 268, 268, 268, 268};
111 
113  155, 188, 256, 360, 456, 492, 512, 526, 526, 520, 504, 491, 475, 450, 425,
114  396, 376, 360, 340, 300, 282, 270, 265, 265, 266, 268, 273, 280, 288, 288,
115  256, 237, 226, 218, 208, 202, 202, 202, 202};
116 
118  150, 212, 328, 500, 680, 735, 762, 781, 782, 779, 770, 748, 740, 706, 672,
119  633, 600, 569, 541, 467, 419, 385, 368, 364, 366, 368, 375};
120 
122  90, 140, 208, 300, 426, 467, 490, 504, 504, 500, 484, 474, 460, 437, 413,
123  381, 365, 350, 330, 292, 276, 267, 263, 264, 265, 267, 273};
124 
126  .02, .04, .06, .08, .10, .12, .14, .16, .18, .20, .22, .25, .30, .35, .40,
127  .45, .50, .60, .70, .80, .90, 1, 2, 3, 5, 10, 20, 50, 100, 500,
128  100000};
129 
131  280, 360, 500, 685, 812, 861, 870, 865, 835, 800, 755, 700, 600, 537, 493,
132  468, 441, 436, 443, 449, 460, 463, 432, 385, 350, 325, 312, 307, 303, 303,
133  303};
134 
136  190, 207, 300, 420, 500, 540, 550, 542, 520, 490, 460, 423, 360, 339, 321,
137  314, 312, 314, 319, 324, 328, 330, 300, 275, 250, 240, 229, 225, 222, 222,
138  222};
139 
141  170, 240, 390, 570, 740, 818, 830, 822, 800, 765, 725, 675, 585, 525, 483,
142  458, 444, 447, 453, 449};
143 
145  100, 145, 240, 340, 470, 518, 530, 522, 505, 477, 448, 412, 350, 330, 316,
146  310, 308, 311, 317, 324};
147 
149  450, 545, 705, 910, 1020, 1075, 1087, 1080, 1042, 987, 943, 885, 790, 700,
150  650, 610, 585, 575, 585, 595, 600, 610, 556, 524, 494, 458, 445, 429,
151  427, 427, 427};
152 
154  275, 315, 413, 545, 620, 660, 670, 662, 630, 593, 570, 520, 465, 420, 410,
155  395, 390, 400, 410, 418, 420, 422, 372, 348, 330, 320, 310, 294, 292, 292,
156  292};
157 
159  210, 320, 530, 795, 960, 1035, 1050, 1040, 1007, 957, 918, 865, 773, 685,
160  636, 598, 575, 565, 578, 590, 598, 610};
161 
163  115, 210, 340, 495, 585, 630, 645, 637, 605, 572, 550, 505, 455, 410, 401,
164  388, 383, 393, 405, 414, 418, 422};
165 
167  0.02, 0.04, 0.06, 0.08, 0.10, 0.12, 0.14, 0.16, 0.18, 0.20,
168  0.22, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.60, 0.70, 0.80,
169  0.90, 1.0, 2.0, 3.0, 5.0, 10.0, 20.0, 50.0, 100.0, 500.0, 100000.0};
170 
172  532, 637, 832, 1057, 1207, 1230, 1210, 1174, 1133, 1095,
173  1038, 970, 890, 807, 750, 710, 675, 665, 670, 673,
174  678, 682, 618, 574, 546, 520, 507, 495, 488, 488, 488};
175 
177  300, 360, 495, 665, 750, 765, 750, 730, 700, 660, 615, 570, 520, 490, 470,
178  450, 448, 450, 450, 452, 456, 460, 408, 392, 376, 356, 347, 338, 332, 332,
179  332};
180 
182  225, 350, 616, 945, 1122, 1175, 1157, 1128, 1088, 1045,
183  988, 935, 870, 787, 730, 690, 660, 652, 660, 668, 678};
184 
186  120, 238, 390, 610, 712, 735, 720, 703, 655, 635, 590, 550, 505, 475, 455,
187  438, 440, 445, 445, 450, 456};
188 
190  800, 980, 1240, 1460, 1570, 1600, 1580, 1535, 1475, 1425,
191  1375, 1295, 1200, 1083, 1000, 948, 915, 895, 900, 908,
192  915, 922, 856, 795, 740, 705, 682, 660, 660, 660, 660};
193 
195  470, 550, 620, 860, 955, 980, 960, 920, 860, 820, 780, 740, 665, 637, 615,
196  600, 590, 590, 600, 608, 610, 615, 550, 525, 510, 488, 470, 450, 450, 450,
197  450};
198 
200  275, 445, 790, 1195, 1440, 1485, 1475, 1435, 1385, 1335, 1295, 1245, 1160, 1050, 970,
201  923, 895, 877, 887, 897, 904, 913, 855};
202 
204  160, 315, 500, 745, 870, 905, 900, 860, 810, 770, 740, 710, 640, 617, 595,
205  585, 575, 575, 590, 600, 602, 608, 510};
206  // last number is 500 in org, changed to make things smooth.
207 
209  0.02, 0.04, 0.06, 0.08, 0.10, 0.12, 0.14, 0.16, 0.18, 0.20, 0.22, 0.25, 0.30, 0.35, 0.40,
210  0.45, 0.50, 0.55, 0.60, 0.70, 0.80, 0.90, 1, 2, 3, 5, 10, 20, 50, 100,
211  500, 100000};
212 
214  1175, 1363, 1670, 1950, 2050, 2040, 1975, 1886, 1834, 1773, 1720, 1635,
215  1474, 1380, 1269, 1225, 1182, 1162, 1159, 1162, 1178, 1190, 1197, 1102,
216  1135, 975, 945, 925, 905, 905, 905, 905};
217 
219  625, 725, 910, 1180, 1275, 1250, 1200, 1150, 1100, 1040, 995, 925,
220  825, 810, 780, 760, 745, 740, 740, 740, 750, 760, 765, 690,
221  660, 635, 615, 600, 585, 585, 585, 585};
222 
224  330, 575, 1010, 1500, 1837, 1875, 1820, 1751, 1691, 1636, 1690, 1450,
225  1396, 1305, 1219, 1190, 1148, 1138, 1134, 1144, 1163, 1175, 1183, 1198,
226  1135};
227 
229  210, 410, 707, 1010, 1125, 1150, 1100, 1070, 1010, 960, 920, 776,
230  780, 760, 750, 740, 720, 725, 725, 730, 740, 750, 755, 690,
231  660};
232 
234  1400, 1600, 1875, 2088, 2200, 2220, 2175, 2125, 2075, 2012, 1950, 1855,
235  1670, 1530, 1430, 1370, 1315, 1315, 1315, 1330, 1345, 1360, 1365, 1250,
236  1185, 1128, 1070, 1035, 1010, 1010, 1010, 1010};
237 
239  725, 840, 1020, 1200, 1295, 1300, 1267, 1240, 1213, 1175, 1125, 1042,
240  950, 900, 860, 840, 830, 832, 835, 840, 850, 860, 865, 785,
241  735, 705, 680, 650, 630, 630, 630, 630};
242 
244  355, 605, 1120, 1630, 1940, 2010, 2010, 1980, 1925, 1895, 1830, 1730,
245  1585, 1490, 1400, 1340, 1290, 1290, 1290, 1310, 1330, 1345, 1350, 1240,
246  1185};
247 
249  230, 425, 780, 1025, 1155, 1190, 1190, 1180, 1125, 1100, 1050, 1000,
250  900, 870, 835, 815, 810, 812, 815, 825, 840, 850, 855, 780,
251  735};
252 
254  0.02, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.12, 0.14, 0.16, 0.18, 0.20, 0.22, 0.25,
255  0.30, 0.35, 0.40, 0.45, 0.50, 0.60, 0.70, 0.80, 0.90, 1, 2, 3, 5, 10, 20,
256  50, 100, 500, 100000};
257 
259  2430, 2610, 2710, 2790, 2880, 2940, 2965, 2970, 2970, 2920, 2840, 2720,
260  2570, 2500, 2365, 2200, 2050, 1926, 1825, 1768, 1749, 1750, 1778, 1789,
261  1808, 1690, 1645, 1530, 1492, 1450, 1425, 1425, 1425, 1425};
262 
264  925, 1125, 1250, 1375, 1500, 1600, 1680, 1750, 1770, 1730, 1660, 1580,
265  1500, 1450, 1330, 1250, 1190, 1140, 1100, 1075, 1075, 1070, 1088, 1095,
266  1110, 1035, 1005, 940, 917, 880, 860, 860, 860, 860};
267 
269  410, 730, 1110, 1530, 1920, 2200, 2385, 2520, 2600, 2630, 2575, 2470,
270  2320, 2285, 2185, 2053, 1945, 1852, 1776, 1719, 1710, 1716, 1746, 1759,
271  1778, 1675, 1645};
272 
274  270, 540, 825, 975, 1140, 1285, 1400, 1480, 1555, 1580, 1525, 1470,
275  1360, 1340, 1255, 1160, 1120, 1085, 1060, 1045, 1045, 1045, 1065, 1075,
276  1090, 1025, 1005};
277 
279  3060, 3125, 3170, 3220, 3255, 3280, 3290, 3260, 3270, 3200, 3120, 3080,
280  3090, 2920, 2810, 2640, 2362, 2230, 2115, 2050, 2020, 2025, 2040, 2070,
281  2100, 1900, 1795, 1740, 1675, 1645, 1625, 1620, 1620, 1620};
282 
284  1025, 1275, 1440, 1625, 1740, 1800, 1880, 1920, 1980, 1920, 1850, 1810,
285  1720, 1650, 1560, 1450, 1330, 1290, 1245, 1210, 1200, 1200, 1205, 1205,
286  1230, 1130, 1085, 1060, 1000, 985, 975, 970, 970, 970};
287 
289  455, 780, 1170, 1700, 2120, 2400, 2600, 2720, 2820, 2840, 2800, 2760,
290  2720, 2640, 2560, 2450, 2252, 2130, 2035, 1985, 1970, 1975, 2005, 2035,
291  2070, 1880, 1795, 1740};
292 
294  310, 580, 880, 1060, 1270, 1400, 1530, 1610, 1660, 1680, 1640, 1600,
295  1560, 1500, 1430, 1330, 1280, 1230, 1200, 1180, 1170, 1175, 1180, 1180,
296  1210, 1120, 1085, 1060};
297 
299  0.02, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.12, 0.14, 0.16, 0.18,
300  0.20, 0.22, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60, 0.70, 0.80,
301  0.90, 1.0, 2.0, 3.0, 5.0, 10.0, 20.0, 50.0, 100.0, 500.0, 100000.0};
302 
304  3000, 3180, 3250, 3300, 3300, 3410, 3470, 3450, 3410, 3350, 3280, 3200,
305  3120, 3050, 2900, 2630, 2500, 2325, 2190, 2100, 2060, 2055, 2055, 2055,
306  2067, 2085, 2000, 1900, 1835, 1770, 1720, 1700, 1695, 1695, 1695};
307 
309  1050, 1350, 1520, 1650, 1800, 1980, 2070, 2120, 2090, 2050, 1980, 1920,
310  1830, 1770, 1670, 1500, 1435, 1350, 1300, 1230, 1220, 1235, 1235, 1235,
311  1237, 1240, 1160, 1120, 1090, 1065, 1040, 1020, 1015, 1015, 1015};
312 
314  465, 800, 1200, 1760, 2170, 2480, 2730, 2885, 2970, 2980, 2970, 2890,
315  2840, 2790, 2620, 2450, 2335, 2205, 2080, 2020, 2010, 1990, 1990, 2015,
316  2030, 2045, 1980, 1890, 1835};
317 
319  315, 590, 880, 1220, 1460, 1580, 1700, 1770, 1810, 1810, 1800, 1730,
320  1680, 1630, 1530, 1400, 1335, 1270, 1210, 1180, 1190, 1190, 1190, 1205,
321  1210, 1210, 1150, 1115, 1090};
322 
324  5200, 5115, 5025, 4975, 4900, 4850, 4780, 4725, 4600, 4490, 4355, 4255,
325  4125, 4040, 3830, 3580, 3330, 3110, 2955, 2860, 2852, 2845, 2885, 2900,
326  2915, 2940, 2800, 2660, 2570, 2490, 2460, 2425, 2420, 2420, 2420};
327 
329  1450, 1850, 2100, 2350, 2550, 2700, 2825, 2900, 2850, 2750, 2630, 2525,
330  2400, 2300, 2200, 2070, 1880, 1770, 1715, 1680, 1680, 1680, 1685, 1690,
331  1700, 1720, 1635, 1560, 1530, 1460, 1440, 1410, 1410, 1410, 1410};
332 
334  480, 900, 1500, 2350, 3020, 3420, 3650, 3775, 3875, 3830, 3750, 3700,
335  3630, 3550, 3550, 3290, 3070, 2890, 2840, 2730, 2725, 2720, 2770, 2805,
336  2828, 2865, 2770, 2640, 2570, 2490};
337 
339  325, 680, 990, 1500, 1850, 2150, 2250, 2300, 2350, 2330, 2280, 2230,
340  2200, 2120, 2130, 1900, 1780, 1670, 1635, 1600, 1602, 1605, 1610, 1615,
341  1630, 1660, 1620, 1550, 1530, 1460};
342 
344  0.02, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.12, 0.14, 0.16, 0.18,
345  0.20, 0.22, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60, 0.70, 0.80,
346  0.90, 1, 2, 3, 5, 10, 20, 50, 100, 500, 100000};
347 
349  5890, 5700, 5610, 5580, 5550, 5480, 5400, 5300, 5100, 4930, 4750, 4600,
350  4400, 4280, 4170, 3915, 3650, 3470, 3260, 3150, 3120, 3070, 3085, 3100,
351  3120, 3160, 3070, 2930, 2820, 2750, 2710, 2655, 2640, 2640, 2640};
352 
354  1575, 2025, 2300, 2575, 2850, 3000, 3115, 3180, 3080, 2940, 2800, 2670, 2550, 2450, 2370,
355  2220, 2110, 2000, 1920, 1880, 1850, 1800, 1805, 1810, 1820, 1840, 1800, 1720, 1640, 1620,
356  1570, 1530, 1530, 1530, 1530};
357 
359  515, 940, 1500, 2400, 3270, 3750, 4050, 4140, 4260, 4200, 4080, 3990, 3990, 3810, 3730,
360  3520, 3370, 3186, 3110, 3010, 2990, 2985, 3005, 3020, 3040, 3080, 3020, 2905, 2790, 2750};
361 
363  348, 707, 1040, 1650, 2100, 2400, 2580, 2640, 2650, 2520, 2410, 2300, 2250, 2190, 2130,
364  2000, 1930, 1870, 1830, 1790, 1770, 1765, 1775, 1780, 1790, 1800, 1775, 1710, 1620, 1620};
365 
367  7080, 6830, 6650, 6530, 6400, 6280, 6100, 5840, 5660, 5520, 5330, 5160,
368  4990, 4810, 4630, 4323, 4130, 3870, 3700, 3550, 3490, 3465, 3467, 3475,
369  3495, 3515, 3440, 3360, 3150, 3040, 2985, 2955, 2940, 2940, 2940};
370 
372  1740, 2220, 2500, 2820, 3080, 3300, 3420, 3500, 3420, 3330, 3200, 3060,
373  2940, 2850, 2710, 2470, 2380, 2250, 2160, 2080, 2040, 2045, 2047, 2050,
374  2055, 2060, 2010, 1980, 1830, 1780, 1735, 1710, 1700, 1700, 1700};
375 
377  485, 960, 1580, 2700, 3550, 4050, 4320, 4420, 4620, 4660, 4580, 4470,
378  4350, 4295, 4187, 3938, 3755, 3573, 3450, 3342, 3310, 3295, 3310, 3330,
379  3375, 3405, 3350, 3338, 3135, 3040};
380 
382  334, 720, 1020, 1560, 2100, 2300, 2550, 2700, 2880, 2880, 2760, 2660,
383  2550, 2510, 2430, 2270, 2130, 2060, 2000, 1970, 1950, 1950, 1960, 1960,
384  1970, 1980, 1950, 1978, 1830, 1780};
385 
386 
388  : G4VCrossSectionDataSet(Default_Name()),
389  fTotalXsc(0.0), fElasticXsc(0.0)
390 {
391  SetMinKinEnergy(0.0);
392  SetMaxKinEnergy(99.9*TeV);
393 
394  thePimData.push_back(new G4PiData(he_t, he_in, e1, 38));
395  thePipData.push_back(new G4PiData(he_t, he_in, e1, 38));
396  thePimData.push_back(new G4PiData(be_m_t, be_m_in, e1, 38));
397  thePipData.push_back(new G4PiData(be_p_t, be_p_in, e1, 24));
398  thePimData.push_back(new G4PiData(c_m_t, c_m_in, e2, 39));
399  thePipData.push_back(new G4PiData(c_p_t, c_p_in, e2, 24));
400  thePimData.push_back(new G4PiData(n_m_t, n_m_in, e2, 39));
401  thePipData.push_back(new G4PiData(n_p_t, n_p_in, e2, 27));
402  thePimData.push_back(new G4PiData(o_m_t, o_m_in, e3, 31));
403  thePipData.push_back(new G4PiData(o_p_t, o_p_in, e3, 20));
404  thePimData.push_back(new G4PiData(na_m_t, na_m_in, e3, 31));
405  thePipData.push_back(new G4PiData(na_p_t, na_p_in, e3, 22));
406  thePimData.push_back(new G4PiData(al_m_t, al_m_in, e3_1, 31));
407  thePipData.push_back(new G4PiData(al_p_t, al_p_in, e3_1, 21));
408  thePimData.push_back(new G4PiData(ca_m_t, ca_m_in, e3_1, 31));
409  thePipData.push_back(new G4PiData(ca_p_t, ca_p_in, e3_1, 23));
410  thePimData.push_back(new G4PiData(fe_m_t, fe_m_in, e4, 32));
411  thePipData.push_back(new G4PiData(fe_p_t, fe_p_in, e4, 25));
412  thePimData.push_back(new G4PiData(cu_m_t, cu_m_in, e4, 32));
413  thePipData.push_back(new G4PiData(cu_p_t, cu_p_in, e4, 25));
414  thePimData.push_back(new G4PiData(mo_m_t, mo_m_in, e5, 34));
415  thePipData.push_back(new G4PiData(mo_p_t, mo_p_in, e5, 27));
416  thePimData.push_back(new G4PiData(cd_m_t, cd_m_in, e5, 34));
417  thePipData.push_back(new G4PiData(cd_p_t, cd_p_in, e5, 28));
418  thePimData.push_back(new G4PiData(sn_m_t, sn_m_in, e6, 35));
419  thePipData.push_back(new G4PiData(sn_p_t, sn_p_in, e6, 29));
420  thePimData.push_back(new G4PiData(w_m_t, w_m_in, e6, 35));
421  thePipData.push_back(new G4PiData(w_p_t, w_p_in, e6, 30));
422  thePimData.push_back(new G4PiData(pb_m_t, pb_m_in, e7, 35));
423  thePipData.push_back(new G4PiData(pb_p_t, pb_p_in, e7, 30));
424  thePimData.push_back(new G4PiData(u_m_t, u_m_in, e7, 35));
425  thePipData.push_back(new G4PiData(u_p_t, u_p_in, e7, 30));
426 
427  theZ.push_back(2); // He
428  theZ.push_back(4); // Be
429  theZ.push_back(6); // C
430  theZ.push_back(7); // N
431  theZ.push_back(8); // O
432  theZ.push_back(11); // Na
433  theZ.push_back(13); // Al
434  theZ.push_back(20); // Ca
435  theZ.push_back(26); // Fe
436  theZ.push_back(29); // Cu
437  theZ.push_back(42); // Mo
438  theZ.push_back(48); // Cd
439  theZ.push_back(50); // Sn
440  theZ.push_back(74); // W
441  theZ.push_back(82); // Pb
442  theZ.push_back(92); // U
443 }
444 
447 {
448  std::for_each(thePimData.begin(), thePimData.end(), G4PiData::Delete());
449  std::for_each(thePipData.begin(), thePipData.end(), G4PiData::Delete());
450 }
451 
452 void
454 {
455  outFile << "G4PiNuclearCrossSection calculates the pion inelastic cross\n"
456  << "section for all nuclei heavier than hydrogen. It uses the\n"
457  << "Barashenkov cross sections and is valid for all incident\n"
458  << "energies.\n";
459 }
460 
461 
462 G4bool
464  G4int Z, const G4Material*)
465 {
466  return (1 < Z);
467 }
468 
469 
471 {
472  if(&p == G4PionMinus::PionMinus() || &p == G4PionPlus::PionPlus()) { return; }
473  throw G4HadronicException(__FILE__, __LINE__,"Is applicable only for pions");
474 }
475 
476 G4double
478  G4int Z, const G4Material*)
479 {
480  G4double charge = particle->GetDefinition()->GetPDGCharge();
481  G4double kineticEnergy = particle->GetKineticEnergy();
482 
483  // body
484 
485  G4double result = 0;
486  // debug.push_back(Z);
487  size_t it = 0;
488 
489  while(it < theZ.size() && Z > theZ[it]) it++;
490 
491  // debug.push_back(theZ[it]);
492  // debug.push_back(kineticEnergy);
493 
494  if(Z > theZ[it])
495  {
496  throw G4HadronicException(__FILE__, __LINE__,
497  "Called G4PiNuclearCrossSection outside parametrization");
498  }
499  G4int Z1, Z2;
500  G4double x1, x2, xt1, xt2;
501  if( charge < 0 )
502  {
503  if( theZ[it] == Z )
504  {
505  result = thePimData[it]->ReactionXSection(kineticEnergy);
506  fTotalXsc = thePimData[it]->TotalXSection(kineticEnergy);
507 
508  // debug.push_back("D1 ");
509  // debug.push_back(result);
510  // debug.push_back(fTotalXsc);
511  }
512  else
513  {
514  x1 = thePimData[it-1]->ReactionXSection(kineticEnergy);
515  xt1 = thePimData[it-1]->TotalXSection(kineticEnergy);
516  Z1 = theZ[it-1];
517  x2 = thePimData[it]->ReactionXSection(kineticEnergy);
518  xt2 = thePimData[it]->TotalXSection(kineticEnergy);
519  Z2 = theZ[it];
520 
521  result = Interpolate(Z1, Z2, Z, x1, x2);
522  fTotalXsc = Interpolate(Z1, Z2, Z, xt1, xt2);
523 
524  // debug.push_back("D2 ");
525  // debug.push_back(x1);
526  // debug.push_back(x2);
527  // debug.push_back(xt1);
528  // debug.push_back(xt2);
529  // debug.push_back(Z1);
530  // debug.push_back(Z2);
531  // debug.push_back(result);
532  // debug.push_back(fTotalXsc);
533  }
534  }
535  else
536  {
537  if(theZ[it]==Z)
538  {
539  // at high energies, when no data for pi+, use pi-
540  std::vector<G4PiData *> * theData = &thePimData;
541  if(thePipData[it]->AppliesTo(kineticEnergy))
542  {
543  theData = &thePipData;
544  }
545  result = theData->operator[](it)->ReactionXSection(kineticEnergy);
546  fTotalXsc = theData->operator[](it)->TotalXSection(kineticEnergy);
547 
548  // debug.push_back("D3 ");
549  // debug.push_back(result);
550  // debug.push_back(fTotalXsc);
551  }
552  else
553  {
554  std::vector<G4PiData *> * theLData = &thePimData;
555  if(thePipData[it-1]->AppliesTo(kineticEnergy))
556  {
557  theLData = &thePipData;
558  }
559  std::vector<G4PiData *> * theHData = &thePimData;
560  if(thePipData[it]->AppliesTo(kineticEnergy))
561  {
562  theHData = &thePipData;
563  }
564  x1 = theLData->operator[](it-1)->ReactionXSection(kineticEnergy);
565  xt1 = theLData->operator[](it-1)->TotalXSection(kineticEnergy);
566  Z1 = theZ[it-1];
567  x2 = theHData->operator[](it)->ReactionXSection(kineticEnergy);
568  xt2 = theHData->operator[](it)->TotalXSection(kineticEnergy);
569  Z2 = theZ[it];
570 
571  result = Interpolate(Z1, Z2, Z, x1, x2);
572  fTotalXsc = Interpolate(Z1, Z2, Z, xt1, xt2);
573 
574  // debug.push_back("D4 ");
575  // debug.push_back(x1);
576  // debug.push_back(xt1);
577  // debug.push_back(x2);
578  // debug.push_back(xt2);
579  // debug.push_back(Z1);
580  // debug.push_back(Z2);
581  // debug.push_back(result);
582  // debug.push_back(fTotalXsc);
583  }
584  }
585  // debug.dump();
586 
587  fElasticXsc = fTotalXsc - result;
588  if( fElasticXsc < 0.) fElasticXsc = 0.;
589 
590  return result;
591 }
592 
593 
596 {
597 // Nucleon numbers obtained from G4NistManager G4 8.0
598  static const G4double A[92] = {
599  1.0001, 4.0000, 6.9241, 9.000, 10.801, 12.011, 14.004, 16.004, 19.000,
600  20.188, 23.000, 24.320, 27.000, 28.109, 31.000, 32.094, 35.484, 39.985,
601  39.135, 40.116, 45.000, 47.918, 50.998, 52.055, 55.000, 55.910, 59.000,
602  58.760, 63.617, 65.468, 69.798, 72.691, 75.000, 79.042, 79.986, 83.887,
603  85.557, 87.710, 89.000, 91.318, 93.000, 96.025, 98.000, 101.16, 103.00,
604  106.51, 107.96, 112.51, 114.91, 118.81, 121.86, 127.70, 127.00, 131.39,
605  133.00, 137.42, 139.00, 140.21, 141.00, 144.32, 145.00, 150.45, 152.04,
606  157.33, 159.00, 162.57, 165.00, 167.32, 169.00, 173.10, 175.03, 178.54,
607  181.00, 183.89, 186.25, 190.27, 192.25, 195.11, 197.00, 200.63, 204.41,
608  207.24, 209.00, 209.00, 210.00, 222.00, 223.00, 226.00, 227.00, 232.00,
609  231.00, 237.98};
610 
611  static G4ThreadLocal G4bool NeedInit=true;
612  static G4ThreadLocal G4double A75[92];
613  if ( NeedInit )
614  {
615  for (G4int i=0; i<92; ++i)
616  {
617  A75[i]=std::pow(A[i],0.75);
618  }
619  NeedInit=false;
620  }
621 
622 // for tabulated data, cross section scales with A^.75
623  G4double r1 = x1 / A75[Z1-1] * A75[Z-1];
624  G4double r2 = x2 / A75[Z2-1] * A75[Z-1];
625  G4double result=0.5*(r1+r2);
626 // G4cout << "x1/2, z1/2 z" <<x1<<" "<<x2<<" "<<Z1<<" "<<Z2<<" "<<Z<<G4endl;
627 // G4cout << "res1/2 " << r1 <<" " << r2 <<" " << result<< G4endl;
628  return result;
629 }
static const G4double n_m_t[39]
static const G4double cu_m_in[32]
virtual void CrossSectionDescription(std::ostream &) const
static const G4double be_m_in[38]
static const G4double c_p_in[24]
static const G4double n_m_in[39]
virtual G4bool IsElementApplicable(const G4DynamicParticle *aParticle, G4int Z, const G4Material *)
static const G4double e6[35]
static const G4double al_p_in[21]
static const G4double be_p_t[24]
static const G4double u_m_t[35]
G4double GetKineticEnergy() const
static const G4double pb_m_t[35]
static const G4double fe_m_in[32]
static const G4double he_t[38]
static const G4double o_m_in[31]
static const G4double na_m_in[31]
static const G4double e7[35]
G4_DECLARE_XS_FACTORY(G4PiNuclearCrossSection)
static const G4double c_m_t[39]
static const G4double w_p_in[30]
static const G4double e3[31]
G4ParticleDefinition * GetDefinition() const
static const G4double w_m_in[35]
static const G4double cd_m_in[34]
#define G4ThreadLocal
Definition: tls.hh:89
static const G4double e4[32]
static const G4double w_m_t[35]
int G4int
Definition: G4Types.hh:78
static const G4double be_m_t[38]
static const G4double na_p_t[22]
static const G4double sn_p_t[29]
static const G4double c_m_in[39]
static const G4double pb_p_in[30]
static const G4double e5[34]
std::vector< G4PiData * > thePipData
static const G4double al_m_in[31]
G4double Interpolate(G4int Z1, G4int Z2, G4int Z, G4double x1, G4double x2)
static const G4double ca_p_t[23]
static const G4double al_m_t[31]
static const G4double fe_m_t[32]
static const G4double ca_m_in[31]
void SetMinKinEnergy(G4double value)
bool G4bool
Definition: G4Types.hh:79
static const G4double sn_m_in[35]
static const G4double he_in[38]
static const G4double u_p_in[30]
static const G4double cd_p_in[28]
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:98
std::vector< G4PiData * > thePimData
static const G4double w_p_t[30]
static const G4double cu_p_in[25]
static const G4double c_p_t[24]
static const G4double A[nN]
static const G4double fe_p_t[25]
virtual G4double GetElementCrossSection(const G4DynamicParticle *particle, G4int Z, const G4Material *)
static const G4double fe_p_in[25]
static const G4double na_m_t[31]
static const G4double al_p_t[21]
static const G4double be_p_in[24]
static const G4double cd_m_t[34]
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
void SetMaxKinEnergy(G4double value)
static const G4double cu_m_t[32]
static G4PionMinus * PionMinus()
Definition: G4PionMinus.cc:98
static const G4double pb_m_in[35]
static const G4double n_p_t[27]
static const G4double n_p_in[27]
static const G4double mo_m_t[34]
static const G4double u_m_in[35]
static const double TeV
Definition: G4SIunits.hh:197
static const G4double cu_p_t[25]
static const G4double e3_1[31]
static const G4double mo_p_in[27]
static const G4double ca_p_in[23]
static const G4double ca_m_t[31]
double G4double
Definition: G4Types.hh:76
static const G4double mo_p_t[27]
static const G4double mo_m_in[34]
G4double GetPDGCharge() const
static const G4double o_m_t[31]
static const G4double e1[38]
static const G4double na_p_in[22]
static const G4double cd_p_t[28]
static const G4double u_p_t[30]
static const G4double e2[39]
static const G4double pb_p_t[30]
static const G4double sn_p_in[29]
static const G4double o_p_t[20]
static const G4double sn_m_t[35]
static const G4double o_p_in[20]