Geant4 9.6.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"
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
446void
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
456G4bool
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
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
588G4double G4PiNuclearCrossSection::
589Interpolate(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 G4bool NeedInit=true;
606 static 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 G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
G4double GetPDGCharge() 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:98
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:98
void SetMaxKinEnergy(G4double value)
void SetMinKinEnergy(G4double value)