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