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