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