Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4HadronCrossSections.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 // G4 Hadron Physics class G4HadronCrossSections
27 // F.W. Jones, TRIUMF, 03-DEC-96
28 //
29 // This class encapsulates cross section data and calculations
30 // from the Geant3/Gheisha routine GHESIG.
31 // The overloaded method MakePhysicsVector can be used to Generate
32 // Physics Tables for different processes.
33 //
34 // Note: this is implemented as a SINGLETON class
35 //
36 // 27-MAR-97 FWJ: first version for Alpha release
37 // 14-APR-97 FWJ: class name changed from G4LCrossSectionData
38 // to G4HadronicCrossSections
39 // 23-Apr-97 Johannes Peter Wellisch: debugging, add the residual particles
40 // 23-MAY-97 FWJ: corrected problem with neutron cross sections
41 // 20-JUN-97 FWJ: added some missing elastic data (e.g. K+) and
42 // fixed a momentum/energy units problem in the physics vectors
43 // 14-APR-98 FWJ: rewritten as class G4HadronCrossSections
44 // and adapted to G4CrossSectionDataSet/DataStore class design.
45 // 25-JUN-98 FWJ: optimised bin selection.
46 // 06-NOV-98 FWJ: added first-order correction for low-energy
47 // inelastic cross sections
48 //
49 
50 #include "G4HadronCrossSections.hh"
51 #include "G4ios.hh"
52 #include "G4SystemOfUnits.hh"
53 #include "G4HadronicException.hh"
54 #include "G4Pow.hh"
55 
56 // Initialize static pointer for singleton instance
57 G4ThreadLocal G4HadronCrossSections* G4HadronCrossSections::theInstance = 0;
58 
59 
60 // Cross section tables from G3.21/GHEISHA routine GHESIG
61 
62 //---------------------------------------------------------------------
63 // Lab Momentum in GeV/c
64 //---------------------------------------------------------------------
65 const G4float G4HadronCrossSections::plab[TSIZE] = {
66  0.00000E+00 , 0.10000 , 0.15000 , 0.20000 , 0.25000 ,
67  0.30000 , 0.35000 , 0.40000 , 0.45000 , 0.50000 ,
68  0.55000 , 0.60000 , 0.65000 , 0.70000 , 0.75000 ,
69  0.80000 , 0.85000 , 0.90000 , 0.95000 , 1.0000 ,
70  1.1000 , 1.2000 , 1.3000 , 1.4000 , 1.5000 ,
71  1.6000 , 1.8000 , 2.0000 , 2.2000 , 2.4000 ,
72  2.6000 , 2.8000 , 3.0000 , 4.0000 , 5.0000 ,
73  6.0000 , 8.0000 , 10.000 , 20.000 , 100.00 ,
74  1000.0
75 };
76 
77 //---------------------------------------------------------------------
78 // Elastic scattering on free protons
79 //---------------------------------------------------------------------
80 
81 const G4float G4HadronCrossSections::csel[NPARTS][TSIZE] = {
82  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //1
83  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
84  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
85  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
86  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
87  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
88  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
89  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
90  0.00000E+00},
91 
92  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //2
93  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
94  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
95  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
96  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
97  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
98  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
99  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
100  0.00000E+00},
101 
102  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //3
103  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
104  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
105  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
106  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
107  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
108  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
109  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
110  0.00000E+00},
111 
112  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //4
113  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
114  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
115  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
116  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
117  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
118  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
119  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
120  0.00000E+00},
121 
122  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //5
123  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
124  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
125  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
126  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
127  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
128  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
129  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
130  0.00000E+00},
131 
132  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //6
133  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
134  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
135  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
136  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
137  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
138  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
139  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
140  0.00000E+00},
141 
142 // Elastic cross section for piplus - p
143  {0.00000E+00, 6.0000 , 20.000 , 71.000 , 155.00 , //7
144  195.00 , 130.00 , 78.000 , 60.000 , 32.000 ,
145  23.500 , 18.500 , 15.000 , 12.500 , 10.000 ,
146  9.1000 , 8.6000 , 8.8000 , 9.5000 , 10.600 ,
147  13.000 , 15.500 , 17.100 , 17.200 , 16.200 ,
148  15.000 , 12.300 , 10.200 , 9.0000 , 8.0000 ,
149  7.3000 , 6.8000 , 6.5000 , 5.8000 , 5.4000 ,
150  5.2000 , 5.0000 , 4.9000 , 3.8000 , 3.2000 ,
151  3.5000},
152 
153  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //8
154  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
155  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
156  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
157  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
158  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
159  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
160  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
161  0.00000E+00},
162 
163 // Elastic cross section for piminus - p
164  {0.00000E+00, 1.0000 , 3.0000 , 8.0000 , 18.000 , //9
165  25.000 , 27.500 , 12.300 , 10.600 , 11.000 ,
166  12.500 , 14.500 , 17.000 , 19.400 , 19.800 ,
167  16.800 , 14.000 , 14.800 , 20.000 , 26.100 ,
168  19.500 , 15.000 , 12.800 , 11.500 , 10.500 ,
169  9.8000 , 8.8000 , 8.2000 , 7.8000 , 7.5000 ,
170  7.2000 , 7.0000 , 6.8000 , 6.1000 , 5.7000 ,
171  5.4000 , 4.9000 , 4.6000 , 4.0000 , 3.3000 ,
172  3.5000},
173 
174  {10.000 , 11.200 , 11.300 , 11.400 , 11.500 , //10
175  11.600 , 11.800 , 12.000 , 12.100 , 12.200 ,
176  12.300 , 12.400 , 12.500 , 12.500 , 12.500 ,
177  12.400 , 12.300 , 12.200 , 12.000 , 11.800 ,
178  11.200 , 11.500 , 9.9000 , 9.4000 , 8.8000 ,
179  8.4000 , 7.5000 , 6.9000 , 6.3000 , 5.9000 ,
180  5.5000 , 5.2000 , 5.0000 , 4.0000 , 3.5000 ,
181  3.3000 , 3.1000 , 3.1000 , 3.0000 , 2.5000 ,
182  3.0000},
183 
184  {10.000 , 11.200 , 11.300 , 11.400 , 11.500 , //11
185  11.600 , 11.800 , 12.000 , 12.100 , 12.200 ,
186  12.300 , 12.400 , 12.500 , 12.500 , 12.500 ,
187  12.400 , 12.300 , 12.200 , 12.000 , 11.800 ,
188  11.200 , 11.500 , 9.9000 , 9.4000 , 8.8000 ,
189  8.4000 , 7.5000 , 6.9000 , 6.3000 , 5.9000 ,
190  5.5000 , 5.2000 , 5.0000 , 4.0000 , 3.5000 ,
191  3.3000 , 3.1000 , 3.1000 , 3.0000 , 2.5000 ,
192  3.0000},
193 
194  {160.83 , 82.800 , 58.575 , 43.683 , 34.792 , //12
195  28.650 , 24.367 , 20.917 , 18.192 , 16.300 ,
196  14.608 , 13.017 , 12.250 , 11.700 , 12.017 ,
197  14.075 , 15.842 , 16.433 , 16.042 , 15.008 ,
198  12.575 , 10.708 , 9.2000 , 8.0167 , 7.2833 ,
199  7.0750 , 6.6333 , 6.1250 , 5.6583 , 5.2750 ,
200  4.9333 , 4.6250 , 4.4583 , 3.7333 , 3.3833 ,
201  3.1833 , 2.9833 , 2.7500 , 2.3667 , 2.2000 ,
202  2.6000},
203 
204  {300.00 , 140.00 , 97.000 , 70.000 , 55.000 , //13
205  45.000 , 37.000 , 31.000 , 26.000 , 23.000 ,
206  20.000 , 17.000 , 15.500 , 14.500 , 14.700 ,
207  18.500 , 22.000 , 23.000 , 22.500 , 20.700 ,
208  16.500 , 14.000 , 11.500 , 9.6000 , 8.6000 ,
209  8.5000 , 8.3000 , 7.6000 , 7.0000 , 6.4000 ,
210  5.9000 , 5.5000 , 5.3000 , 4.4000 , 4.1000 ,
211  3.9000 , 3.7000 , 3.3000 , 2.6000 , 2.5000 ,
212  3.0000},
213 
214 // Elastic cross section for p-p
215  {1100.0 , 115.00 , 105.00 , 100.00 , 56.000 , //14
216  40.000 , 27.000 , 22.000 , 21.000 , 20.000 ,
217  20.000 , 20.000 , 20.500 , 21.000 , 22.000 ,
218  23.000 , 24.000 , 24.000 , 24.400 , 24.500 ,
219  25.000 , 25.500 , 26.000 , 26.500 , 27.000 ,
220  27.000 , 26.000 , 23.000 , 21.500 , 20.000 ,
221  19.000 , 18.000 , 17.000 , 13.000 , 11.500 ,
222  10.300 , 9.4000 , 9.0000 , 8.8000 , 7.0000 ,
223  7.5000},
224 
225  {200.00 , 163.00 , 141.00 , 120.00 , 111.00 , //15
226  99.500 , 92.500 , 86.500 , 82.000 , 78.000 ,
227  74.000 , 71.000 , 67.500 , 65.000 , 62.500 ,
228  59.700 , 58.100 , 56.300 , 54.700 , 52.700 ,
229  50.000 , 48.400 , 47.000 , 46.000 , 45.200 ,
230  42.800 , 39.200 , 36.300 , 32.800 , 30.400 ,
231  28.100 , 26.300 , 24.500 , 19.250 , 16.840 ,
232  14.600 , 12.340 , 11.210 , 8.8500 , 7.5000 ,
233  7.5000} ,
234 
235  {4200.0 , 440.00 , 420.00 , 400.00 , 230.00 , //16
236  160.00 , 105.00 , 80.000 , 62.000 , 50.000 ,
237  45.000 , 41.000 , 38.000 , 36.000 , 35.000 ,
238  34.000 , 33.000 , 32.000 , 31.500 , 31.000 ,
239  30.500 , 30.000 , 29.500 , 29.000 , 28.500 ,
240  28.000 , 26.000 , 23.000 , 21.500 , 20.000 ,
241  19.000 , 18.000 , 17.000 , 13.000 , 11.500 ,
242  10.300 , 9.4000 , 9.0000 , 8.8000 , 7.0000 ,
243  7.5000} ,
244 
245  {185.88 , 133.23 , 119.37 , 102.86 , 93.102 , //17
246  82.752 , 76.205 , 71.008 , 67.366 , 64.096 ,
247  60.891 , 58.501 , 55.735 , 53.773 , 51.839 ,
248  49.671 , 48.485 , 47.045 , 45.803 , 44.306 ,
249  42.623 , 41.786 , 41.115 , 40.630 , 40.129 ,
250  38.242 , 35.233 , 32.662 , 29.639 , 27.573 ,
251  25.536 , 23.948 , 22.356 , 17.723 , 15.614 ,
252  13.653 , 11.675 , 10.653 , 8.6198 , 7.4464 ,
253  7.4821} ,
254 
255  {1100.0 , 115.00 , 105.00 , 100.00 , 56.000 , //18
256  40.000 , 27.000 , 22.000 , 21.000 , 20.000 ,
257  20.000 , 19.067 , 19.333 , 19.500 , 19.833 ,
258  20.567 , 21.800 , 22.900 , 23.869 , 23.809 ,
259  22.161 , 21.488 , 19.732 , 19.433 , 19.345 ,
260  19.029 , 18.121 , 16.280 , 15.258 , 14.280 ,
261  13.644 , 12.963 , 12.316 , 9.5333 , 8.4333 ,
262  7.5728 , 6.9696 , 6.7518 , 6.6175 , 5.6000 ,
263  6.1145} ,
264 
265  {157.65 , 73.701 , 76.096 , 68.571 , 57.305 , //19
266  49.257 , 43.616 , 40.024 , 38.098 , 36.287 ,
267  34.674 , 33.105 , 31.712 , 30.685 , 29.613 ,
268  28.602 , 28.336 , 28.075 , 27.786 , 27.215 ,
269  26.380 , 26.146 , 25.108 , 24.783 , 24.360 ,
270  23.219 , 21.431 , 20.095 , 18.382 , 17.267 ,
271  16.100 , 15.175 , 14.271 , 11.573 , 10.305 ,
272  9.1471 , 8.0149 , 7.4349 , 6.2499 , 5.8928 ,
273  6.0774} ,
274 
275  {1100.0 , 115.00 , 105.00 , 100.00 , 56.000 , //20
276  40.000 , 27.000 , 22.000 , 21.000 , 20.000 ,
277  20.000 , 19.067 , 19.333 , 19.500 , 19.833 ,
278  20.567 , 21.800 , 22.900 , 23.869 , 23.809 ,
279  22.161 , 21.488 , 19.732 , 19.433 , 19.345 ,
280  19.029 , 18.121 , 16.280 , 15.258 , 14.280 ,
281  13.644 , 12.963 , 12.316 , 9.5333 , 8.4333 ,
282  7.5728 , 6.9696 , 6.7518 , 6.6175 , 5.6000 ,
283  6.1145} ,
284 
285  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //21
286  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
287  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
288  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
289  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
290  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
291  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
292  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
293  0.00000E+00},
294 
295  {1100.0 , 115.00 , 105.00 , 100.00 , 56.000 , //22
296  40.000 , 27.000 , 22.000 , 21.000 , 20.000 ,
297  20.000 , 19.067 , 19.333 , 19.500 , 19.833 ,
298  20.567 , 21.800 , 22.900 , 23.869 , 23.809 ,
299  22.161 , 21.488 , 19.732 , 19.433 , 19.345 ,
300  19.029 , 18.121 , 16.280 , 15.258 , 14.280 ,
301  13.644 , 12.963 , 12.316 , 9.5333 , 8.4333 ,
302  7.5728 , 6.9696 , 6.7518 , 6.6175 , 5.6000 ,
303  6.1145} ,
304 
305  {185.88 , 133.23 , 119.37 , 102.86 , 93.102 , //23
306  82.752 , 76.205 , 71.008 , 67.366 , 64.096 ,
307  60.891 , 58.104 , 55.241 , 53.140 , 50.934 ,
308  48.660 , 47.566 , 46.585 , 45.581 , 44.003 ,
309  41.134 , 39.374 , 36.878 , 35.523 , 34.503 ,
310  32.334 , 29.365 , 27.370 , 24.705 , 22.921 ,
311  21.229 , 19.879 , 18.559 , 14.625 , 12.758 ,
312  11.041 , 9.3440 , 8.5484 , 6.7104 , 6.0000 ,
313  6.1131} ,
314 
315  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //24
316  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
317  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
318  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
319  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
320  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
321  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
322  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
323  0.00000E+00},
324 
325  {157.65 , 73.701 , 76.096 , 68.571 , 57.305 , //25
326  49.257 , 43.616 , 40.024 , 38.098 , 36.287 ,
327  34.674 , 33.105 , 31.712 , 30.685 , 29.613 ,
328  28.602 , 28.336 , 28.075 , 27.786 , 27.215 ,
329  26.380 , 26.146 , 25.108 , 24.783 , 24.360 ,
330  23.219 , 21.431 , 20.095 , 18.382 , 17.267 ,
331  16.100 , 15.175 , 14.271 , 11.573 , 10.305 ,
332  9.1471 , 8.0149 , 7.4349 , 6.2499 , 5.8928 ,
333  6.0774} ,
334 
335  {1100.0 , 115.00 , 105.00 , 100.00 , 56.000 , //26
336  40.000 , 27.000 , 22.000 , 21.000 , 20.000 ,
337  20.000 , 18.133 , 18.167 , 18.000 , 17.667 ,
338  18.133 , 19.600 , 21.800 , 23.338 , 23.118 ,
339  19.323 , 17.476 , 13.464 , 12.367 , 11.691 ,
340  11.057 , 10.242 , 9.5593 , 9.0151 , 8.5591 ,
341  8.2884 , 7.9253 , 7.6311 , 6.0667 , 5.3667 ,
342  4.8456 , 4.5392 , 4.5036 , 4.4351 , 4.2000 ,
343  4.7289} ,
344 
345  {1100.0 , 115.00 , 105.00 , 100.00 , 56.000 , //27
346  40.000 , 27.000 , 22.000 , 21.000 , 20.000 ,
347  20.000 , 18.133 , 18.167 , 18.000 , 17.667 ,
348  18.133 , 19.600 , 21.800 , 23.338 , 23.118 ,
349  19.323 , 17.476 , 13.464 , 12.367 , 11.691 ,
350  11.057 , 10.242 , 9.5593 , 9.0151 , 8.5591 ,
351  8.2884 , 7.9253 , 7.6311 , 6.0667 , 5.3667 ,
352  4.8456 , 4.5392 , 4.5036 , 4.4351 , 4.2000 ,
353  4.7289} ,
354 
355  {157.65 , 73.701 , 76.096 , 68.571 , 57.305 , //28
356  49.257 , 43.616 , 40.024 , 38.098 , 36.287 ,
357  34.674 , 32.708 , 31.218 , 30.052 , 28.707 ,
358  27.591 , 27.417 , 27.615 , 27.564 , 26.913 ,
359  24.891 , 23.734 , 20.871 , 19.677 , 18.734 ,
360  17.311 , 15.563 , 14.803 , 13.448 , 12.615 ,
361  11.794 , 11.106 , 10.474 , 8.4745 , 7.4498 ,
362  6.5350 , 5.6835 , 5.3300 , 4.3406 , 4.4464 ,
363  4.7083} ,
364 
365  {143.53 , 43.935 , 54.462 , 51.429 , 39.407 , //29
366  32.510 , 27.321 , 24.532 , 23.465 , 22.383 ,
367  21.566 , 20.209 , 19.453 , 18.825 , 18.046 ,
368  17.562 , 17.802 , 18.360 , 18.667 , 18.519 ,
369  17.514 , 17.120 , 14.985 , 14.306 , 13.663 ,
370  12.753 , 11.596 , 11.165 , 10.287 , 9.7882 ,
371  9.2294 , 8.7539 , 8.3300 , 6.9480 , 6.2234 ,
372  5.5881 , 5.0189 , 4.7733 , 4.1104 , 4.3929 ,
373  4.6905} ,
374 
375  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //30
376  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
377  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
378  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
379  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
380  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
381  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
382  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
383  0.00000E+00},
384 
385  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //31
386  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
387  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
388  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
389  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
390  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
391  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
392  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
393  0.00000E+00},
394 
395  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //32
396  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
397  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
398  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
399  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
400  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
401  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
402  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
403  0.00000E+00},
404 
405  {1100.0 , 115.00 , 105.00 , 100.00 , 56.000 , //33
406  40.000 , 27.000 , 22.000 , 21.000 , 20.000 ,
407  20.000 , 18.133 , 18.167 , 18.000 , 17.667 ,
408  18.133 , 19.600 , 21.800 , 23.338 , 23.118 ,
409  19.323 , 17.476 , 13.464 , 12.367 , 11.691 ,
410  11.057 , 10.242 , 9.5593 , 9.0151 , 8.5591 ,
411  8.2884 , 7.9253 , 7.6311 , 6.0667 , 5.3667 ,
412  4.8456 , 4.5392 , 4.5036 , 4.4351 , 4.2000 ,
413  4.7289} ,
414 
415  {143.53 , 43.935 , 54.462 , 51.429 , 39.407 , //34
416  32.510 , 27.321 , 24.532 , 23.465 , 22.383 ,
417  21.566 , 20.209 , 19.453 , 18.825 , 18.046 ,
418  17.562 , 17.802 , 18.360 , 18.667 , 18.519 ,
419  17.514 , 17.120 , 14.985 , 14.306 , 13.663 ,
420  12.753 , 11.596 , 11.165 , 10.287 , 9.7882 ,
421  9.2294 , 8.7539 , 8.3300 , 6.9480 , 6.2234 ,
422  5.5881 , 5.0189 , 4.7733 , 4.1104 , 4.3929 ,
423  4.6905} ,
424 
425  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //35
426  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
427  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
428  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
429  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
430  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
431  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
432  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
433  0.00000E+00}
434 };
435 
436 //---------------------------------------------------------------------
437 // Inelastic scattering on free protons
438 //---------------------------------------------------------------------
439 
440 const G4float G4HadronCrossSections::csin[NPARTS][TSIZE] = {
441 
442  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //1
443  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
444  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
445  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
446  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
447  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
448  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
449  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
450  0.00000E+00},
451 
452  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //2
453  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
454  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
455  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
456  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
457  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
458  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
459  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
460  0.00000E+00},
461 
462  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //3
463  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
464  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
465  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
466  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
467  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
468  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
469  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
470  0.00000E+00},
471 
472  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //4
473  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
474  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
475  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
476  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
477  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
478  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
479  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
480  0.00000E+00},
481 
482  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //5
483  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
484  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
485  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
486  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
487  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
488  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
489  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
490  0.00000E+00},
491 
492  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //6
493  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
494  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
495  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
496  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
497  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
498  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
499  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
500  0.00000E+00},
501 
502 // Inelastic cross section for piplus - p
503  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //7
504  0.00000E+00, 0.00000E+00, 0.50000 , 1.2000 , 1.7000 ,
505  2.2500 , 3.0000 , 3.6000 , 4.5000 , 5.4000 ,
506  6.3000 , 8.6000 , 9.0000 , 10.000 , 11.500 ,
507  14.000 , 17.000 , 19.500 , 22.000 , 24.000 ,
508  21.500 , 18.500 , 19.000 , 20.500 , 22.200 ,
509  23.000 , 23.300 , 23.000 , 21.000 , 20.500 ,
510  20.200 , 20.100 , 20.000 , 20.000 , 20.000 ,
511  21.000},
512 
513 
514  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //8
515  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
516  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
517  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
518  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
519  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
520  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
521  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
522  0.00000E+00},
523 
524 // Inelastic cross section for piminus - p
525  {0.00000E+00, 3.0000 , 9.2000 , 20.500 , 36.500 , //9
526  45.000 , 28.000 , 19.500 , 15.500 , 14.200 ,
527  15.500 , 17.500 , 20.000 , 23.000 , 26.000 ,
528  20.000 , 23.000 , 26.500 , 32.000 , 35.000 ,
529  28.500 , 22.000 , 22.500 , 23.500 , 24.000 ,
530  24.500 , 26.000 , 27.500 , 27.500 , 27.000 ,
531  26.500 , 25.500 , 25.000 , 23.000 , 22.500 ,
532  22.200 , 22.000 , 22.000 , 21.200 , 20.700 ,
533  21.000} ,
534 
535  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //10
536  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
537  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
538  0.50000 , 1.5000 , 2.7000 , 3.8000 , 4.8000 ,
539  6.5000 , 7.6000 , 8.4000 , 9.0000 , 9.4000 ,
540  9.8000 , 10.500 , 11.000 , 11.500 , 11.800 ,
541  12.200 , 12.400 , 12.600 , 13.200 , 13.500 ,
542  13.700 , 14.000 , 14.200 , 14.500 , 16.400 ,
543  17.000} ,
544 
545  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //11
546  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
547  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
548  0.50000 , 1.5000 , 2.7000 , 3.8000 , 4.8000 ,
549  6.5000 , 7.6000 , 8.4000 , 9.0000 , 9.4000 ,
550  9.8000 , 10.500 , 11.000 , 11.500 , 11.800 ,
551  12.200 , 12.400 , 12.600 , 13.200 , 13.500 ,
552  13.700 , 14.000 , 14.200 , 14.500 , 16.400 ,
553  17.000} ,
554 
555  {266.67 , 133.33 , 83.333 , 57.083 , 44.500 , //12
556  33.250 , 24.583 , 20.833 , 18.333 , 16.083 ,
557  15.625 , 15.083 , 14.833 , 15.083 , 15.833 ,
558  17.042 , 18.958 , 20.758 , 22.533 , 22.825 ,
559  21.250 , 18.567 , 17.767 , 18.100 , 19.933 ,
560  20.783 , 21.225 , 21.000 , 20.558 , 20.258 ,
561  20.017 , 19.767 , 19.600 , 19.183 , 18.850 ,
562  18.575 , 18.350 , 18.175 , 17.808 , 17.558 ,
563  19.250} ,
564 
565  {400.00 , 200.00 , 120.00 , 81.000 , 62.000 , //13
566  47.000 , 35.000 , 28.000 , 24.000 , 21.000 ,
567  19.500 , 19.000 , 18.800 , 19.000 , 20.000 ,
568  21.000 , 23.000 , 25.000 , 27.000 , 27.500 ,
569  25.500 , 22.000 , 20.800 , 21.000 , 23.000 ,
570  24.000 , 24.000 , 23.800 , 23.000 , 22.500 ,
571  22.000 , 21.600 , 21.400 , 21.000 , 20.500 ,
572  20.200 , 19.800 , 19.500 , 18.600 , 17.500 ,
573  20.000} ,
574 
575 // Inelastic cross section for p - p
576  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //14
577  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
578  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
579  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.10000 , 1.5000 ,
580  7.0000 , 12.000 , 17.000 , 19.500 , 20.500 ,
581  22.000 , 23.500 , 24.800 , 25.800 , 26.500 ,
582  27.000 , 27.500 , 28.000 , 30.000 , 31.000 ,
583  32.000 , 32.500 , 32.500 , 33.000 , 33.500 ,
584  33.500} ,
585 
586  {1500.0 , 1160.0 , 310.00 , 230.00 , 178.00 , //15
587  153.00 , 134.00 , 124.00 , 113.00 , 106.00 ,
588  101.00 , 96.000 , 92.000 , 89.000 , 87.000 ,
589  84.000 , 81.000 , 78.500 , 76.500 , 75.000 ,
590  72.000 , 70.000 , 68.000 , 64.500 , 63.000 ,
591  62.000 , 61.000 , 59.500 , 58.500 , 56.500 ,
592  56.500 , 56.000 , 55.500 , 52.000 , 50.000 ,
593  48.000 , 45.000 , 44.000 , 39.200 , 34.500 ,
594  34.500} ,
595 
596  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //16
597  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
598  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
599  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.10000 , 1.5000 ,
600  7.0000 , 12.000 , 17.000 , 19.500 , 20.500 ,
601  22.000 , 23.500 , 24.800 , 25.800 , 26.500 ,
602  27.000 , 27.500 , 28.000 , 30.000 , 31.000 ,
603  32.000 , 32.500 , 32.500 , 33.000 , 33.500 ,
604  34.000} ,
605 
606  {1394.1 , 948.17 , 262.43 , 197.14 , 149.30 , //17
607  127.25 , 110.39 , 101.79 , 92.834 , 87.104 ,
608  83.109 , 79.099 , 75.965 , 73.627 , 72.161 ,
609  69.889 , 67.595 , 65.595 , 64.057 , 63.054 ,
610  61.377 , 60.434 , 59.485 , 56.970 , 55.931 ,
611  55.398 , 54.827 , 53.538 , 52.861 , 51.247 ,
612  51.344 , 50.992 , 50.644 , 47.876 , 46.358 ,
613  44.887 , 42.577 , 41.815 , 38.180 , 34.254 ,
614  34.418} ,
615 
616  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //18
617  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
618  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
619  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.97815E-01, 1.4577 ,
620  6.2052 , 10.112 , 12.902 , 14.300 , 14.688 ,
621  15.505 , 16.379 , 17.554 , 18.309 , 18.920 ,
622  19.389 , 19.804 , 20.284 , 22.000 , 22.733 ,
623  23.527 , 24.097 , 24.382 , 24.816 , 26.800 ,
624  27.719} ,
625 
626  {1182.4 , 524.50 , 167.30 , 131.43 , 91.895 , //19
627  75.743 , 63.184 , 57.376 , 52.502 , 49.313 ,
628  47.326 , 44.762 , 43.222 , 42.015 , 41.221 ,
629  40.244 , 39.504 , 39.145 , 38.860 , 38.731 ,
630  37.987 , 37.814 , 36.326 , 34.750 , 33.953 ,
631  33.635 , 33.349 , 32.938 , 32.785 , 32.092 ,
632  32.373 , 32.312 , 32.329 , 31.261 , 30.597 ,
633  30.073 , 29.228 , 29.182 , 27.683 , 27.107 ,
634  27.956} ,
635 
636  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //20
637  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
638  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
639  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.97815E-01, 1.4577 ,
640  6.2052 , 10.112 , 12.902 , 14.300 , 14.688 ,
641  15.505 , 16.379 , 17.554 , 18.309 , 18.920 ,
642  19.389 , 19.804 , 20.284 , 22.000 , 22.733 ,
643  23.527 , 24.097 , 24.382 , 24.816 , 26.800 ,
644  27.719} ,
645 
646  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //21
647  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
648  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
649  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
650  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
651  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
652  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
653  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
654  0.00000E+00},
655 
656  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //22
657  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
658  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
659  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.97815E-01, 1.4577 ,
660  6.2052 , 10.112 , 12.902 , 14.300 , 14.688 ,
661  15.505 , 16.379 , 17.554 , 18.309 , 18.920 ,
662  19.389 , 19.804 , 20.284 , 22.000 , 22.733 ,
663  23.527 , 24.097 , 24.382 , 24.816 , 26.800 ,
664  27.719} ,
665 
666  {1394.1 , 948.17 , 262.43 , 197.14 , 149.30 , //23
667  127.25 , 110.39 , 101.79 , 92.834 , 87.104 ,
668  83.109 , 78.563 , 75.292 , 72.760 , 70.900 ,
669  68.467 , 66.314 , 64.955 , 63.746 , 62.623 ,
670  59.233 , 56.946 , 53.355 , 49.810 , 48.090 ,
671  46.839 , 45.695 , 44.863 , 44.062 , 42.599 ,
672  42.684 , 42.328 , 42.041 , 39.508 , 37.880 ,
673  36.299 , 34.075 , 33.553 , 29.723 , 27.600 ,
674  28.120} ,
675 
676  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //24
677  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
678  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
679  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
680  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
681  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
682  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
683  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
684  0.00000E+00},
685 
686  {1182.4 , 524.50 , 167.30 , 131.43 , 91.895 , //25
687  75.743 , 63.184 , 57.376 , 52.502 , 49.313 ,
688  47.326 , 44.762 , 43.222 , 42.015 , 41.221 ,
689  40.244 , 39.504 , 39.145 , 38.860 , 38.731 ,
690  37.987 , 37.814 , 36.326 , 34.750 , 33.953 ,
691  33.635 , 33.349 , 32.938 , 32.785 , 32.092 ,
692  32.373 , 32.312 , 32.329 , 31.261 , 30.597 ,
693  30.073 , 29.228 , 29.182 , 27.683 , 27.107 ,
694  27.956} ,
695 
696  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //26
697  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
698  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
699  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.95639E-01, 1.4154 ,
700  5.4104 , 8.2240 , 8.8031 , 9.1000 , 8.8761 ,
701  9.0095 , 9.2576 , 10.307 , 10.818 , 11.341 ,
702  11.778 , 12.108 , 12.569 , 14.000 , 14.467 ,
703  15.054 , 15.694 , 16.263 , 16.632 , 20.100 ,
704  21.438} ,
705 
706  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //27
707  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
708  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
709  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.95639E-01, 1.4154 ,
710  5.4104 , 8.2240 , 8.8031 , 9.1000 , 8.8761 ,
711  9.0095 , 9.2576 , 10.307 , 10.818 , 11.341 ,
712  11.778 , 12.108 , 12.569 , 14.000 , 14.467 ,
713  15.054 , 15.694 , 16.263 , 16.632 , 20.100 ,
714  21.438} ,
715 
716  {1182.4 , 524.50 , 167.30 , 131.43 , 91.895 , //28
717  75.743 , 63.184 , 57.376 , 52.502 , 49.313 ,
718  47.326 , 44.225 , 42.549 , 41.148 , 39.960 ,
719  38.822 , 38.223 , 38.505 , 38.549 , 38.301 ,
720  35.843 , 34.326 , 30.196 , 27.590 , 26.112 ,
721  25.076 , 24.217 , 24.264 , 23.985 , 23.445 ,
722  23.713 , 23.647 , 23.726 , 22.892 , 22.119 ,
723  21.485 , 20.726 , 20.921 , 19.226 , 20.454 ,
724  21.658} ,
725 
726  {1076.5 , 312.66 , 119.74 , 98.571 , 63.193 , //29
727  49.990 , 39.579 , 35.168 , 32.335 , 30.417 ,
728  29.434 , 27.325 , 26.514 , 25.775 , 25.120 ,
729  24.711 , 24.818 , 25.600 , 26.106 , 26.355 ,
730  25.220 , 24.760 , 21.681 , 20.060 , 19.044 ,
731  18.474 , 18.044 , 18.301 , 18.347 , 18.192 ,
732  18.557 , 18.639 , 18.870 , 18.769 , 18.478 ,
733  18.372 , 18.302 , 18.735 , 18.206 , 20.207 ,
734  21.576} ,
735 
736  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //30
737  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
738  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
739  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
740  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
741  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
742  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
743  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
744  0.00000E+00},
745 
746  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //31
747  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
748  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
749  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
750  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
751  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
752  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
753  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
754  0.00000E+00},
755 
756  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //32
757  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
758  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
759  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
760  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
761  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
762  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
763  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
764  0.00000E+00},
765 
766  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //33
767  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
768  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
769  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.95639E-01, 1.4154 ,
770  5.4104 , 8.2240 , 8.8031 , 9.1000 , 8.8761 ,
771  9.0095 , 9.2576 , 10.307 , 10.818 , 11.341 ,
772  11.778 , 12.108 , 12.569 , 14.000 , 14.467 ,
773  15.054 , 15.694 , 16.263 , 16.632 , 20.100 ,
774  21.438} ,
775 
776  {1076.5 , 312.66 , 119.74 , 98.571 , 63.193 , //34
777  49.990 , 39.579 , 35.168 , 32.335 , 30.417 ,
778  29.434 , 27.325 , 26.514 , 25.775 , 25.120 ,
779  24.711 , 24.818 , 25.600 , 26.106 , 26.355 ,
780  25.220 , 24.760 , 21.681 , 20.060 , 19.044 ,
781  18.474 , 18.044 , 18.301 , 18.347 , 18.192 ,
782  18.557 , 18.639 , 18.870 , 18.769 , 18.478 ,
783  18.372 , 18.302 , 18.735 , 18.206 , 20.207 ,
784  21.576} ,
785 
786  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //35
787  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
788  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
789  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
790  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
791  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
792  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
793  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
794  0.00000E+00}
795 
796 };
797 
798 //---------------------------------------------------------------------
799 // Elastic scattering of pion on nucleus
800 //---------------------------------------------------------------------
801 
802 const G4float G4HadronCrossSections::cspiel[3][TSIZE] = {
803 
804 // Elastic cross section for Pi on Al (mb)
805  {0.00000E+00, 350.00 , 580.00 , 600.00 , 550.00 , //1
806  450.00 , 410.00 , 370.00 , 340.00 , 230.00 ,
807  220.00 , 205.00 , 180.00 , 155.00 , 145.00 ,
808  140.00 , 160.00 , 195.00 , 235.00 , 250.00 ,
809  270.00 , 280.00 , 300.00 , 300.00 , 290.00 ,
810  285.00 , 265.00 , 240.00 , 230.00 , 222.00 ,
811  204.00 , 196.00 , 190.00 , 170.00 , 170.00 ,
812  160.00 , 150.00 , 140.00 , 120.00 , 80.000 ,
813  80.000},
814 
815 // Elastic cross section for Pi on Cu (mb)
816  {0.00000E+00, 700.00 , 1000.0 , 1200.0 , 1300.0 , //2
817  1300.0 , 1250.0 , 1250.0 , 1100.0 , 1000.0 ,
818  940.00 , 740.00 , 700.00 , 670.00 , 660.00 ,
819  670.00 , 680.00 , 700.00 , 735.00 , 800.00 ,
820  810.00 , 820.00 , 820.00 , 810.00 , 800.00 ,
821  800.00 , 700.00 , 600.00 , 500.00 , 470.00 ,
822  440.00 , 410.00 , 380.00 , 330.00 , 330.00 ,
823  330.00 , 330.00 , 330.00 , 285.00 , 240.00 ,
824  240.00},
825 
826 // Elastic cross section for Pi on Pb (mb)
827  {0.00000E+00, 1700.0 , 2200.0 , 2200.0 , 1800.0 , //3
828  1300.0 , 1200.0 , 900.00 , 900.00 , 1000.0 ,
829  1100.0 , 1300.0 , 1400.0 , 1420.0 , 1490.0 ,
830  1560.0 , 1580.0 , 1690.0 , 1795.0 , 2000.0 ,
831  2070.0 , 2140.0 , 2050.0 , 2010.0 , 1970.0 ,
832  1880.0 , 1690.0 , 1500.0 , 1420.0 , 1390.0 ,
833  1350.0 , 1360.0 , 1370.0 , 1280.0 , 1290.0 ,
834  1295.0 , 1250.0 , 1200.0 , 1050.0 , 900.00 ,
835  900.00}
836 };
837 
838 //---------------------------------------------------------------------
839 // Inelastic scattering of pion on nucleus
840 //---------------------------------------------------------------------
841 
842 const G4float G4HadronCrossSections::cspiin[3][TSIZE] = {
843 
844 // Inelastic cross section for Pi on Al (mb)
845  {0.00000E+00, 200.00 , 320.00 , 500.00 , 600.00 , //1
846  600.00 , 590.00 , 530.00 , 510.00 , 470.00 ,
847  430.00 , 425.00 , 420.00 , 425.00 , 425.00 ,
848  430.00 , 430.00 , 435.00 , 435.00 , 440.00 ,
849  430.00 , 430.00 , 420.00 , 420.00 , 420.00 ,
850  415.00 , 415.00 , 410.00 , 410.00 , 408.00 ,
851  406.00 , 404.00 , 400.00 , 380.00 , 340.00 ,
852  340.00 , 340.00 , 340.00 , 340.00 , 340.00 ,
853  340.00} ,
854 
855 // Inelastic cross section for Pi on Cu (mb)
856  {0.00000E+00, 400.00 , 800.00 , 1000.0 , 1100.0 , //2
857  1200.0 , 1150.0 , 1050.0 , 1000.0 , 900.00 ,
858  860.00 , 860.00 , 850.00 , 850.00 , 840.00 ,
859  830.00 , 820.00 , 810.00 , 805.00 , 800.00 ,
860  800.00 , 800.00 , 800.00 , 800.00 , 800.00 ,
861  800.00 , 800.00 , 800.00 , 800.00 , 780.00 ,
862  760.00 , 740.00 , 720.00 , 720.00 , 700.00 ,
863  690.00 , 680.00 , 670.00 , 665.00 , 660.00 ,
864  660.00} ,
865 
866 // Inelastic cross section for Pi on Pb (mb)
867  {0.00000E+00, 1000.0 , 1900.0 , 2600.0 , 2900.0 , //3
868  3000.0 , 2800.0 , 2600.0 , 2500.0 , 2300.0 ,
869  2200.0 , 2000.0 , 1900.0 , 1880.0 , 1860.0 ,
870  1840.0 , 1820.0 , 1810.0 , 1805.0 , 1800.0 ,
871  1780.0 , 1760.0 , 1750.0 , 1740.0 , 1730.0 ,
872  1720.0 , 1710.0 , 1700.0 , 1680.0 , 1660.0 ,
873  1650.0 , 1640.0 , 1630.0 , 1620.0 , 1610.0 ,
874  1605.0 , 1600.0 , 1600.0 , 1550.0 , 1500.0 ,
875  1500.0}
876 };
877 
878 //---------------------------------------------------------------------
879 // Elastic scattering of proton on nucleus
880 //---------------------------------------------------------------------
881 
882 const G4float G4HadronCrossSections::cspnel[3][TSIZE] = {
883 
884 // Elastic cross section for P on Al (mb)
885  {2100.0 , 1800.0 , 1500.0 , 1050.0 , 900.00 , //1
886  950.00 , 800.00 , 650.00 , 570.00 , 390.00 ,
887  300.00 , 240.00 , 230.00 , 230.00 , 220.00 ,
888  220.00 , 225.00 , 225.00 , 240.00 , 240.00 ,
889  290.00 , 330.00 , 335.00 , 350.00 , 355.00 ,
890  370.00 , 350.00 , 330.00 , 310.00 , 290.00 ,
891  270.00 , 265.00 , 260.00 , 230.00 , 210.00 ,
892  210.00 , 200.00 , 200.00 , 190.00 , 180.00 ,
893  180.00},
894 
895 // Elastic cross section for P on Cu (mb)
896  {3800.0 , 2900.0 , 1850.0 , 1550.0 , 1450.0 , //2
897  1520.0 , 1460.0 , 1300.0 , 1140.0 , 880.00 ,
898  700.00 , 620.00 , 540.00 , 560.00 , 460.00 ,
899  460.00 , 470.00 , 470.00 , 480.00 , 480.00 ,
900  580.00 , 600.00 , 610.00 , 620.00 , 620.00 ,
901  620.00 , 590.00 , 580.00 , 460.00 , 440.00 ,
902  420.00 , 400.00 , 480.00 , 430.00 , 380.00 ,
903  380.00 , 380.00 , 380.00 , 380.00 , 380.00 ,
904  380.00},
905 
906 // Elastic cross section for P on Pb (mb)
907  {7000.0 , 6000.0 , 4500.0 , 3350.0 , 2700.0 , //3
908  3000.0 , 3550.0 , 3970.0 , 3280.0 , 2490.0 ,
909  2100.0 , 1510.0 , 1440.0 , 1370.0 , 1370.0 ,
910  1370.0 , 1400.0 , 1400.0 , 1420.0 , 1420.0 ,
911  1440.0 , 1460.0 , 1460.0 , 1450.0 , 1450.0 ,
912  1470.0 , 1400.0 , 1400.0 , 1380.0 , 1370.0 ,
913  1360.0 , 1350.0 , 1340.0 , 1330.0 , 1320.0 ,
914  1310.0 , 1305.0 , 1300.0 , 1300.0 , 1300.0 ,
915  1300.0}
916 };
917 
918 //---------------------------------------------------------------------
919 // Inelastic scattering of proton on nucleus
920 //---------------------------------------------------------------------
921 
922 const G4float G4HadronCrossSections::cspnin[3][TSIZE] = {
923 
924 // Inelastic cross section for P on Al (mb)
925  {0.00000E+00, 200.00 , 400.00 , 800.00 , 800.00 , //1
926  550.00 , 500.00 , 450.00 , 430.00 , 410.00 ,
927  400.00 , 390.00 , 380.00 , 370.00 , 370.00 ,
928  370.00 , 365.00 , 365.00 , 360.00 , 360.00 ,
929  360.00 , 360.00 , 365.00 , 370.00 , 375.00 ,
930  380.00 , 400.00 , 410.00 , 420.00 , 430.00 ,
931  440.00 , 440.00 , 440.00 , 440.00 , 440.00 ,
932  440.00 , 440.00 , 440.00 , 440.00 , 440.00 ,
933  440.00} ,
934 
935 // Inelastic cross section for P on Cu (mb)
936  {0.00000E+00, 400.00 , 950.00 , 1050.0 , 1050.0 , //2
937  980.00 , 940.00 , 900.00 , 860.00 , 820.00 ,
938  800.00 , 780.00 , 760.00 , 740.00 , 740.00 ,
939  740.00 , 730.00 , 730.00 , 720.00 , 720.00 ,
940  720.00 , 720.00 , 730.00 , 740.00 , 750.00 ,
941  760.00 , 800.00 , 820.00 , 820.00 , 820.00 ,
942  820.00 , 820.00 , 820.00 , 820.00 , 820.00 ,
943  820.00 , 820.00 , 820.00 , 820.00 , 820.00 ,
944  820.00} ,
945 
946 // Inelastic cross section for P on Pb (mb)
947  {0.00000E+00, 0.00000E+00, 500.00 , 1450.0 , 1700.0 , //3
948  1800.0 , 1750.0 , 1730.0 , 1720.0 , 1710.0 ,
949  1700.0 , 1690.0 , 1660.0 , 1630.0 , 1630.0 ,
950  1630.0 , 1600.0 , 1600.0 , 1580.0 , 1580.0 ,
951  1580.0 , 1580.0 , 1600.0 , 1630.0 , 1650.0 ,
952  1670.0 , 1760.0 , 1800.0 , 1800.0 , 1800.0 ,
953  1800.0 , 1800.0 , 1800.0 , 1800.0 , 1800.0 ,
954  1800.0 , 1800.0 , 1800.0 , 1800.0 , 1800.0 ,
955  1800.0}
956 };
957 
958 //---------------------------------------------------------------------
959 // Lab kinetic energy in GeV
960 //---------------------------------------------------------------------
961 const G4float G4HadronCrossSections::elab[NELAB] = {
962  0.10000E-03, 0.20000E-03, 0.30000E-03, 0.40000E-03, 0.50000E-03,
963  0.70000E-03, 0.10000E-02, 0.20000E-02, 0.30000E-02, 0.40000E-02,
964  0.50000E-02, 0.70000E-02, 0.10000E-01, 0.15000E-01, 0.20000E-01,
965  0.25000E-01, 0.32700E-01
966 };
967 
968 //---------------------------------------------------------------------
969 // Tables for low-energy (< 32.7 MeV) neutrons
970 //---------------------------------------------------------------------
971 
972 // Atomic weight
973 const G4float G4HadronCrossSections::cnlwat[NCNLW] = {
974  1.0000 , 16.000 , 27.000 , 56.000 , 59.000 ,
975  64.000 , 91.000 , 112.00 , 119.00 , 127.00 ,
976  137.00 , 181.00 , 207.00 , 209.00 , 238.00
977 };
978 // Elastic cross section
979 const G4float G4HadronCrossSections::cnlwel[NCNLW][NELAB] = {
980  {6000.0 , 5500.0 , 5200.0 , 4900.0 , 4800.0 , //1
981  4400.0 , 4000.0 , 2900.0 , 2200.0 , 1800.0 ,
982  1400.0 , 1100.0 , 900.00 , 700.00 , 600.00 ,
983  560.00 , 520.00} ,
984  {5400.0 , 5050.0 , 4800.0 , 4600.0 , 4399.0 , //2
985  4090.0 , 3700.0 , 2600.0 , 1950.0 , 1600.0 ,
986  1300.0 , 900.00 , 700.00 , 800.00 , 1050.0 ,
987  1250.0 , 1320.0} ,
988  {5500.0 , 5150.0 , 4900.0 , 4699.0 , 4490.0 , //3
989  4150.0 , 3750.0 , 2790.0 , 2100.0 , 1650.0 ,
990  1300.0 , 950.00 , 800.00 , 860.00 , 1000.0 ,
991  1090.0 , 1080.0} ,
992  {5499.0 , 4970.0 , 4450.0 , 4080.0 , 3750.0 , //4
993  3380.0 , 2900.0 , 2400.0 , 2380.0 , 2350.0 ,
994  2300.0 , 2100.0 , 1720.0 , 1370.0 , 1200.0 ,
995  1060.0 , 870.00} ,
996  {5399.0 , 4710.0 , 4180.0 , 3760.0 , 3460.0 , //5
997  3150.0 , 2730.0 , 2270.0 , 1850.0 , 1850.0 ,
998  2130.0 , 2330.0 , 2120.0 , 1640.0 , 1310.0 ,
999  1100.0 , 1050.0} ,
1000  {5099.0 , 4405.0 , 3825.0 , 3455.0 , 3125.0 , //6
1001  2695.0 , 2350.0 , 1850.0 , 1580.0 , 1820.0 ,
1002  2050.0 , 2210.0 , 2000.0 , 1590.0 , 1310.0 ,
1003  1120.0 , 1040.0} ,
1004  {6290.0 , 5960.0 , 5640.0 , 5370.0 , 5150.0 , //7
1005  4800.0 , 4250.0 , 3150.0 , 2470.0 , 2100.0 ,
1006  2230.0 , 2420.0 , 2450.0 , 2050.0 , 1760.0 ,
1007  1550.0 , 1330.0} ,
1008  {6885.0 , 6650.0 , 6350.0 , 6150.0 , 6000.0 , //8
1009  5700.0 , 5360.0 , 4250.0 , 2800.0 , 1870.0 ,
1010  1810.0 , 1820.0 , 2170.0 , 2450.0 , 2150.0 ,
1011  1700.0 , 1390.0} ,
1012  {6600.0 , 6500.0 , 6400.0 , 6249.0 , 6190.0 , //9
1013  5950.0 , 5520.0 , 4250.0 , 2750.0 , 1900.0 ,
1014  1850.0 , 1950.0 , 2340.0 , 2800.0 , 2540.0 ,
1015  2100.0 , 1760.0} ,
1016  {7400.0 , 7200.0 , 6999.0 , 6840.0 , 6655.0 , //10
1017  6320.0 , 5820.0 , 4400.0 , 2850.0 , 2000.0 ,
1018  1800.0 , 1800.0 , 2150.0 , 2600.0 , 2350.0 ,
1019  1950.0 , 2100.0} ,
1020  {7900.0 , 7700.0 , 7499.0 , 7390.0 , 7202.0 , //11
1021  6810.0 , 6360.0 , 4920.0 , 3450.0 , 2600.0 ,
1022  2200.0 , 1950.0 , 2300.0 , 2800.0 , 2650.0 ,
1023  2250.0 , 2050.0} ,
1024  {7900.0 , 7750.0 , 7699.0 , 7590.0 , 7450.0 , //12
1025  7200.0 , 6850.0 , 5650.0 , 4400.0 , 3700.0 ,
1026  3400.0 , 2800.0 , 2700.0 , 3100.0 , 3250.0 ,
1027  3100.0 , 2750.0} ,
1028  {6100.0 , 5950.0 , 5750.0 , 5599.0 , 5440.0 , //13
1029  5200.0 , 4800.0 , 4300.0 , 5800.0 , 5750.0 ,
1030  4800.0 , 3420.0 , 2650.0 , 3200.0 , 3650.0 ,
1031  3500.0 , 2980.0} ,
1032  {6100.0 , 5950.0 , 5750.0 , 5599.0 , 5440.0 , //14
1033  5200.0 , 4800.0 , 4300.0 , 5800.0 , 5750.0 ,
1034  4800.0 , 3420.0 , 2650.0 , 3200.0 , 3650.0 ,
1035  3500.0 , 2980.0} ,
1036  {6600.0 , 6350.0 , 6100.0 , 5899.0 , 5690.0 , //15
1037  5300.0 , 4850.0 , 4450.0 , 5650.0 , 5700.0 ,
1038  4950.0 , 3850.0 , 3050.0 , 3050.0 , 3460.0 ,
1039  3650.0 , 3340.0}
1040 };
1041 // Inelastic cross section
1042 const G4float G4HadronCrossSections::cnlwin[NCNLW][NELAB] = {
1043  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //1
1044  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
1045  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
1046  0.00000E+00, 0.00000E+00},
1047  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 1.0000 , //2
1048  10.000 , 50.000 , 100.00 , 200.00 , 300.00 ,
1049  400.00 , 600.00 , 700.00 , 750.00 , 700.00 ,
1050  700.00 , 680.00} ,
1051  {0.00000E+00, 0.00000E+00, 0.00000E+00, 1.0000 , 10.000 , //3
1052  50.000 , 100.00 , 260.00 , 450.00 , 600.00 ,
1053  700.00 , 800.00 , 900.00 , 940.00 , 900.00 ,
1054  860.00 , 820.00} ,
1055  {1.0000 , 80.000 , 200.00 , 320.00 , 400.00 , //4
1056  520.00 , 700.00 , 1000.0 , 1120.0 , 1200.0 ,
1057  1200.0 , 1200.0 , 1180.0 , 1130.0 , 1100.0 ,
1058  1090.0 , 1080.0} ,
1059  {1.0000 , 90.000 , 220.00 , 340.00 , 420.00 , //5
1060  550.00 , 720.00 , 1080.0 , 1300.0 , 1400.0 ,
1061  1420.0 , 1420.0 , 1380.0 , 1260.0 , 1190.0 ,
1062  1150.0 , 1100.0} ,
1063  {1.0000 , 95.000 , 225.00 , 345.00 , 425.00 , //6
1064  555.00 , 750.00 , 1150.0 , 1500.0 , 1680.0 ,
1065  1700.0 , 1690.0 , 1550.0 , 1360.0 , 1240.0 ,
1066  1180.0 , 1120.0} ,
1067  {10.000 , 140.00 , 260.00 , 380.00 , 450.00 , //7
1068  600.00 , 750.00 , 1200.0 , 1580.0 , 1800.0 ,
1069  1820.0 , 1830.0 , 1800.0 , 1750.0 , 1690.0 ,
1070  1650.0 , 1620.0} ,
1071  {15.000 , 150.00 , 300.00 , 400.00 , 500.00 , //8
1072  650.00 , 840.00 , 1500.0 , 2100.0 , 2130.0 ,
1073  2140.0 , 2130.0 , 2080.0 , 2000.0 , 1950.0 ,
1074  1900.0 , 1860.0} ,
1075  {0.00000E+00, 0.00000E+00, 0.00000E+00, 1.0000 , 10.000 , //9
1076  150.00 , 380.00 , 1000.0 , 1650.0 , 2100.0 ,
1077  2100.0 , 2100.0 , 2060.0 , 1950.0 , 1860.0 ,
1078  1800.0 , 1740.0} ,
1079  {0.00000E+00, 0.00000E+00, 1.0000 , 10.000 , 45.000 , //10
1080  180.00 , 380.00 , 1050.0 , 1900.0 , 2300.0 ,
1081  2300.0 , 2200.0 , 2150.0 , 2000.0 , 1900.0 ,
1082  1800.0 , 1750.0} ,
1083  {0.00000E+00, 0.00000E+00, 1.0000 , 10.000 , 48.000 , //11
1084  190.00 , 390.00 , 1080.0 , 2000.0 , 2400.0 ,
1085  2400.0 , 2300.0 , 2200.0 , 2100.0 , 1950.0 ,
1086  1850.0 , 1800.0} ,
1087  {0.00000E+00, 0.00000E+00, 1.0000 , 10.000 , 50.000 , //12
1088  200.00 , 400.00 , 1100.0 , 2100.0 , 2500.0 ,
1089  2500.0 , 2450.0 , 2300.0 , 2100.0 , 2000.0 ,
1090  1900.0 , 1850.0} ,
1091  {0.00000E+00, 0.00000E+00, 0.00000E+00, 1.0000 , 10.000 , //13
1092  100.00 , 350.00 , 900.00 , 1400.0 , 2000.0 ,
1093  2300.0 , 2380.0 , 2400.0 , 2300.0 , 2250.0 ,
1094  2200.0 , 2120.0} ,
1095  {0.00000E+00, 0.00000E+00, 0.00000E+00, 1.0000 , 10.000 , //14
1096  100.00 , 350.00 , 900.00 , 1400.0 , 2000.0 ,
1097  2300.0 , 2380.0 , 2400.0 , 2300.0 , 2250.0 ,
1098  2200.0 , 2120.0} ,
1099  {0.00000E+00, 0.00000E+00, 0.00000E+00, 1.0000 , 10.000 , //15
1100  100.00 , 400.00 , 950.00 , 1600.0 , 2200.0 ,
1101  2550.0 , 2750.0 , 2700.0 , 2600.0 , 2540.0 ,
1102  2450.0 , 2360.0}
1103 };
1104 // Capture cross section indexed by Z
1105 const G4float G4HadronCrossSections::cscap[100] = {
1106  6.0000 , 5.7000 , 5.5000 , 5.3000 , 5.2000 ,
1107  5.1000 , 5.0000 , 4.9000 , 4.8000 , 4.8000 ,
1108  4.8000 , 4.8000 , 4.8000 , 4.8000 , 4.8000 ,
1109  4.8000 , 4.9000 , 5.0000 , 5.2000 , 5.5000 ,
1110  6.0000 , 6.7000 , 7.5000 , 8.5000 , 10.000 ,
1111  12.000 , 14.500 , 19.000 , 26.500 , 40.000 ,
1112  75.000 , 120.00 , 180.00 , 260.00 , 360.00 ,
1113  330.00 , 60.000 , 7.0000 , 9.5000 , 20.000 ,
1114  75.000 , 140.00 , 250.00 , 360.00 , 480.00 ,
1115  580.00 , 590.00 , 500.00 , 300.00 , 100.00 ,
1116  200.00 , 300.00 , 400.00 , 470.00 , 500.00 ,
1117  430.00 , 100.00 , 20.000 , 22.000 , 40.000 ,
1118  560.00 , 950.00 , 1000.0 , 1000.0 , 1000.0 ,
1119  990.00 , 920.00 , 860.00 , 790.00 , 740.00 ,
1120  650.00 , 600.00 , 540.00 , 470.00 , 440.00 ,
1121  390.00 , 360.00 , 340.00 , 320.00 , 310.00 ,
1122  280.00 , 2.0000 , 2.5000 , 6.0000 , 13.000 ,
1123  38.000 , 65.000 , 140.00 , 280.00 , 300.00 ,
1124  430.00 , 580.00 , 650.00 , 800.00 , 920.00 ,
1125  1100.0 , 1250.0 , 1400.0 , 1550.0 , 1700.0
1126 };
1127 
1128 //---------------------------------------------------------------------
1129 // Tables for fission cross sections
1130 //---------------------------------------------------------------------
1131 
1132 // Lab kinetic energy in GeV
1133 const G4float G4HadronCrossSections::ekfiss[NFISS] = {
1134  0.10000E-03, 0.20000E-03, 0.30000E-03, 0.50000E-03, 0.70000E-03,
1135  0.10000E-02, 0.15000E-02, 0.20000E-02, 0.30000E-02, 0.50000E-02,
1136  0.70000E-02, 0.10000E-01, 0.15000E-01, 0.20000E-01, 0.50000E-01,
1137  0.10000 , 0.20000 , 0.30000 , 0.40000 , 0.50000 ,
1138  1000.0
1139 };
1140 // Fission cross sections
1141 const G4float G4HadronCrossSections::csfiss[4][NFISS] = {
1142  {2600.0 , 2300.0 , 2300.0 , 2100.0 , 2000.0 , //1
1143  1950.0 , 1930.0 , 1900.0 , 1800.0 , 1600.0 ,
1144  2100.0 , 2300.0 , 0.00000E+00, 0.00000E+00, 0.00000E+00,
1145  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
1146  0.00000E+00},
1147  {1850.0 , 1400.0 , 1300.0 , 1150.0 , 1100.0 , //2
1148  1200.0 , 1250.0 , 1300.0 , 1250.0 , 1150.0 ,
1149  1600.0 , 1900.0 , 0.00000E+00, 0.00000E+00, 0.00000E+00,
1150  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
1151  0.00000E+00},
1152  {1700.0 , 1650.0 , 1650.0 , 1700.0 , 1700.0 , //3
1153  1800.0 , 1900.0 , 2000.0 , 1950.0 , 1800.0 ,
1154  2150.0 , 2450.0 , 0.00000E+00, 0.00000E+00, 0.00000E+00,
1155  0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
1156  0.00000E+00},
1157  {0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, //4
1158  0.00000E+00, 250.00 , 550.00 , 550.00 , 550.00 ,
1159  550.00 , 550.00 , 1000.0 , 1400.0 , 1600.0 ,
1160  1500.0 , 1400.0 , 1300.0 , 1200.0 , 1100.0 ,
1161  1000.0}
1162 };
1163 
1164 const G4float G4HadronCrossSections::alpha[NPARTS] = {
1165  0.7,0.7,0.7,0.7,0.7,0.7,
1166  0.75,0.75,0.75,
1167  0.76,0.76,0.76,0.76,
1168  0.685,0.63,0.685,0.63,0.685,0.63,
1169  0.685,0.685,0.685,0.63,0.63,0.63,0.685,0.685,0.63,0.63,
1170  0.7,0.7,0.7,0.685,0.63,0.7
1171 };
1172 
1173 const G4float G4HadronCrossSections::alphac[TSIZE] = {
1174  1.2,1.2,1.2,1.15,0.90,0.91,0.98,1.06,1.10,1.11,
1175  1.10,1.08,1.05,1.01,0.985,0.962,0.945,0.932,
1176  0.925,0.920,0.920,0.921,0.922,0.923,0.928,0.931,
1177  0.940,0.945,0.950,0.955,0.958,0.962,0.965,0.976,
1178  0.982,0.988,0.992,1.010,1.020,1.030,1.040
1179 };
1180 
1181 const G4float G4HadronCrossSections::partel[NPARTS] = {
1182  0.,0.,0.,0.,0.,0.,
1183  1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,
1184  1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,
1185  1.,1.,1.,1.,1.,1.,1.,1.,1.
1186 };
1187 
1188 const G4float G4HadronCrossSections::partin[NPARTS] = {
1189  0.,0.,0.,0.,0.,0.,
1190  1.00,0.00,1.05,1.20,1.35,1.30,1.20,1.00,1.30,
1191  1.00,1.30,1.00,1.30,1.00,1.00,1.00,1.30,1.30,1.30,
1192  1.00,1.00,1.30,1.30,1.00,1.,1.,1.,1.3,1.
1193 };
1194 
1195 // Enabling flags for corrections for compounds
1196 const G4int G4HadronCrossSections::icorr[NPARTS] = {
1197  1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1198  0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,0,0
1199 };
1200 
1201 // Enabling flags for interaction to occur
1202 const G4int G4HadronCrossSections::intrc[NPARTS] = {
1203  0,0,0,0,0,0,
1204  1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,2,2,0,
1205  1,1,1,1,1,1,1,1,1,1,0
1206 };
1207 
1208 const G4float G4HadronCrossSections::csa[4] = {1., 27.00, 63.54, 207.19};
1209 
1210 const G4int G4HadronCrossSections::ipart2[7] = {9, 8, 7, 11, 10, 13, 12};
1211 
1212 //const G4bool G4HadronCrossSections::correctInelasticNearZero = false;
1213 
1215  : prevParticleDefinition(0),
1216 // prevElement(0),
1217  prevZZ(0), prevAA(0),
1218  prevKineticEnergy(DBL_MAX), lastEkx(0.), lastEkxPower(0.), verboseLevel(0)
1219 {
1220  siginelastic = sigelastic = 0.0;
1221  correctInelasticNearZero = false;
1222  g4pow = G4Pow::GetInstance();
1223 }
1224 
1226 {}
1227 
1229 {
1230  if (!theInstance) {
1231  static G4ThreadLocal G4HadronCrossSections *xsection_G4MT_TLS_ = 0 ; if (!xsection_G4MT_TLS_) xsection_G4MT_TLS_ = new G4HadronCrossSections ; G4HadronCrossSections &xsection = *xsection_G4MT_TLS_;
1232  theInstance = &xsection;
1233  }
1234  return theInstance;
1235 }
1236 
1238 {
1239  return (GetParticleCode(aParticle) > 0);
1240 }
1241 
1242 G4double
1244  G4int ZZ, G4int AA)
1245 {
1246  if (particle->GetDefinition() != prevParticleDefinition ||
1247  particle->GetKineticEnergy() != prevKineticEnergy ||
1248  ZZ != prevZZ || AA != prevAA)
1249  { CalcScatteringCrossSections(particle, ZZ, AA); }
1250  if (verboseLevel > 1) {
1251  G4cout << " x-section inelastic(mb)= "
1252  << siginelastic/millibarn << G4endl;
1253  }
1254 
1255  return siginelastic;
1256 }
1257 
1258 
1259 G4double
1261  G4int ZZ, G4int AA)
1262 {
1263  if (particle->GetDefinition() != prevParticleDefinition ||
1264  particle->GetKineticEnergy() != prevKineticEnergy ||
1265  ZZ != prevZZ || AA != prevAA)
1266  { CalcScatteringCrossSections(particle, ZZ, AA); }
1267 
1268  if (verboseLevel > 1) {
1269  G4cout << " x-section elastic(mb)= "
1270  << sigelastic/millibarn << G4endl;
1271  }
1272  return sigelastic;
1273 }
1274 
1275 
1276 // Method to calculate cross sections for all processes.
1277 // To facilitate comparison with the original Fortran source, and because
1278 // of the interdependence of the elastic and inelastic cross section
1279 // calculations, this has not been split into separate processes.
1280 
1281 void
1282 G4HadronCrossSections::CalcScatteringCrossSections(
1283  const G4DynamicParticle* aParticle,
1284  G4int ZZ, G4int AA)
1285 {
1286  G4double sigel, sigin, sigtot;
1287  G4double xsecel, xsecin=0;
1288  xsecel = 0;
1289  G4double dx, dy, rc, rca, b;
1290  G4double crel, crin;
1291  G4double xspiel, xspiin;
1292 
1293  G4int ipart = GetParticleCode(aParticle);
1294  prevAA = AA;
1295  prevZZ = ZZ;
1296  prevParticleDefinition = aParticle->GetDefinition();
1297  prevKineticEnergy = aParticle->GetKineticEnergy();
1298 
1299  if (verboseLevel > 1) {
1300  G4cout << "G4HadronCrossSections::ScatteringCrossSections: "
1301  << aParticle->GetDefinition()->GetParticleName()
1302  << " E(MeV)= " << aParticle->GetKineticEnergy()/MeV
1303  << " Z= " << ZZ << " A= " << AA << G4endl;
1304  }
1305 
1306  // Ions...
1307 
1308  if (ipart >= 30 && ipart <= 32) {
1309 
1310  G4double apart=0;
1311  if (ipart == 30) apart = g4pow->Z13(2);
1312  else if (ipart == 31) apart = g4pow->Z13(3);
1313  else if (ipart == 32) apart = g4pow->Z13(4);
1314 
1315  G4double term = apart + g4pow->Z13(AA);
1316  sigin = 49.*term*term;
1317  // Convert cross section from mb to default units
1318  siginelastic = sigin*millibarn;
1319  if(prevKineticEnergy < 6*MeV) siginelastic = 0;
1320  sigelastic = 0.;
1321  return;
1322  }
1323 
1324  G4double ek = prevKineticEnergy/GeV;
1325 
1326 // Low energy neutrons...
1327 
1328  if (ipart == 16 && ek <= 0.0327) {
1329 
1330  // G4int je2 = NELAB;
1331  // for (G4int j = 2; j <= NELAB; j++) {
1332  // if (ek < elab[j - 1]) {
1333  // je2 = j;
1334  // break;
1335  // }
1336  // }
1337  // G4int je1 = je2 -1;
1338  // je1 = je1 - 1; // For array indexing
1339  // je2 = je2 - 1; // For array indexing
1340 
1341  G4int je1 = 0;
1342  G4int je2 = NELAB - 1;
1343  do {
1344  G4int midBin = (je1 + je2)/2;
1345  if (ek < elab[midBin])
1346  je2 = midBin;
1347  else
1348  je1 = midBin;
1349  } while (je2 - je1 > 1);
1350 
1351  G4double delab = elab[je2] - elab[je1];
1352 
1353  // G4int ja2 = NCNLW;
1354  // for (G4int jj = 2; jj <= NCNLW; jj++) {
1355  // if (a < cnlwat[jj - 1]) {
1356  // ja2 = jj;
1357  // break;
1358  // }
1359  // }
1360  // G4int ja1 = ja2 - 1;
1361  // ja1 = ja1 - 1; // For array indexing
1362  // ja2 = ja2 - 1; // For array indexing
1363 
1364  G4int ja1 = 0;
1365  G4int ja2 = NCNLW - 1;
1366  do {
1367  G4int midBin = (ja1 + ja2)/2;
1368  if (AA < cnlwat[midBin])
1369  ja2 = midBin;
1370  else
1371  ja1 = midBin;
1372  } while (ja2 - ja1 > 1);
1373 
1374  G4double dnlwat = cnlwat[ja2] - cnlwat[ja1];
1375 
1376 // Elastic cross section:
1377  // E interpolation or extrapolation at JA1
1378  dy = cnlwel[ja1][je2] - cnlwel[ja1][je1];
1379  G4double rce = dy/delab;
1380  // A interpolation or extrapolation at JE1
1381  dy = cnlwel[ja2][je1] - cnlwel[ja1][je1];
1382  rca = dy/dnlwat;
1383  b = cnlwel[ja1][je1] - rce*elab[je1] - rca*cnlwat[ja1];
1384  sigelastic = rce*ek + rca*AA + b;
1385 // Inelastic cross section:
1386  // E interpolation or extrapolation at JA1
1387  dy = cnlwin[ja1][je2] - cnlwin[ja1][je1];
1388  rce = dy/delab;
1389  // A interpolation or extrapolation at JE1
1390  dy = cnlwin[ja2][je1] - cnlwin[ja1][je1];
1391  rca = dy/dnlwat;
1392  b = cnlwin[ja1][je1] - rce*elab[je1] - rca*cnlwat[ja1];
1393  siginelastic = rce*ek + rca*AA + b;
1394  // Convert cross sections from mb to default units
1395  sigelastic = sigelastic*millibarn;
1396  siginelastic = siginelastic*millibarn;
1397  return;
1398  }
1399 
1400 // Remaining particles...
1401 
1402 // Get momentum bin
1403  G4double p = aParticle->GetTotalMomentum()/GeV;
1404 
1405  // G4int j = TSIZE - 1;
1406  // for (G4int i = 2; i <= TSIZE; i++) {
1407  // if (p < plab[i]) {
1408  // j = i - 1;
1409  // break;
1410  // }
1411  // }
1412  // j = j - 1; // For array indexing
1413 
1414  G4int je1 = 0;
1415  G4int je2 = TSIZE - 1;
1416  do {
1417  G4int midBin = (je1 + je2)/2;
1418  if (p < plab[midBin])
1419  je2 = midBin;
1420  else
1421  je1 = midBin;
1422  } while (je2 - je1 > 1);
1423 
1424  G4int ipart1 = ipart - 1; // For array indexing
1425 
1426 // Get cross sections for scattering on free protons
1427  dx = plab[je2] - plab[je1];
1428 // Elastic cross section
1429  dy = csel[ipart1][je2] - csel[ipart1][je1];
1430  rc = dy/dx;
1431  b = csel[ipart1][je1] - rc*plab[je1];
1432  sigel = rc*p + b;
1433 // Inelastic cross section
1434  dy = csin[ipart1][je2] - csin[ipart1][je1];
1435  rc = dy/dx;
1436  b = csin[ipart1][je1] - rc*plab[je1];
1437  sigin = rc*p + b;
1438  if (verboseLevel > 1) {
1439  G4cout << "sigel " << sigel << G4endl;
1440  G4cout << "sigin " << sigin << G4endl;
1441  }
1442  G4double alph = alpha[ipart1];
1443  if (ipart < 14) {
1444  dy = alphac[je2] - alphac[je1];
1445  rc = dy/dx;
1446  b = alphac[je1] - rc*plab[je1];
1447  G4double corfac = rc*p + b;
1448  alph = alph*corfac;
1449  G4int ipart3 = ipart2[ipart - 7];
1450  ipart3 = ipart3 - 1; // For array indexing
1451  // Elastic cross section
1452  dy = csel[ipart3][je2] - csel[ipart3][je1];
1453  rc = dy/dx;
1454  b = csel[ipart3][je1] - rc*plab[je1];
1455  xsecel = rc*p + b;
1456  // Inelastic cross section
1457  dy = csin[ipart3][je2] - csin[ipart3][je1];
1458  rc = dy/dx;
1459  b = csin[ipart3][je1] - rc*plab[je1];
1460  xsecin = rc*p + b;
1461  }
1462 
1463 // A-dependence from parameterization...
1464 
1465  if (AA >= 2) {
1466 
1467  crel = 1.;
1468  crin = 1.;
1469 
1470  G4int i = 2;
1471  if (AA < 50) i = 1;
1472  else if (AA > 100) i = 3;
1473 
1474 // Protons and neutrons
1475  if (ipart == 14 || ipart == 16) {
1476  dy = cspnel[i - 1][je2] - cspnel[i - 1][je1];
1477  rc = dy/dx;
1478  b = cspnel[i - 1][je1] - rc*plab[je1];
1479  xsecel = rc*p + b;
1480  dy = cspnin[i - 1][je2] - cspnin[i - 1][je1];
1481  rc = dy/dx;
1482  b = cspnin[i - 1][je1] - rc*plab[je1];
1483  xsecin = rc*p + b;
1484  // The following is a first-order correction to Gheisha (GHESIG)
1485  // behaviour, where for the lighter elements the inelastic cross
1486  // section is not realistic for particles in the first momentum
1487  // bin. In the first momentum bin, it better to interpolate
1488  // in K.E. Subject to further improvements.
1489  if (correctInelasticNearZero && je1 == 0 && i <= 3) {
1490  G4double m0 = aParticle->GetMass()/GeV;
1491  G4double T = std::sqrt(m0*m0 + p*p) - m0;
1492  dx = std::sqrt(m0*m0 + plab[1]*plab[1]) - m0;
1493  rc = dy/dx;
1494  xsecin = rc*T + b;
1495  }
1496 
1497  if (sigel >= 0.001)
1498  crel = xsecel/(0.36*sigel*std::pow(G4double(csa[i]), 1.17));
1499  sigtot = sigel + sigin;
1500  if (sigtot >= 0.001)
1501  crin = xsecin/(sigtot*std::pow(G4double(csa[i]), alph));
1502  }
1503 
1504  else if (ipart < 15) {
1505 // Calculate correction factors (crel, crin) from values
1506 // on Al, Cu, Pb. Note that data is only available for pions and protons.
1507  G4double wgch = 0.5;
1508  if (AA < 20) { wgch = 0.5 + 0.5*std::exp(-G4double(AA - 1)); }
1509  sigel = wgch*sigel + (1. - wgch)*xsecel;
1510  sigin = wgch*sigin + (1. - wgch)*xsecin;
1511 
1512 // This section not for kaons
1513  if (ipart < 10) {
1514  dy = cspiel[i - 1][je2] - cspiel[i - 1][je1];
1515  rc = dy/dx;
1516  b = cspiel[i - 1][je1] - rc*plab[je1];
1517  xspiel = rc*p + b;
1518  dy = cspiin[i - 1][je2] - cspiin[i - 1][je1];
1519  rc = dy/dx;
1520  b = cspiin[i - 1][je1] - rc*plab[je1];
1521  xspiin = rc*p + b;
1522  if (verboseLevel > 1) {
1523  G4cout << "xspiel " << xspiel << G4endl;
1524  G4cout << "xspiin " << xspiin << G4endl;
1525  }
1526  if (sigel >= 0.001)
1527  crel = xspiel/(0.36*sigel*std::pow(G4double(csa[i]),1.17));
1528  sigtot = sigel + sigin;
1529  if (sigtot >= 0.001)
1530  crin = xspiin/(sigtot*std::pow(G4double(csa[i]), alph));
1531  }
1532  }
1533 
1534 // Apply correction factors
1535  sigin = crin*(sigin + sigel)*g4pow->powZ(AA, alph);
1536  sigel = crel*0.36*sigel*g4pow->powZ(AA, 1.17);
1537  sigel = sigel*partel[ipart1];
1538  sigin = sigin*partin[ipart1];
1539  }
1540 
1541 // Correction factor for high (p > 100 GeV/c) energies:
1542  G4double corh = 1.;
1543  if (p > 100.) corh = 0.1085736156*std::log(p) + 0.5;
1544 
1545  sigel = corh*sigel;
1546  sigin = corh*sigin;
1547  // Convert cross section from mb to default units
1548  sigelastic = sigel*millibarn;
1549  siginelastic = sigin*millibarn;
1550 
1551  return;
1552 }
1553 
1554 
1555 G4double
1557  G4int ZZ)
1558 {
1559  if (GetParticleCode(aParticle) != 16) return 0.;
1560  G4double ek = aParticle->GetKineticEnergy()/GeV;
1561  if (ek > 0.0327) { return 0.; }
1562 
1563  G4double ekx = std::max(ek, 1.e-9);
1564  if (ekx != lastEkx) {
1565  lastEkx = ekx;
1566  lastEkxPower = std::pow(ekx*1.e6, 0.577);
1567  }
1568 
1569  G4int izno = ZZ;
1570  if (izno > 100) izno = 100; // Not in GHESIG
1571  izno = izno - 1; // For array indexing
1572  G4double sigcap = 11.12*cscap[izno]/lastEkxPower;
1573 
1574  // Convert cross section from mb to default units
1575  sigcap = sigcap*millibarn;
1576  return sigcap;
1577 }
1578 
1579 
1580 G4double
1582  G4int ZZ, G4int AA)
1583 {
1584  if (AA < 230) return 0;
1585 
1586  G4double ek = aParticle->GetKineticEnergy()/GeV;
1587 
1588  G4int ie1 = 0;
1589  G4int ie2 = NFISS - 1;
1590  do {
1591  G4int midBin = (ie1 + ie2)/2;
1592  if (ek < ekfiss[midBin])
1593  ie2 = midBin;
1594  else
1595  ie1 = midBin;
1596  } while (ie2 - ie1 > 1);
1597  G4int i = ie2;
1598  if (ek < ekfiss[0]) i = 0;
1599 
1600  G4int j = 4;
1601  if (ek <= 0.01) {
1602  if (ZZ == 92 && AA == 233) j = 1;
1603  else if (ZZ == 92 && AA == 235) j = 2;
1604  else if (ZZ == 94 && AA == 239) j = 3;
1605  }
1606 
1607  G4double z43ba;
1608  if (j == 4) {
1609  z43ba = ZZ*g4pow->Z13(ZZ)/G4double(AA);
1610  z43ba = std::max(-67. + 38.7*z43ba, 0.);
1611  } else {
1612  z43ba = 1.;
1613  }
1614  j = j - 1; // For array indexing
1615 
1616  G4double sigfiss = csfiss[j][i]*z43ba;
1617  sigfiss = sigfiss*millibarn;
1618  return sigfiss;
1619 }
1620 
1621 
1622 G4int
1623 G4HadronCrossSections::GetParticleCode(const G4DynamicParticle* aParticle)
1624 {
1625  // Returns GHEISHA code for particle
1626  // Case entries ordered by estimated frequency
1627 
1628  G4int ipart = 0;
1629 
1630  switch( aParticle->GetPDGcode()) {
1631  case 111:
1632  ipart = 8; // pi0
1633  break;
1634  case 211:
1635  ipart = 7; // pi+
1636  break;
1637  case -211:
1638  ipart = 9; // pi-
1639  break;
1640  case 2112:
1641  ipart = 16; // neutron
1642  break;
1643  case 2212:
1644  ipart = 14; // proton
1645  break;
1646  case 321:
1647  ipart = 10; // K+
1648  break;
1649  case -321:
1650  ipart = 13; // K-
1651  break;
1652  case 130:
1653  ipart = 12; // K0L
1654  break;
1655  case 310:
1656  ipart = 11; // K0S
1657  break;
1658  case 1000010020:
1659  ipart = 30; // deuteron
1660  break;
1661  case 1000010030:
1662  ipart = 31; // triton
1663  break;
1664  case 1000020040:
1665  ipart = 32; // alpha
1666  break;
1667  case 3122:
1668  ipart = 18; // lambda
1669  break;
1670  case -2112:
1671  ipart = 17; // anti-neutron
1672  break;
1673  case -2212:
1674  ipart = 15; // anti-proton
1675  break;
1676  case -3122:
1677  ipart = 19; // anti-lambda
1678  break;
1679  case 3222:
1680  ipart = 20; // sigma+
1681  break;
1682  case 3212:
1683  ipart = 21; // sigma0
1684  break;
1685  case 3112:
1686  ipart = 22; // sigma-
1687  break;
1688  case 3322:
1689  ipart = 26; // xi0
1690  break;
1691  case 3312:
1692  ipart = 27; // xi-
1693  break;
1694  case 3334:
1695  ipart = 33; // omega-
1696  break;
1697  case -3222:
1698  ipart = 23; // anti-sigma+
1699  break;
1700  case -3212:
1701  ipart = 24; // anti-sigma0
1702  break;
1703  case -3112:
1704  ipart = 25; // anti-sigma-
1705  break;
1706  case -3322:
1707  ipart = 28; // anti-xi0
1708  break;
1709  case -3312:
1710  ipart = 29; // anti-xi-
1711  break;
1712  case -3334:
1713  ipart = 34; // anti-omega-
1714  break;
1715  /*
1716  default:
1717  throw G4HadronicException(__FILE__, __LINE__,
1718  "G4HadronCrossSections::GetParticleCode: unsupported particle "
1719  + aParticle->GetDefinition()->GetParticleName());
1720  return 0;
1721  */
1722  }
1723 
1724  return ipart;
1725 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:53
G4double GetElasticCrossSection(const G4DynamicParticle *, G4int, G4int)
G4double GetKineticEnergy() const
G4int GetPDGcode() const
const char * p
Definition: xmltok.h:285
float G4float
Definition: G4Types.hh:77
G4double GetInelasticCrossSection(const G4DynamicParticle *, G4int, G4int)
G4ParticleDefinition * GetDefinition() const
#define G4ThreadLocal
Definition: tls.hh:52
int G4int
Definition: G4Types.hh:78
int millibarn
Definition: hepunit.py:40
const G4String & GetParticleName() const
G4double GetCaptureCrossSection(const G4DynamicParticle *, G4int)
G4double GetTotalMomentum() const
G4GLOB_DLL std::ostream G4cout
G4double Z13(G4int Z) const
Definition: G4Pow.hh:129
G4double GetFissionCrossSection(const G4DynamicParticle *, G4int, G4int)
G4double GetMass() const
bool G4bool
Definition: G4Types.hh:79
static G4HadronCrossSections * Instance()
T max(const T t1, const T t2)
brief Return the largest of the two arguments
#define G4endl
Definition: G4ios.hh:61
G4bool IsApplicable(const G4DynamicParticle *aParticle)
G4double powZ(G4int Z, G4double y) const
Definition: G4Pow.hh:258
double G4double
Definition: G4Types.hh:76
#define DBL_MAX
Definition: templates.hh:83