Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4UPiNuclearCrossSection.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//
27// Calculation of the total, elastic and inelastic cross-sections
28// based on Barashenkov parametrisations of pion data
29//
30// 16.08.06 V.Ivanchenko - first implementation on base of
31// J.P Wellisch class G4PiNuclearCrossSection
32// 22.01.07 V.Ivanchenko - add cross section interfaces with Z and A
33// 05.03.07 V.Ivanchenko - fix weight for interpolation
34// 13.03.07 V.Ivanchenko - cleanup at low energies
35// 11.09.09 V.Ivanchenko - fixed bug in interpolation
36//
37
39#include "G4SystemOfUnits.hh"
41#include "G4PionMinus.hh"
42#include "G4PionPlus.hh"
43#include "G4PhysicsTable.hh"
44#include "G4NistManager.hh"
45
46G4int G4UPiNuclearCrossSection::theZ[NZ] =
47{2,4,6,7,8,11,13,20,26,29,42,48,50,74,82,92};
48G4int G4UPiNuclearCrossSection::idxZ[93] = {0};
49G4double G4UPiNuclearCrossSection::theA[NZ] = {0.0};
50G4double G4UPiNuclearCrossSection::APower[93] = {0.0};
51
52G4PhysicsTable* G4UPiNuclearCrossSection::piPlusElastic = nullptr;
53G4PhysicsTable* G4UPiNuclearCrossSection::piPlusInelastic = nullptr;
54G4PhysicsTable* G4UPiNuclearCrossSection::piMinusElastic = nullptr;
55G4PhysicsTable* G4UPiNuclearCrossSection::piMinusInelastic = nullptr;
56
57#ifdef G4MULTITHREADED
58G4Mutex G4UPiNuclearCrossSection::pionUXSMutex = G4MUTEX_INITIALIZER;
59#endif
60
62 : G4VCrossSectionDataSet("G4UPiNuclearCrossSection")
63{
64 isMaster = false;
65 spline = false;
66
67 piPlus = G4PionPlus::PionPlus();
68 piMinus = G4PionMinus::PionMinus();
69
70 aPower = 0.75;
71 elow = 20.0*CLHEP::MeV;
72}
73
75{
76 if(isMaster) {
77 if(piPlusElastic) {
78 piPlusElastic->clearAndDestroy();
79 delete piPlusElastic;
80 piPlusElastic = nullptr;
81 }
82 if(piPlusInelastic) {
83 piPlusInelastic->clearAndDestroy();
84 delete piPlusInelastic;
85 piPlusInelastic = nullptr;
86 }
87 if(piMinusElastic) {
88 piMinusElastic->clearAndDestroy();
89 delete piMinusElastic;
90 piMinusElastic = nullptr;
91 }
92 if(piMinusInelastic) {
93 piMinusInelastic->clearAndDestroy();
94 delete piMinusInelastic;
95 piMinusInelastic = nullptr;
96 }
97 }
98}
99
100G4bool
102 G4int Z, const G4Material*)
103{
104 return (1 < Z);
105}
106
107G4double G4UPiNuclearCrossSection::Interpolate(
108 G4int Z, G4int A, G4double e, const G4PhysicsTable* table) const
109{
110 G4double res = 0.0;
111 G4double ekin = std::max(e, elow);
112 G4int iz = std::min(Z, 92);
113 G4int idx = idxZ[iz];
114 size_t jdx = (size_t)(std::max(ekin - elow, 0.0)*0.06);
115 //G4cout << "Interpolate: Z= " << iz << " A= " << A << " idx= " << idx
116 // << " jdx= " << jdx << " Ekin= " << ekin << G4endl;
117 if(idx < 0 || 2 == iz) {
118 res = ((*table)[std::abs(idx)])->Value(ekin, jdx);
119 //G4cout << "1: jdx= " << jdx << G4endl;
120 } else {
121 G4int iz2 = theZ[idx];
122 G4double x2 = (((*table)[idx])->Value(ekin, jdx))*APower[iz]/APower[iz2];
123 //G4cout << "2: jdx= " << jdx << G4endl;
124 G4int iz1 = theZ[idx-1];
125 G4double x1 = (((*table)[idx-1])->Value(ekin, jdx))*APower[iz]/APower[iz1];
126 G4double w1 = ((G4double)A - theA[idx-1])/(theA[idx] - theA[idx-1]);
127 res = w1*x2 + (1.0 - w1)*x1;
128 }
129 //G4cout << " res(nb)= " << res/CLHEP::barn << G4endl;
130 return res;
131}
132
133void G4UPiNuclearCrossSection::AddDataSet(const G4String& p,
134 const G4double* tot,
135 const G4double* in,
136 const G4double* e,
137 G4int n)
138{
139 G4PhysicsFreeVector* pvin = new G4PhysicsFreeVector(n,e[0]*GeV,e[n-1]*GeV,spline);
140 G4PhysicsFreeVector* pvel = new G4PhysicsFreeVector(n,e[0]*GeV,e[n-1]*GeV,spline);
141 for(G4int i=0; i<n; ++i) {
142 pvin->PutValues(i,e[i]*GeV,in[i]*millibarn);
143 pvel->PutValues(i,e[i]*GeV,std::max(0.0,(tot[i]-in[i])*millibarn));
144 }
145 if(spline) {
146 pvin->FillSecondDerivatives();
147 pvel->FillSecondDerivatives();
148 }
149 if(p == "pi+") {
150 piPlusInelastic->push_back(pvin);
151 piPlusElastic->push_back(pvel);
152 } else {
153 piMinusInelastic->push_back(pvin);
154 piMinusElastic->push_back(pvel);
155 }
156}
157
159{
160 if(&p == piPlus) {
161 G4cout << "### G4UPiNuclearCrossSection Elastic data for pi+" << G4endl;
162 G4cout << *piPlusElastic << G4endl;
163 G4cout << "### G4UPiNuclearCrossSection Inelastic data for pi+" << G4endl;
164 G4cout << *piPlusInelastic << G4endl;
165 } else if(&p == piMinus) {
166 G4cout << "### G4UPiNuclearCrossSection Elastic data for pi-" << G4endl;
167 G4cout << *piMinusElastic << G4endl;
168 G4cout << "### G4UPiNuclearCrossSection Inelastic data for pi-" << G4endl;
169 G4cout << *piMinusInelastic << G4endl;
170 }
171}
172
174{
175 //G4cout << "G4UPiNuclearCrossSection::BuildPhysicsTable for "
176 // << p.GetParticleName() << " " << piPlusElastic << G4endl;
177 if(piPlusElastic) { return; }
178
179 if(&p != piPlus && &p != piMinus) {
181 ed << "This cross section is applicable only to pions and not to "
182 << p.GetParticleName() << G4endl;
183 G4Exception("G4UPiNuclearCrossSection::BuildPhysicsTable", "had001",
184 FatalException, ed);
185 return;
186 }
187
188 if(!piPlusElastic) {
189#ifdef G4MULTITHREADED
190 G4MUTEXLOCK(&pionUXSMutex);
191 if(!piPlusElastic) {
192#endif
193 isMaster = true;
194#ifdef G4MULTITHREADED
195 }
196 G4MUTEXUNLOCK(&pionUXSMutex);
197#endif
198 }
199 if(!isMaster) { return; }
200
202 G4Pow* g4pow = G4Pow::GetInstance();
203 for(G4int i=0; i<NZ; ++i) {
204 theA[i] = nist->GetAtomicMassAmu(theZ[i]);
205 }
206 for(G4int i=1; i<93; ++i) {
207 APower[i] = g4pow->powA(nist->GetAtomicMassAmu(i),aPower);
208 }
209 G4int idx = 1;
210 for(G4int i=3; i<93; ++i) {
211 if(theZ[idx] == i) {
212 idxZ[i] = -idx;
213 ++idx;
214 } else {
215 idxZ[i] = idx;
216 }
217 }
218
219 piPlusElastic = new G4PhysicsTable();
220 piPlusInelastic = new G4PhysicsTable();
221 piMinusElastic = new G4PhysicsTable();
222 piMinusInelastic = new G4PhysicsTable();
223
224 LoadData();
225 //G4cout << "### Initialisation done " << G4endl;
226}
227
228void G4UPiNuclearCrossSection::LoadData()
229{
230 static const G4double e1[38] = {
231 0.02, 0.04, 0.06, 0.08, 0.1, 0.12, 0.13, 0.14, 0.15, 0.16,
232 0.17, 0.18, 0.19, 0.2, 0.22,0.24, 0.26, 0.28, 0.3, 0.35,
233 0.4, 0.45, 0.5, 0.55, 0.6, 0.7, 0.8, 0.9, 1, 2,
234 3, 5, 10, 20, 50, 100, 500, 1000};
235 static const G4double e2[39] = {
236 0.02, 0.04, 0.06, 0.08, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15,
237 0.16, 0.17, 0.18, 0.2, 0.22, 0.24, 0.26, 0.28, 0.3, 0.35,
238 0.4, 0.45, 0.5, 0.55, 0.575,0.6, 0.7, 0.8, 0.9, 1,
239 2, 3, 5, 10, 20, 50, 100, 500, 1000};
240 static const G4double e3[31] = {
241 0.02, 0.04, 0.06, 0.08, 0.1, 0.12, 0.14, 0.16, 0.18, 0.2,
242 0.22, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.6, 0.7, 0.8,
243 0.9, 1, 2, 3, 5, 10, 20, 50, 100, 500, 1000};
244 static const G4double e4[32] = {
245 0.02, 0.04, 0.06, 0.08, 0.1, 0.12, 0.14, 0.16, 0.18, 0.2,
246 0.22, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.7,
247 0.8, 0.9, 1, 2, 3, 5, 10, 20, 50, 100, 500, 1000};
248 static const G4double e5[34] = {
249 0.02, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.12, 0.14,
250 0.16, 0.18, 0.2, 0.22, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5,
251 0.6, 0.7, 0.8, 0.9, 1, 2, 3, 5, 10, 20, 50, 100, 500, 1000};
252 static const G4double e6[35] = {
253 0.02, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.12, 0.14,
254 0.16, 0.18, 0.2, 0.22, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5,
255 0.55, 0.6, 0.7, 0.8, 0.9, 1, 2, 3, 5, 10, 20, 50, 100, 500, 1000};
256
257 static const G4double he_t[38] = {
258 40, 70, 108, 152, 208, 276, 300, 320, 329, 333,
259 332, 328, 322, 310, 288, 260, 240, 216, 196, 144,
260 125, 112, 108.5, 109, 110.5, 117, 123, 128.5, 135, 110,
261 96, 87, 85, 83.5, 83.5, 83.5, 83.5, 83.5};
262 static const G4double he_in[38] = {
263 18, 38, 62, 98, 136, 176, 190, 200, 209, 212,
264 212, 208, 204, 196, 176, 164, 150, 134, 124, 97.5,
265 90, 85,82.5, 83.5, 86.5, 93, 97.5,100, 102, 83,
266 77, 75, 74, 72.5, 72.5, 72.5, 72.5, 72.5};
267 static const G4double be_m_t[38] = {
268 150, 210, 294, 396, 520, 600, 623, 635, 642, 640,
269 630, 615, 600, 576, 540, 504, 470, 435, 400, 340,
270 294, 258, 236, 230, 233, 244, 257, 270, 276, 250,
271 230, 215, 205, 194, 188, 186, 186, 186};
272 static const G4double be_m_in[38] = {
273 90, 126, 177, 240, 320, 380, 400, 410, 414, 410,
274 400, 387, 371, 360, 333, 312, 285, 260, 237, 216,
275 198, 187, 182, 180, 182, 187, 193, 203, 207, 179,
276 172, 165, 159, 155, 144, 144, 144, 144};
277 static const G4double be_p_t[38] = {
278 96, 150, 222, 320, 430, 514, 545, 565, 574, 574,
279 564, 552, 535, 522, 490, 462, 432, 398, 367, 314,
280 276, 248, 232, 230, 233, 244, 257, 270, 276, 250,
281 230, 215, 205, 194, 188, 186, 186, 186};
282 static const G4double be_p_in[38] = {
283 60, 95, 142, 194, 262, 319, 345, 361, 364, 364,
284 354, 350, 330, 319, 298, 280, 258, 237, 216, 200,
285 189, 183, 182, 180, 182, 187, 193, 203, 207, 179,
286 172, 165, 159, 155, 144, 144, 144, 144};
287
288 static const G4double c_m_t[39] = {
289 204, 260, 366, 517, 630, 673, 694, 704, 710, 711,
290 706, 694, 676, 648, 616, 584, 548, 518, 489, 426,
291 376, 342, 323, 310, 312, 313, 319, 333, 342, 348,
292 310, 290, 268, 250, 245, 237, 234, 234, 234};
293 static const G4double c_m_in[39] = {
294 128, 160, 224, 315, 388, 416, 430, 438, 444, 445,
295 440, 432, 416, 400, 380, 354, 320, 304, 288, 264,
296 246, 240, 233, 232, 233, 234, 238, 246, 252, 256,
297 220, 210, 198, 187, 183, 176, 174, 174, 174};
298 static const G4double c_p_t[39] = {
299 140, 192, 294, 428, 594, 642, 662, 687, 685, 688,
300 684, 672, 656, 630, 598, 567, 533, 504, 474, 416,
301 369, 336, 319, 310, 312, 313, 319, 333, 342, 348,
302 310, 290, 268, 250, 245, 237, 234, 234, 234};
303 static const G4double c_p_in[39] = {
304 94, 132, 184, 260, 370, 398, 408, 420, 426, 428,
305 424, 416, 400, 386, 366, 340, 308, 294, 280, 257,
306 241, 236, 231, 232, 233, 234, 238, 246, 252, 256,
307 220, 210, 198, 187, 183, 176, 174, 174, 174};
308 static const G4double n_m_t[39] = {
309 246, 308, 424, 590, 729, 776, 800, 821, 822, 817,
310 800, 778, 768, 728, 690, 654, 615, 584, 556, 480,
311 430, 393, 373, 367, 368, 370, 375, 388, 390, 397,
312 364, 337, 310, 291, 275, 268, 268, 268, 268};
313 static const G4double n_m_in[39] = {
314 155, 188, 256, 360, 456, 492, 512, 526, 526, 520,
315 504, 491, 475, 450, 425, 396, 376, 360, 340, 300,
316 282, 270, 265, 265, 266, 268, 273, 280, 288, 288,
317 256, 237, 226, 218, 208, 202, 202, 202, 202};
318 static const G4double n_p_t[39] = {
319 150, 212, 328, 500, 680, 735, 762, 781, 782, 779,
320 770, 748, 740, 706, 672, 633, 600, 569, 541, 467,
321 419, 385, 368, 364, 366, 368, 375, 388, 390, 397,
322 364, 337, 310, 291, 275, 268, 268, 268, 268};
323 static const G4double n_p_in[39] = {
324 90, 140, 208, 300, 426, 467, 490, 504, 504, 500,
325 484, 474, 460, 437, 413, 381, 365, 350, 330, 292,
326 276, 267, 263, 264, 265, 267, 273, 280, 288, 288,
327 256, 237, 226, 218, 208, 202, 202, 202, 202};
328
329 static const G4double o_m_t[31] = {
330 280, 360, 500, 685, 812, 861, 870, 865, 835, 800,
331 755, 700, 600, 537, 493, 468, 441, 436, 443, 449,
332 460, 463, 432, 385, 350, 325, 312, 307, 303, 303, 303};
333 static const G4double o_m_in[31] = {
334 190, 207, 300, 420, 500, 540, 550, 542, 520, 490,
335 460, 423, 360, 339, 321, 314, 312, 314, 319, 324,
336 328, 330, 300, 275, 250, 240, 229, 225, 222, 222, 222};
337 static const G4double o_p_t[31] = {
338 170, 240, 390, 570, 740, 818, 830, 822, 800, 765,
339 725, 675, 585, 525, 483, 458, 444, 447, 453, 449,
340 460, 463, 432, 385, 350, 325, 312, 307, 303, 303, 303};
341 static const G4double o_p_in[31] = {
342 100, 145, 240, 340, 470, 518, 530, 522, 505, 477,
343 448, 412, 350, 330, 316, 310, 308, 311, 317, 324,
344 328, 330, 300, 275, 250, 240, 229, 225, 222, 222, 222};
345 static const G4double na_m_t[31] = {
346 450, 545, 705, 910, 1020, 1075, 1087, 1080, 1042, 987,
347 943, 885, 790, 700, 650, 610, 585, 575, 585, 595,
348 600, 610, 556, 524, 494, 458, 445, 429, 427, 427, 427};
349 static const G4double na_m_in[31] = {
350 275, 315, 413, 545, 620, 660, 670, 662, 630, 593,
351 570, 520, 465, 420, 410, 395, 390, 400, 410, 418,
352 420, 422, 372, 348, 330, 320, 310, 294, 292, 292, 292};
353 static const G4double na_p_t[31] = {
354 210, 320, 530, 795, 960, 1035, 1050, 1040, 1007, 957,
355 918, 865, 773, 685, 636, 598, 575, 565, 578, 590,
356 598, 610, 556, 524, 494, 458, 445, 429, 427, 427, 427};
357 static const G4double na_p_in[31] = {
358 115, 210, 340, 495, 585, 630, 645, 637, 605, 572,
359 550, 505, 455, 410, 401, 388, 383, 393, 405, 414,
360 418, 422, 372, 348, 330, 320, 310, 294, 292, 292, 292};
361 static const G4double al_m_t[31] = {
362 532, 637, 832, 1057, 1207, 1230, 1210, 1174, 1133, 1095,
363 1038, 970, 890, 807, 750, 710, 675, 665, 670, 673,
364 678, 682, 618, 574, 546, 520, 507, 495, 488, 488, 488};
365 static const G4double al_m_in[31] = {
366 300, 360, 495, 665, 750, 765, 750, 730, 700, 660,
367 615, 570, 520, 490, 470, 450, 448, 450, 450, 452,
368 456, 460, 408, 392, 376, 356, 347, 338, 332, 332, 332};
369 static const G4double al_p_t[31] = {
370 225, 350, 616, 945, 1122, 1175, 1157, 1128, 1088, 1045,
371 988, 935, 870, 787, 730, 690, 660, 652, 660, 668,
372 678, 682, 618, 574, 546, 520, 507, 495, 488, 488, 488};
373 static const G4double al_p_in[31] = {
374 120, 238, 390, 610, 712, 735, 720, 703, 655, 635,
375 590, 550, 505, 475, 455, 438, 440, 445, 445, 450,
376 456, 460, 408, 392, 376, 356, 347, 338, 332, 332, 332};
377
378 static const G4double ca_m_t[31] = {
379 800, 980, 1240, 1460, 1570, 1600, 1580, 1535, 1475, 1425,
380 1375,1295, 1200, 1083, 1000, 948, 915, 895, 900, 908,
381 915, 922, 856, 795, 740, 705, 682, 660, 660, 660, 660};
382 static const G4double ca_m_in[31] = {
383 470, 550, 620, 860, 955, 960, 920, 860, 820, 780,
384 740, 665, 637, 615, 600, 590, 580, 580, 600, 608,
385 610, 615, 550, 525, 510, 488, 470, 450, 450, 450, 450};
386 static const G4double ca_p_t[31] = {
387 275, 445, 790, 1195, 1440, 1485, 1475, 1435, 1385, 1335,
388 1295,1245,1160, 1050, 970, 923, 895, 877, 887, 897,
389 904, 913, 855, 795, 740, 705, 682, 660, 660, 660, 660};
390 static const G4double ca_p_in[31] = {
391 160, 315, 500, 745, 870, 905, 900, 860, 810, 770,
392 740, 710, 640, 617, 595, 585, 575, 575, 590, 600,
393 602, 608, 550, 525, 510, 488, 470, 450, 450, 450, 450};
394 // ca data may have typo
395
396 static const G4double fe_m_t[32] = {
397 1175, 1363, 1670, 1950, 2050, 2040, 1975, 1886, 1834, 1773,
398 1720, 1635, 1474, 1380, 1269, 1225, 1182, 1162, 1159, 1162,
399 1178, 1190, 1197, 1102, 1135, 975, 945, 925, 905, 905,
400 905, 905};
401 static const G4double fe_m_in[32] = {
402 625, 725, 910, 1180, 1275, 1250, 1200, 1150, 1100, 1040,
403 995, 925, 825, 810, 780, 760, 745, 740, 740, 740,
404 750, 760, 765, 690, 660, 635, 615, 600, 585, 585,
405 585, 585};
406 static const G4double fe_p_t[32] = {
407 330, 575, 1010, 1500, 1837, 1875, 1820, 1751, 1691, 1636,
408 1690, 1450, 1396, 1305, 1219, 1190, 1148, 1138, 1134, 1144,
409 1163, 1175, 1183, 1198, 1135, 975, 945, 925, 905, 905,
410 905, 905};
411 static const G4double fe_p_in[32] = {
412 210, 410, 707, 1010, 1125, 1150, 1100, 1070, 1010, 960,
413 920, 776, 780, 760, 750, 740, 720, 725, 725, 730,
414 740, 750, 755, 690, 660, 635, 615, 600, 585, 585,
415 585, 585};
416 static const G4double cu_m_t[32] = {
417 1400, 1600, 1875, 2088, 2200, 2220, 2175, 2125, 2075, 2012,
418 1950, 1855, 1670, 1530, 1430, 1370, 1315, 1315, 1315, 1330,
419 1345, 1360, 1365, 1250, 1185, 1128, 1070, 1035, 1010, 1010,
420 1010, 1010};
421 static const G4double cu_m_in[32] = {
422 725, 840, 1020, 1200, 1295, 1300, 1267, 1240, 1213, 1175,
423 1125, 1042, 950, 900, 860, 840, 830, 832, 835, 840,
424 850, 860, 865, 785, 735, 705, 680, 650, 630, 630,
425 630, 630};
426 static const G4double cu_p_t[32] = {
427 355, 605, 1120, 1630, 1940, 2010, 2010, 1980, 1925, 1895,
428 1830, 1730, 1585, 1490, 1400, 1340, 1290, 1290, 1290, 1310,
429 1330, 1345, 1350, 1240, 1185, 1128, 1070, 1035, 1010, 1010,
430 1010, 1010};
431 static const G4double cu_p_in[32] = {
432 230, 425, 780, 1025, 1155, 1190, 1190, 1180, 1125, 1100,
433 1050, 1000, 900, 870, 835, 815, 810, 812, 815, 825,
434 840, 850, 855, 780, 735, 705, 680, 650, 630, 630,
435 630, 630};
436
437 static const G4double mo_m_t[34] = {
438 2430, 2610, 2710, 2790, 2880, 2940, 2965, 2970, 2970, 2920,
439 2840, 2720, 2570, 2500, 2365, 2200, 2050, 1926, 1825, 1768,
440 1749, 1750, 1778, 1789, 1808, 1690, 1645, 1530, 1492, 1450,
441 1425, 1425, 1425, 1425};
442 static const G4double mo_m_in[34] = {
443 925, 1125, 1250, 1375, 1500, 1600, 1680, 1750, 1770, 1730,
444 1660, 1580, 1500, 1450, 1330, 1250, 1190, 1140, 1100, 1075,
445 1075, 1070, 1088, 1095, 1110, 1035, 1005, 940, 917, 880,
446 860, 860, 860, 860};
447 static const G4double mo_p_t[34] = {
448 410, 730, 1110, 1530, 1920, 2200, 2385, 2520, 2600, 2630,
449 2575, 2470, 2320, 2285, 2185, 2053, 1945, 1852, 1776, 1719,
450 1710, 1716, 1746, 1759, 1778, 1675, 1645, 1530, 1492, 1450,
451 1425, 1425, 1425, 1425};
452 static const G4double mo_p_in[34] = {
453 270, 540, 825, 975, 1140, 1285, 1400, 1480, 1555, 1580,
454 1525, 1470, 1360, 1340, 1255, 1160, 1120, 1085, 1060, 1045,
455 1045, 1045, 1065, 1075, 1090, 1025, 1005, 940, 917, 880,
456 860, 860, 860, 860};
457 static const G4double cd_m_t[34] = {
458 3060, 3125, 3170, 3220, 3255, 3280, 3290, 3260, 3270, 3200,
459 3120, 3080, 3090, 2920, 2810, 2640, 2362, 2230, 2115, 2050,
460 2020, 2025, 2040, 2070, 2100, 1900, 1795, 1740, 1675, 1645,
461 1625, 1620, 1620, 1620};
462 static const G4double cd_m_in[34]= {
463 1025, 1275, 1440, 1625, 1740, 1800, 1880, 1920, 1980, 1920,
464 1850, 1810, 1720, 1650, 1560, 1450, 1330, 1290, 1245, 1210,
465 1200, 1200, 1205, 1205, 1230, 1130, 1085, 1060, 1000, 985,
466 975, 970, 970, 970};
467 static const G4double cd_p_t[34] = {
468 455, 780, 1170, 1700, 2120, 2400, 2600, 2720, 2820, 2840,
469 2800, 2760, 2720, 2640, 2560, 2450, 2252, 2130, 2035, 1985,
470 1970, 1975, 2005, 2035, 2070, 1880, 1795, 1740, 1675, 1645,
471 1625, 1620, 1620, 1620};
472 static const G4double cd_p_in[34] = {
473 310, 580, 880, 1060, 1270, 1400, 1530, 1610, 1660, 1680,
474 1640, 1600, 1560, 1500, 1430, 1330, 1280, 1230, 1200, 1180,
475 1170, 1175, 1180, 1180, 1210, 1120, 1085, 1060, 1000, 985,
476 975, 970, 970, 970};
477
478 static const G4double sn_m_t[35] = {
479 3000, 3180, 3250, 3300, 3300, 3410, 3470, 3450, 3410, 3350,
480 3280, 3200, 3120, 3050, 2900, 2630, 2500, 2325, 2190, 2100,
481 2060, 2055, 2055, 2055, 2067, 2085, 2000, 1900, 1835, 1770,
482 1720, 1700, 1695, 1695, 1695};
483 static const G4double sn_m_in[35] = {
484 1050, 1350, 1520, 1650, 1800, 1980, 2070, 2120, 2090, 2050,
485 1980, 1920, 1830, 1770, 1670, 1500, 1435, 1350, 1300, 1230,
486 1220, 1235, 1235, 1235, 1237, 1240, 1160, 1120, 1090, 1065,
487 1040, 1020, 1015, 1015, 1015};
488 static const G4double sn_p_t[35] = {
489 465, 800, 1200, 1760, 2170, 2480, 2730, 2885, 2970, 2980,
490 2970, 2890, 2840, 2790, 2620, 2450, 2335, 2205, 2080, 2020,
491 2010, 1990, 1990, 2015, 2030, 2045, 1980, 1890, 1835, 1770,
492 1720, 1700, 1695, 1695, 1695};
493 static const G4double sn_p_in[35] = {
494 315, 590, 880, 1220, 1460, 1580, 1700, 1770, 1810, 1810,
495 1800, 1730, 1680, 1630, 1530, 1400, 1335, 1270, 1210, 1180,
496 1190, 1190, 1190, 1205, 1210, 1210, 1150, 1115, 1090, 1065,
497 1040, 1020, 1015, 1015, 1015};
498 static const G4double w_m_t[35] = {
499 5200, 5115, 5025, 4975, 4900, 4850, 4780, 4725, 4600, 4490,
500 4355, 4255, 4125, 4040, 3830, 3580, 3330, 3110, 2955, 2860,
501 2852, 2845, 2885, 2900, 2915, 2940, 2800, 2660, 2570, 2490,
502 2460, 2425, 2420, 2420, 2420};
503 static const G4double w_m_in[35] = {
504 1450, 1850, 2100, 2350, 2550, 2700, 2825, 2900, 2850, 2750,
505 2630, 2525, 2400, 2300, 2200, 2070, 1880, 1770, 1715, 1680,
506 1680, 1680, 1685, 1690, 1700, 1720, 1635, 1560, 1530, 1460,
507 1440, 1410, 1410, 1410, 1410};
508 static const G4double w_p_t[35] = {
509 480, 900, 1500, 2350, 3020, 3420, 3650, 3775, 3875, 3830,
510 3750, 3700, 3630, 3550, 3550, 3290, 3070, 2890, 2840, 2730,
511 2725, 2720, 2770, 2805, 2828, 2865, 2770, 2640, 2570, 2490,
512 2460, 2425, 2420, 2420, 2420};
513 static const G4double w_p_in[35] = {
514 325, 680, 990, 1500, 1850, 2150, 2250, 2300, 2350, 2330,
515 2280, 2230, 2200, 2120, 2130, 1900, 1780, 1670, 1635, 1600,
516 1602, 1605, 1610, 1615, 1630, 1660, 1620, 1550, 1530, 1460,
517 1440, 1410, 1410, 1410, 1410};
518
519 static const G4double pb_m_t[35] = {
520 5890, 5700, 5610, 5580, 5550, 5480, 5400, 5300, 5100, 4930,
521 4750, 4600, 4400, 4280, 4170, 3915, 3650, 3470, 3260, 3150,
522 3120, 3070, 3085, 3100, 3120, 3160, 3070, 2930, 2820, 2750,
523 2710, 2655, 2640, 2640, 2640};
524 static const G4double pb_m_in[35] = {
525 1575, 2025, 2300, 2575, 2850, 3000, 3115, 3180, 3080, 2940,
526 2800, 2670, 2550, 2450, 2370, 2220, 2110, 2000, 1920, 1880,
527 1850, 1800, 1805, 1810, 1820, 1840, 1800, 1720, 1640, 1620,
528 1570, 1530, 1530, 1530, 1530};
529 static const G4double pb_p_t[35] = {
530 515, 940, 1500, 2400, 3270, 3750, 4050, 4140, 4260, 4200,
531 4080, 3990, 3990, 3810, 3730, 3520, 3370, 3186, 3110, 3010,
532 2990, 2985, 3005, 3020, 3040, 3080, 3020, 2905, 2790, 2750,
533 2710, 2655, 2640, 2640, 2640};
534 static const G4double pb_p_in[35] = {
535 348, 707, 1040, 1650, 2100, 2400, 2580, 2640, 2650, 2520,
536 2410, 2300, 2250, 2190, 2130, 2000, 1930, 1870, 1830, 1790,
537 1770, 1765, 1775, 1780, 1790, 1800, 1775, 1710, 1620, 1620,
538 1570, 1530, 1530, 1530, 1530};
539 static const G4double u_m_t[35] = {
540 7080, 6830, 6650, 6530, 6400, 6280, 6100, 5840, 5660, 5520,
541 5330, 5160, 4990, 4810, 4630, 4323, 4130, 3870, 3700, 3550,
542 3490, 3465, 3467, 3475, 3495, 3515, 3440, 3360, 3150, 3040,
543 2985, 2955, 2940, 2940, 2940};
544 static const G4double u_m_in[35] = {
545 1740, 2220, 2500, 2820, 3080, 3300, 3420, 3500, 3420, 3330,
546 3200, 3060, 2940, 2850, 2710, 2470, 2380, 2250, 2160, 2080,
547 2040, 2045, 2047, 2050, 2055, 2060, 2010, 1980, 1830, 1780,
548 1735, 1710, 1700, 1700, 1700};
549 static const G4double u_p_t[35] = {
550 485, 960, 1580, 2700, 3550, 4050, 4320, 4420, 4620, 4660,
551 4580, 4470, 4350, 4295, 4187, 3938, 3755, 3573, 3450, 3342,
552 3310, 3295, 3310, 3330, 3375, 3405, 3350, 3338, 3135, 3040,
553 2985, 2955, 2940, 2940, 2940};
554 static const G4double u_p_in[35] = {
555 334, 720, 1020, 1560, 2100, 2300, 2550, 2700, 2880, 2880,
556 2760, 2660, 2550, 2510, 2430, 2270, 2130, 2060, 2000, 1970,
557 1950, 1950, 1960, 1960, 1970, 1980, 1950, 1978, 1830, 1780,
558 1735, 1710, 1700, 1700, 1700};
559
560 AddDataSet("pi-",he_t, he_in, e1, 38);
561 AddDataSet("pi+",he_t, he_in, e1, 38);
562 AddDataSet("pi-",be_m_t, be_m_in, e1, 38);
563 AddDataSet("pi+",be_p_t, be_p_in, e1, 38);
564 AddDataSet("pi-",c_m_t, c_m_in, e2, 39);
565 AddDataSet("pi+",c_p_t, c_p_in, e2, 39);
566 AddDataSet("pi-",n_m_t, n_m_in, e2, 39);
567 AddDataSet("pi+",n_p_t, n_p_in, e2, 39);
568 AddDataSet("pi-",o_m_t, o_m_in, e3, 31);
569 AddDataSet("pi+",o_p_t, o_p_in, e3, 31);
570 AddDataSet("pi-",na_m_t, na_m_in, e3, 31);
571 AddDataSet("pi+",na_p_t, na_p_in, e3, 31);
572 AddDataSet("pi-",al_m_t, al_m_in, e3, 31);
573 AddDataSet("pi+",al_p_t, al_p_in, e3, 31);
574 AddDataSet("pi-",ca_m_t, ca_m_in, e3, 31);
575 AddDataSet("pi+",ca_p_t, ca_p_in, e3, 31);
576 AddDataSet("pi-",fe_m_t, fe_m_in, e4, 32);
577 AddDataSet("pi+",fe_p_t, fe_p_in, e4, 32);
578 AddDataSet("pi-",cu_m_t, cu_m_in, e4, 32);
579 AddDataSet("pi+",cu_p_t, cu_p_in, e4, 32);
580 AddDataSet("pi-",mo_m_t, mo_m_in, e5, 34);
581 AddDataSet("pi+",mo_p_t, mo_p_in, e5, 34);
582 AddDataSet("pi-",cd_m_t, cd_m_in, e5, 34);
583 AddDataSet("pi+",cd_p_t, cd_p_in, e5, 34);
584 AddDataSet("pi-",sn_m_t, sn_m_in, e6, 35);
585 AddDataSet("pi+",sn_p_t, sn_p_in, e6, 35);
586 AddDataSet("pi-",w_m_t, w_m_in, e6, 35);
587 AddDataSet("pi+",w_p_t, w_p_in, e6, 35);
588 AddDataSet("pi-",pb_m_t, pb_m_in, e6, 35);
589 AddDataSet("pi+",pb_p_t, pb_p_in, e6, 35);
590 AddDataSet("pi-",u_m_t, u_m_in, e6, 35);
591 AddDataSet("pi+",u_p_t, u_p_in, e6, 35);
592}
593
595{
596 outFile << "G4UPiNuclearCrossSection calculates the total, elastic and\n"
597 << "inelastic cross sections for pion scattering from nuclei\n"
598 << "heavier than hydrogen. It is based on the Barashenkov\n"
599 << "parameterization and is valid for all incident energies.\n";
600}
601
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:59
std::ostringstream G4ExceptionDescription
Definition: G4Exception.hh:40
#define G4MUTEX_INITIALIZER
Definition: G4Threading.hh:85
#define G4MUTEXLOCK(mutex)
Definition: G4Threading.hh:251
#define G4MUTEXUNLOCK(mutex)
Definition: G4Threading.hh:254
std::mutex G4Mutex
Definition: G4Threading.hh:81
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
const G4double A[17]
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
static G4NistManager * Instance()
G4double GetAtomicMassAmu(const G4String &symb) const
const G4String & GetParticleName() const
void PutValues(const std::size_t index, const G4double energy, const G4double value)
void push_back(G4PhysicsVector *)
void clearAndDestroy()
void FillSecondDerivatives(const G4SplineType=G4SplineType::Base, const G4double dir1=0.0, const G4double dir2=0.0)
static G4PionMinus * PionMinus()
Definition: G4PionMinus.cc:97
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:97
Definition: G4Pow.hh:49
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:230
G4bool IsElementApplicable(const G4DynamicParticle *aParticle, G4int Z, const G4Material *) final
void BuildPhysicsTable(const G4ParticleDefinition &) final
void CrossSectionDescription(std::ostream &) const final
void DumpPhysicsTable(const G4ParticleDefinition &) final