Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4INCLCrossSections.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// INCL++ intra-nuclear cascade model
27// Alain Boudard, CEA-Saclay, France
28// Joseph Cugnon, University of Liege, Belgium
29// Jean-Christophe David, CEA-Saclay, France
30// Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland
31// Sylvie Leray, CEA-Saclay, France
32// Davide Mancusi, CEA-Saclay, France
33//
34#define INCLXX_IN_GEANT4_MODE 1
35
36#include "globals.hh"
37
41#include "G4INCLLogger.hh"
48// #include <cassert>
49
50namespace G4INCL {
51
52 namespace {
53 G4ThreadLocal ICrossSections *theCrossSections;
54 }
55
56 namespace CrossSections {
57 G4double elastic(Particle const * const p1, Particle const * const p2) {
58 return theCrossSections->elastic(p1,p2);
59 }
60
61 G4double total(Particle const * const p1, Particle const * const p2) {
62 return theCrossSections->total(p1,p2);
63 }
64
65 G4double NDeltaToNN(Particle const * const p1, Particle const * const p2) {
66 return theCrossSections->NDeltaToNN(p1,p2);
67 }
68
69 G4double NNToNDelta(Particle const * const p1, Particle const * const p2) {
70 return theCrossSections->NNToNDelta(p1,p2);
71 }
72
73 G4double NNToxPiNN(const G4int xpi, Particle const * const p1, Particle const * const p2) {
74 return theCrossSections->NNToxPiNN(xpi,p1,p2);
75 }
76
77 G4double piNToDelta(Particle const * const p1, Particle const * const p2) {
78 return theCrossSections->piNToDelta(p1,p2);
79 }
80
81 G4double piNToxPiN(const G4int xpi, Particle const * const p1, Particle const * const p2) {
82 return theCrossSections->piNToxPiN(xpi,p1,p2);
83 }
84
85 G4double piNToEtaN(Particle const * const p1, Particle const * const p2) {
86 return theCrossSections->piNToEtaN(p1,p2);
87 }
88
89 G4double piNToOmegaN(Particle const * const p1, Particle const * const p2) {
90 return theCrossSections->piNToOmegaN(p1,p2);
91 }
92
93 G4double piNToEtaPrimeN(Particle const * const p1, Particle const * const p2) {
94 return theCrossSections->piNToEtaPrimeN(p1,p2);
95 }
96
97 G4double etaNToPiN(Particle const * const p1, Particle const * const p2) {
98 return theCrossSections->etaNToPiN(p1,p2);
99 }
100
101 G4double etaNToPiPiN(Particle const * const p1, Particle const * const p2) {
102 return theCrossSections->etaNToPiPiN(p1,p2);
103 }
104
105 G4double etaNToLK(Particle const * const p1, Particle const * const p2) {
106 return theCrossSections->etaNToLK(p1,p2);
107 }
108
109 G4double etaNToSK(Particle const * const p1, Particle const * const p2) {
110 return theCrossSections->etaNToSK(p1,p2);
111 }
112
113 G4double omegaNToPiN(Particle const * const p1, Particle const * const p2) {
114 return theCrossSections->omegaNToPiN(p1,p2);
115 }
116
117 G4double omegaNToPiPiN(Particle const * const p1, Particle const * const p2) {
118 return theCrossSections->omegaNToPiPiN(p1,p2);
119 }
120
121 G4double omegaNToLK(Particle const * const p1, Particle const * const p2) {
122 return theCrossSections->omegaNToLK(p1,p2);
123 }
124
125 G4double omegaNToSK(Particle const * const p1, Particle const * const p2) {
126 return theCrossSections->omegaNToSK(p1,p2);
127 }
128
129 G4double etaPrimeNToPiN(Particle const * const p1, Particle const * const p2) {
130 return theCrossSections->etaPrimeNToPiN(p1,p2);
131 }
132
133 G4double NNToNNEta(Particle const * const p1, Particle const * const p2) {
134 return theCrossSections->NNToNNEta(p1,p2);
135 }
136
137 G4double NNToNNEtaExclu(Particle const * const p1, Particle const * const p2) {
138 return theCrossSections->NNToNNEtaExclu(p1,p2);
139 }
140
141 G4double NNToNNEtaxPi(const G4int xpi, Particle const * const p1, Particle const * const p2) {
142 return theCrossSections->NNToNNEtaxPi(xpi,p1,p2);
143 }
144
145 G4double NNToNDeltaEta(Particle const * const p1, Particle const * const p2) {
146 return theCrossSections->NNToNDeltaEta(p1,p2);
147 }
148
149
150 G4double NNToNNOmega(Particle const * const p1, Particle const * const p2) {
151 return theCrossSections->NNToNNOmega(p1,p2);
152 }
153
154 G4double NNToNNOmegaExclu(Particle const * const p1, Particle const * const p2) {
155 return theCrossSections->NNToNNOmegaExclu(p1,p2);
156 }
157
158 G4double NNToNNOmegaxPi(const G4int xpi, Particle const * const p1, Particle const * const p2) {
159 return theCrossSections->NNToNNOmegaxPi(xpi,p1,p2);
160 }
161
162 G4double NNToNDeltaOmega(Particle const * const p1, Particle const * const p2) {
163 return theCrossSections->NNToNDeltaOmega(p1,p2);
164 }
165
166
167 G4double NYelastic(Particle const * const p1, Particle const * const p2) {
168 return theCrossSections->NYelastic(p1,p2);
169 }
170
171 G4double NKbelastic(Particle const * const p1, Particle const * const p2) {
172 return theCrossSections->NKbelastic(p1,p2);
173 }
174
175 G4double NKelastic(Particle const * const p1, Particle const * const p2) {
176 return theCrossSections->NKelastic(p1,p2);
177 }
178
179 G4double NNToNLK(Particle const * const p1, Particle const * const p2) {
180 return theCrossSections->NNToNLK(p1,p2);
181 }
182
183 G4double NNToNSK(Particle const * const p1, Particle const * const p2) {
184 return theCrossSections->NNToNSK(p1,p2);
185 }
186
187 G4double NNToNLKpi(Particle const * const p1, Particle const * const p2) {
188 return theCrossSections->NNToNLKpi(p1,p2);
189 }
190
191 G4double NNToNSKpi(Particle const * const p1, Particle const * const p2) {
192 return theCrossSections->NNToNSKpi(p1,p2);
193 }
194
195 G4double NNToNLK2pi(Particle const * const p1, Particle const * const p2) {
196 return theCrossSections->NNToNLK2pi(p1,p2);
197 }
198
199 G4double NNToNSK2pi(Particle const * const p1, Particle const * const p2) {
200 return theCrossSections->NNToNSK2pi(p1,p2);
201 }
202
203 G4double NNToNNKKb(Particle const * const p1, Particle const * const p2) {
204 return theCrossSections->NNToNNKKb(p1,p2);
205 }
206
207 G4double NNToMissingStrangeness(Particle const * const p1, Particle const * const p2) {
208 return theCrossSections->NNToMissingStrangeness(p1,p2);
209 }
210
211 G4double NDeltaToNLK(Particle const * const p1, Particle const * const p2) {
212 return theCrossSections->NDeltaToNLK(p1,p2);
213 }
214 G4double NDeltaToNSK(Particle const * const p1, Particle const * const p2) {
215 return theCrossSections->NDeltaToNSK(p1,p2);
216 }
217 G4double NDeltaToDeltaLK(Particle const * const p1, Particle const * const p2) {
218 return theCrossSections->NDeltaToDeltaLK(p1,p2);
219 }
220 G4double NDeltaToDeltaSK(Particle const * const p1, Particle const * const p2) {
221 return theCrossSections->NDeltaToDeltaSK(p1,p2);
222 }
223
224 G4double NDeltaToNNKKb(Particle const * const p1, Particle const * const p2) {
225 return theCrossSections->NDeltaToNNKKb(p1,p2);
226 }
227
228 G4double NpiToLK(Particle const * const p1, Particle const * const p2) {
229 return theCrossSections->NpiToLK(p1,p2);
230 }
231
232 G4double NpiToSK(Particle const * const p1, Particle const * const p2) {
233 return theCrossSections->NpiToSK(p1,p2);
234 }
235
236 G4double p_pimToSmKp(Particle const * const p1, Particle const * const p2) {
237 return theCrossSections->p_pimToSmKp(p1,p2);
238 }
239
240 G4double p_pimToSzKz(Particle const * const p1, Particle const * const p2) {
241 return theCrossSections->p_pimToSzKz(p1,p2);
242 }
243
244 G4double p_pizToSzKp(Particle const * const p1, Particle const * const p2) {
245 return theCrossSections->p_pizToSzKp(p1,p2);
246 }
247
248 G4double NpiToLKpi(Particle const * const p1, Particle const * const p2) {
249 return theCrossSections->NpiToLKpi(p1,p2);
250 }
251
252 G4double NpiToSKpi(Particle const * const p1, Particle const * const p2) {
253 return theCrossSections->NpiToSKpi(p1,p2);
254 }
255
256 G4double NpiToLK2pi(Particle const * const p1, Particle const * const p2) {
257 return theCrossSections->NpiToLK2pi(p1,p2);
258 }
259
260 G4double NpiToSK2pi(Particle const * const p1, Particle const * const p2) {
261 return theCrossSections->NpiToSK2pi(p1,p2);
262 }
263
264 G4double NpiToNKKb(Particle const * const p1, Particle const * const p2) {
265 return theCrossSections->NpiToNKKb(p1,p2);
266 }
267
268 G4double NpiToMissingStrangeness(Particle const * const p1, Particle const * const p2) {
269 return theCrossSections->NpiToMissingStrangeness(p1,p2);
270 }
271
272 G4double NLToNS(Particle const * const p1, Particle const * const p2) {
273 return theCrossSections->NLToNS(p1,p2);
274 }
275
276 G4double NSToNL(Particle const * const p1, Particle const * const p2) {
277 return theCrossSections->NSToNL(p1,p2);
278 }
279
280 G4double NSToNS(Particle const * const p1, Particle const * const p2) {
281 return theCrossSections->NSToNS(p1,p2);
282 }
283
284 G4double NKToNK(Particle const * const p1, Particle const * const p2) {
285 return theCrossSections->NKToNK(p1,p2);
286 }
287
288 G4double NKToNKpi(Particle const * const p1, Particle const * const p2) {
289 return theCrossSections->NKToNKpi(p1,p2);
290 }
291
292 G4double NKToNK2pi(Particle const * const p1, Particle const * const p2) {
293 return theCrossSections->NKToNK2pi(p1,p2);
294 }
295
296 G4double NKbToNKb(Particle const * const p1, Particle const * const p2) {
297 return theCrossSections->NKbToNKb(p1,p2);
298 }
299
300 G4double NKbToSpi(Particle const * const p1, Particle const * const p2) {
301 return theCrossSections->NKbToSpi(p1,p2);
302 }
303
304 G4double NKbToLpi(Particle const * const p1, Particle const * const p2) {
305 return theCrossSections->NKbToLpi(p1,p2);
306 }
307
308 G4double NNbarElastic(Particle const* const p1, Particle const* const p2){
309 return theCrossSections->NNbarElastic(p1,p2);
310 }
311 G4double NNbarCEX(Particle const* const p1, Particle const* const p2){
312 return theCrossSections->NNbarCEX(p1,p2);
313 }
314 G4double NNbarToLLbar(Particle const* const p1, Particle const* const p2){
315 return theCrossSections->NNbarToLLbar(p1,p2);
316 }
317
318 G4double NNbarToNNbarpi(Particle const* const p1, Particle const* const p2){
319 return theCrossSections->NNbarToNNbarpi(p1,p2);
320 }
321 G4double NNbarToNNbar2pi(Particle const* const p1, Particle const* const p2){
322 return theCrossSections->NNbarToNNbar2pi(p1,p2);
323 }
324 G4double NNbarToNNbar3pi(Particle const* const p1, Particle const* const p2){
325 return theCrossSections->NNbarToNNbar3pi(p1,p2);
326 }
327
328 G4double NNbarToAnnihilation(Particle const* const p1, Particle const* const p2){
329 return theCrossSections->NNbarToAnnihilation(p1,p2);
330 }
331
332 G4double NKbToS2pi(Particle const * const p1, Particle const * const p2) {
333 return theCrossSections->NKbToS2pi(p1,p2);
334 }
335
336 G4double NKbToL2pi(Particle const * const p1, Particle const * const p2) {
337 return theCrossSections->NKbToL2pi(p1,p2);
338 }
339
340 G4double NKbToNKbpi(Particle const * const p1, Particle const * const p2) {
341 return theCrossSections->NKbToNKbpi(p1,p2);
342 }
343
344 G4double NKbToNKb2pi(Particle const * const p1, Particle const * const p2) {
345 return theCrossSections->NKbToNKb2pi(p1,p2);
346 }
347
348
350 return theCrossSections->calculateNNAngularSlope(energyCM, iso);
351 }
352
353 G4double interactionDistancePiN(const G4double projectileKineticEnergy) {
354 ThreeVector nullVector;
355 ThreeVector unitVector(0., 0., 1.);
356
357 Particle piPlusProjectile(PiPlus, unitVector, nullVector);
358 piPlusProjectile.setEnergy(piPlusProjectile.getMass()+projectileKineticEnergy);
359 piPlusProjectile.adjustMomentumFromEnergy();
360 Particle piZeroProjectile(PiZero, unitVector, nullVector);
361 piZeroProjectile.setEnergy(piZeroProjectile.getMass()+projectileKineticEnergy);
362 piZeroProjectile.adjustMomentumFromEnergy();
363 Particle piMinusProjectile(PiMinus, unitVector, nullVector);
364 piMinusProjectile.setEnergy(piMinusProjectile.getMass()+projectileKineticEnergy);
365 piMinusProjectile.adjustMomentumFromEnergy();
366
367 Particle protonTarget(Proton, nullVector, nullVector);
368 Particle neutronTarget(Neutron, nullVector, nullVector);
369 const G4double sigmapipp = total(&piPlusProjectile, &protonTarget);
370 const G4double sigmapipn = total(&piPlusProjectile, &neutronTarget);
371 const G4double sigmapi0p = total(&piZeroProjectile, &protonTarget);
372 const G4double sigmapi0n = total(&piZeroProjectile, &neutronTarget);
373 const G4double sigmapimp = total(&piMinusProjectile, &protonTarget);
374 const G4double sigmapimn = total(&piMinusProjectile, &neutronTarget);
375 /* We compute the interaction distance from the largest of the pi-N cross
376 * sections. Note that this is different from INCL4.6, which just takes the
377 * average of the six, and will in general lead to a different geometrical
378 * cross section.
379 */
380 const G4double largestSigma = std::max(sigmapipp, std::max(sigmapipn, std::max(sigmapi0p, std::max(sigmapi0n, std::max(sigmapimp,sigmapimn)))));
381 const G4double interactionDistance = std::sqrt(largestSigma/Math::tenPi);
382
383 return interactionDistance;
384 }
385
386 G4double interactionDistanceNN(const ParticleSpecies &aSpecies, const G4double kineticEnergy) {
387// assert(aSpecies.theType==Proton || aSpecies.theType==Neutron || aSpecies.theType==Composite);
388// assert(aSpecies.theA>0);
389 ThreeVector nullVector;
390 ThreeVector unitVector(0.,0.,1.);
391
392 const G4double kineticEnergyPerNucleon = kineticEnergy / aSpecies.theA;
393
394 Particle protonProjectile(Proton, unitVector, nullVector);
395 protonProjectile.setEnergy(protonProjectile.getMass()+kineticEnergyPerNucleon);
396 protonProjectile.adjustMomentumFromEnergy();
397 Particle neutronProjectile(Neutron, unitVector, nullVector);
398 neutronProjectile.setEnergy(neutronProjectile.getMass()+kineticEnergyPerNucleon);
399 neutronProjectile.adjustMomentumFromEnergy();
400
401 Particle protonTarget(Proton, nullVector, nullVector);
402 Particle neutronTarget(Neutron, nullVector, nullVector);
403 const G4double sigmapp = total(&protonProjectile, &protonTarget);
404 const G4double sigmapn = total(&protonProjectile, &neutronTarget);
405 const G4double sigmann = total(&neutronProjectile, &neutronTarget);
406 /* We compute the interaction distance from the largest of the NN cross
407 * sections. Note that this is different from INCL4.6, which just takes the
408 * average of the four, and will in general lead to a different geometrical
409 * cross section.
410 */
411 const G4double largestSigma = std::max(sigmapp, std::max(sigmapn, sigmann));
412 const G4double interactionDistance = std::sqrt(largestSigma/Math::tenPi);
413
414 return interactionDistance;
415 }
416 G4double interactionDistanceNbarN(const ParticleSpecies &aSpecies, const G4double kineticEnergy) {
417// assert(aSpecies.theType==antiComposite);
418// assert(aSpecies.theA<0);
419 ThreeVector nullVector;
420 ThreeVector unitVector(0.,0.,1.);
421
422 const G4double kineticEnergyPerNucleon = kineticEnergy / (-aSpecies.theA);
423
424 Particle antiprotonProjectile(antiProton, unitVector, nullVector);
425 antiprotonProjectile.setEnergy(antiprotonProjectile.getMass()+kineticEnergyPerNucleon);
426 antiprotonProjectile.adjustMomentumFromEnergy();
427 Particle antineutronProjectile(antiNeutron, unitVector, nullVector);
428 antineutronProjectile.setEnergy(antineutronProjectile.getMass()+kineticEnergyPerNucleon);
429 antineutronProjectile.adjustMomentumFromEnergy();
430
431 Particle protonTarget(Proton, nullVector, nullVector);
432 Particle neutronTarget(Neutron, nullVector, nullVector);
433 const double sigmapbarp = total(&antiprotonProjectile, &protonTarget);
434 const double sigmapbarn = total(&antiprotonProjectile, &neutronTarget);
435 const double sigmanbarn = total(&antineutronProjectile, &neutronTarget);
436 const double sigmanbarp = total(&antineutronProjectile, &protonTarget);
437 /* We compute the interaction distance from the largest of the NN cross
438 * sections. Note that this is different from INCL4.6, which just takes the
439 * average of the four, and will in general lead to a different geometrical
440 * cross section.
441 */
442 const G4double largestSigma = std::max(std::max(sigmapbarp,sigmapbarn), std::max(sigmanbarn,sigmanbarp));
443 const G4double interactionDistance = std::sqrt(largestSigma/Math::tenPi);
444
445 return interactionDistance;
446 }
447
448 G4double interactionDistancenbarN(const ParticleSpecies &aSpecies, const G4double kineticEnergy) {
449// assert(aSpecies.theType==antiNeutron);
450// assert(aSpecies.theA<0);
451 ThreeVector nullVector;
452 ThreeVector unitVector(0.,0.,1.);
453
454 const G4double kineticEnergyPerNucleon = kineticEnergy / (- aSpecies.theA);
455
456 Particle antineutronProjectile(antiNeutron, unitVector, nullVector);
457 antineutronProjectile.setEnergy(antineutronProjectile.getMass()+kineticEnergyPerNucleon);
458 antineutronProjectile.adjustMomentumFromEnergy();
459
460 Particle protonTarget(Proton, nullVector, nullVector);
461 Particle neutronTarget(Neutron, nullVector, nullVector);
462 const G4double sigmanbarp = total(&antineutronProjectile, &protonTarget);
463 const G4double sigmanbarn = total(&antineutronProjectile, &neutronTarget);
464 /* We compute the interaction distance from the largest of the NN cross
465 * sections. Note that this is different from INCL4.6, which just takes the
466 * average of the four, and will in general lead to a different geometrical
467 * cross section.
468 */
469 const G4double largestSigma = std::max(sigmanbarp, sigmanbarn);
470 const G4double interactionDistance = std::sqrt(largestSigma/Math::tenPi);
471
472 return interactionDistance;
473 }
474
476 ThreeVector nullVector;
477 ThreeVector unitVector(0.,0.,1.);
478
479 Particle kpProjectile(KPlus, unitVector, nullVector);
480 kpProjectile.setEnergy(kpProjectile.getMass()+kineticEnergy);
481 kpProjectile.adjustMomentumFromEnergy();
482 Particle kzProjectile(KZero, unitVector, nullVector);
483 kzProjectile.setEnergy(kzProjectile.getMass()+kineticEnergy);
484 kzProjectile.adjustMomentumFromEnergy();
485
486 Particle protonTarget(Proton, nullVector, nullVector);
487 Particle neutronTarget(Neutron, nullVector, nullVector);
488 const G4double sigmakpp = total(&kpProjectile, &protonTarget);
489 const G4double sigmakpn = total(&kpProjectile, &neutronTarget);
490 const G4double sigmakzp = total(&kzProjectile, &protonTarget);
491 const G4double sigmakzn = total(&kzProjectile, &neutronTarget);
492
493 const G4double largestSigma = std::max(sigmakpp, std::max(sigmakpn, std::max(sigmakzp, sigmakzn)));
494 const G4double interactionDistance = std::sqrt(largestSigma/Math::tenPi);
495
496 return interactionDistance;
497 }
498
500 ThreeVector nullVector;
501 ThreeVector unitVector(0.,0.,1.);
502
503 Particle kmProjectile(KMinus, unitVector, nullVector);
504 kmProjectile.setEnergy(kmProjectile.getMass()+kineticEnergy);
505 kmProjectile.adjustMomentumFromEnergy();
506 Particle kzProjectile(KZeroBar, unitVector, nullVector);
507 kzProjectile.setEnergy(kzProjectile.getMass()+kineticEnergy);
508 kzProjectile.adjustMomentumFromEnergy();
509
510 Particle protonTarget(Proton, nullVector, nullVector);
511 Particle neutronTarget(Neutron, nullVector, nullVector);
512 const G4double sigmakmp = total(&kmProjectile, &protonTarget);
513 const G4double sigmakmn = total(&kmProjectile, &neutronTarget);
514 const G4double sigmakzp = total(&kzProjectile, &protonTarget);
515 const G4double sigmakzn = total(&kzProjectile, &neutronTarget);
516
517 const G4double largestSigma = std::max(sigmakmp, std::max(sigmakmn, std::max(sigmakzp, sigmakzn)));
518 const G4double interactionDistance = std::sqrt(largestSigma/Math::tenPi);
519
520 return interactionDistance;
521 }
522
524 ThreeVector nullVector;
525 ThreeVector unitVector(0.,0.,1.);
526
527 Particle lProjectile(Lambda, unitVector, nullVector);
528 lProjectile.setEnergy(lProjectile.getMass()+kineticEnergy);
529 lProjectile.adjustMomentumFromEnergy();
530 Particle spProjectile(SigmaPlus, unitVector, nullVector);
531 spProjectile.setEnergy(spProjectile.getMass()+kineticEnergy);
532 spProjectile.adjustMomentumFromEnergy();
533 Particle szProjectile(SigmaZero, unitVector, nullVector);
534 szProjectile.setEnergy(szProjectile.getMass()+kineticEnergy);
535 szProjectile.adjustMomentumFromEnergy();
536 Particle smProjectile(SigmaMinus, unitVector, nullVector);
537 smProjectile.setEnergy(smProjectile.getMass()+kineticEnergy);
538 smProjectile.adjustMomentumFromEnergy();
539
540 Particle protonTarget(Proton, nullVector, nullVector);
541 Particle neutronTarget(Neutron, nullVector, nullVector);
542 const G4double sigmalp = total(&lProjectile, &protonTarget);
543 const G4double sigmaln = total(&lProjectile, &neutronTarget);
544 const G4double sigmaspp = total(&spProjectile, &protonTarget);
545 const G4double sigmaspn = total(&spProjectile, &neutronTarget);
546 const G4double sigmaszp = total(&szProjectile, &protonTarget);
547 const G4double sigmaszn = total(&szProjectile, &neutronTarget);
548 const G4double sigmasmp = total(&smProjectile, &protonTarget);
549 const G4double sigmasmn = total(&smProjectile, &neutronTarget);
550
551 const G4double largestSigma = std::max(sigmalp, std::max(sigmaln, std::max(sigmaspp, std::max(sigmaspn, std::max(sigmaszp, std::max(sigmaszn, std::max(sigmasmp, sigmasmn)))))));
552 const G4double interactionDistance = std::sqrt(largestSigma/Math::tenPi);
553
554 return interactionDistance;
555 }
556
558 theCrossSections = c;
559 }
560
562 delete theCrossSections;
563 theCrossSections = NULL;
564 }
565
566 void initialize(Config const * const theConfig) {
567 CrossSectionsType crossSections = theConfig->getCrossSectionsType();
568 if(crossSections == INCL46CrossSections)
570 else if(crossSections == MultiPionsCrossSections)
572 else if(crossSections == TruncatedMultiPionsCrossSections) {
573 const G4int nMaxPi = theConfig->getMaxNumberMultipions();
574 if(nMaxPi>0)
576 else {
577 INCL_WARN("Truncated multipion cross sections were requested, but the specified maximum\n"
578 << "number of pions is <=0. Falling back to standard multipion cross-sections.\n");
580 }
581 } else if(crossSections == MultiPionsAndResonancesCrossSections)
583 else if(crossSections == StrangenessCrossSections)
585 else if(crossSections == AntiparticlesCrossSections)
587 }
588 }
589}
Multipion, mesonic Resonances, strange cross sections and antinucleon as projectile.
Cross sections used in INCL4.6.
Multipion and mesonic Resonances cross sections.
Cross sections used in INCL Multipions.
Multipion, mesonic Resonances and strange cross sections.
Truncated multipion cross sections.
#define INCL_WARN(x)
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
G4int getMaxNumberMultipions() const
Get the maximum number of pions for multipion collisions.
CrossSectionsType getCrossSectionsType() const
Get the Cross Section type.
Multipion, mesonic Resonances and strange cross sections.
Cross sections used in INCL4.6.
Cross sections used in INCL Multipions.
Multipion, mesonic Resonances and strange cross sections.
Abstract interface for the cross-section classes.
const ThreeVector & adjustMomentumFromEnergy()
Rescale the momentum to match the total energy.
void setEnergy(G4double energy)
G4double getMass() const
Get the cached particle mass.
G4double NSToNL(Particle const *const p1, Particle const *const p2)
G4double NNToNNKKb(Particle const *const p1, Particle const *const p2)
G4double elastic(Particle const *const p1, Particle const *const p2)
G4double NpiToSK(Particle const *const p1, Particle const *const p2)
G4double NNToNNOmega(Particle const *const p1, Particle const *const p2)
G4double NNToNNEta(Particle const *const p1, Particle const *const p2)
G4double interactionDistanceNbarN(const ParticleSpecies &aSpecies, const G4double kineticEnergy)
G4double piNToOmegaN(Particle const *const p1, Particle const *const p2)
G4double NNbarCEX(Particle const *const p1, Particle const *const p2)
G4double NKbToNKb2pi(Particle const *const p1, Particle const *const p2)
G4double interactionDistanceKbarN(const G4double projectileKineticEnergy)
Compute the "interaction distance".
G4double interactionDistancePiN(const G4double projectileKineticEnergy)
Compute the "interaction distance".
G4double NNToNDeltaOmega(Particle const *const p1, Particle const *const p2)
G4double NDeltaToDeltaLK(Particle const *const p1, Particle const *const p2)
G4double NNToNSKpi(Particle const *const p1, Particle const *const p2)
G4double etaNToPiN(Particle const *const p1, Particle const *const p2)
G4double NDeltaToNNKKb(Particle const *const p1, Particle const *const p2)
G4double NKbToLpi(Particle const *const p1, Particle const *const p2)
G4double NNToNLK2pi(Particle const *const p1, Particle const *const p2)
G4double etaNToPiPiN(Particle const *const p1, Particle const *const p2)
G4double NYelastic(Particle const *const p1, Particle const *const p2)
G4double NKbToS2pi(Particle const *const p1, Particle const *const p2)
G4double piNToEtaN(Particle const *const p1, Particle const *const p2)
G4double NNbarToAnnihilation(Particle const *const p1, Particle const *const p2)
Nucleon-AntiNucleon total annihilation cross sections.
G4double omegaNToPiN(Particle const *const p1, Particle const *const p2)
G4double NDeltaToNSK(Particle const *const p1, Particle const *const p2)
G4double NKbToSpi(Particle const *const p1, Particle const *const p2)
G4double NNToNDelta(Particle const *const p1, Particle const *const p2)
G4double p_pimToSzKz(Particle const *const p1, Particle const *const p2)
G4double NNToNSK(Particle const *const p1, Particle const *const p2)
G4double interactionDistancenbarN(const ParticleSpecies &aSpecies, const G4double kineticEnergy)
G4double NDeltaToNLK(Particle const *const p1, Particle const *const p2)
G4double NLToNS(Particle const *const p1, Particle const *const p2)
G4double omegaNToLK(Particle const *const p1, Particle const *const p2)
G4double piNToDelta(Particle const *const p1, Particle const *const p2)
G4double NKbToNKb(Particle const *const p1, Particle const *const p2)
G4double NNToNSK2pi(Particle const *const p1, Particle const *const p2)
G4double NNbarToNNbar3pi(Particle const *const p1, Particle const *const p2)
G4double NNToNLK(Particle const *const p1, Particle const *const p2)
Strange cross sections.
G4double NNToNNEtaExclu(Particle const *const p1, Particle const *const p2)
G4double interactionDistanceKN(const G4double projectileKineticEnergy)
Compute the "interaction distance".
G4double NNToNDeltaEta(Particle const *const p1, Particle const *const p2)
G4double NNToNNOmegaxPi(const G4int xpi, Particle const *const p1, Particle const *const p2)
G4double NNToNNEtaxPi(const G4int xpi, Particle const *const p1, Particle const *const p2)
G4double NNbarToNNbarpi(Particle const *const p1, Particle const *const p2)
Nucleon-AntiNucleon to Nucleon-AntiNucleon + pions cross sections.
G4double NKelastic(Particle const *const p1, Particle const *const p2)
G4double interactionDistanceYN(const G4double projectileKineticEnergy)
Compute the "interaction distance".
G4double NSToNS(Particle const *const p1, Particle const *const p2)
G4double NpiToNKKb(Particle const *const p1, Particle const *const p2)
G4double NpiToLK2pi(Particle const *const p1, Particle const *const p2)
G4double omegaNToPiPiN(Particle const *const p1, Particle const *const p2)
G4double NDeltaToDeltaSK(Particle const *const p1, Particle const *const p2)
G4double NpiToMissingStrangeness(Particle const *const p1, Particle const *const p2)
G4double NNbarToNNbar2pi(Particle const *const p1, Particle const *const p2)
G4double total(Particle const *const p1, Particle const *const p2)
void setCrossSections(ICrossSections *c)
G4double NDeltaToNN(Particle const *const p1, Particle const *const p2)
G4double omegaNToSK(Particle const *const p1, Particle const *const p2)
G4double NpiToLKpi(Particle const *const p1, Particle const *const p2)
G4double piNToEtaPrimeN(Particle const *const p1, Particle const *const p2)
G4double NKbelastic(Particle const *const p1, Particle const *const p2)
G4double NKbToNKbpi(Particle const *const p1, Particle const *const p2)
G4double NNToNLKpi(Particle const *const p1, Particle const *const p2)
G4double p_pizToSzKp(Particle const *const p1, Particle const *const p2)
G4double NKbToL2pi(Particle const *const p1, Particle const *const p2)
void initialize(Config const *const theConfig)
G4double etaPrimeNToPiN(Particle const *const p1, Particle const *const p2)
G4double NNToxPiNN(const G4int xpi, Particle const *const p1, Particle const *const p2)
G4double NKToNK2pi(Particle const *const p1, Particle const *const p2)
G4double NKToNKpi(Particle const *const p1, Particle const *const p2)
G4double calculateNNAngularSlope(G4double energyCM, G4int iso)
Calculate the slope of the NN DDXS.
G4double NNToNNOmegaExclu(Particle const *const p1, Particle const *const p2)
G4double interactionDistanceNN(const ParticleSpecies &aSpecies, const G4double kineticEnergy)
Compute the "interaction distance".
G4double NpiToSK2pi(Particle const *const p1, Particle const *const p2)
G4double NKToNK(Particle const *const p1, Particle const *const p2)
G4double NNToMissingStrangeness(Particle const *const p1, Particle const *const p2)
G4double piNToxPiN(const G4int xpi, Particle const *const p1, Particle const *const p2)
G4double etaNToSK(Particle const *const p1, Particle const *const p2)
G4double etaNToLK(Particle const *const p1, Particle const *const p2)
G4double NNbarToLLbar(Particle const *const p1, Particle const *const p2)
G4double NpiToLK(Particle const *const p1, Particle const *const p2)
G4double NNbarElastic(Particle const *const p1, Particle const *const p2)
antiparticle cross sections
G4double p_pimToSmKp(Particle const *const p1, Particle const *const p2)
G4double NpiToSKpi(Particle const *const p1, Particle const *const p2)
const G4double tenPi
@ MultiPionsAndResonancesCrossSections
@ AntiparticlesCrossSections
@ TruncatedMultiPionsCrossSections
#define G4ThreadLocal
Definition tls.hh:77