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