34 #define INCLXX_IN_GEANT4_MODE 1
55 namespace CrossSections {
57 return theCrossSections->elastic(p1,p2);
61 return theCrossSections->total(p1,p2);
65 return theCrossSections->NDeltaToNN(p1,p2);
69 return theCrossSections->NNToNDelta(p1,p2);
73 return theCrossSections->NNToxPiNN(xpi,p1,p2);
77 return theCrossSections->piNToDelta(p1,p2);
81 return theCrossSections->piNToxPiN(xpi,p1,p2);
85 return theCrossSections->piNToEtaN(p1,p2);
89 return theCrossSections->piNToOmegaN(p1,p2);
93 return theCrossSections->piNToEtaPrimeN(p1,p2);
97 return theCrossSections->etaNToPiN(p1,p2);
101 return theCrossSections->etaNToPiPiN(p1,p2);
105 return theCrossSections->omegaNToPiN(p1,p2);
109 return theCrossSections->omegaNToPiPiN(p1,p2);
113 return theCrossSections->etaPrimeNToPiN(p1,p2);
117 return theCrossSections->NNToNNEta(p1,p2);
121 return theCrossSections->NNToNNEtaExclu(p1,p2);
125 return theCrossSections->NNToNNEtaxPi(xpi,p1,p2);
129 return theCrossSections->NNToNDeltaEta(p1,p2);
134 return theCrossSections->NNToNNOmega(p1,p2);
138 return theCrossSections->NNToNNOmegaExclu(p1,p2);
142 return theCrossSections->NNToNNOmegaxPi(xpi,p1,p2);
146 return theCrossSections->NNToNDeltaOmega(p1,p2);
151 return theCrossSections->NYelastic(p1,p2);
155 return theCrossSections->NKbelastic(p1,p2);
159 return theCrossSections->NKelastic(p1,p2);
163 return theCrossSections->NNToNLK(p1,p2);
167 return theCrossSections->NNToNSK(p1,p2);
171 return theCrossSections->NNToNLKpi(p1,p2);
175 return theCrossSections->NNToNSKpi(p1,p2);
179 return theCrossSections->NNToNLK2pi(p1,p2);
183 return theCrossSections->NNToNSK2pi(p1,p2);
187 return theCrossSections->NNToNNKKb(p1,p2);
191 return theCrossSections->NNToMissingStrangeness(p1,p2);
195 return theCrossSections->NDeltaToNLK(p1,p2);
198 return theCrossSections->NDeltaToNSK(p1,p2);
201 return theCrossSections->NDeltaToDeltaLK(p1,p2);
204 return theCrossSections->NDeltaToDeltaSK(p1,p2);
208 return theCrossSections->NDeltaToNNKKb(p1,p2);
212 return theCrossSections->NpiToLK(p1,p2);
216 return theCrossSections->NpiToSK(p1,p2);
220 return theCrossSections->p_pimToSmKp(p1,p2);
224 return theCrossSections->p_pimToSzKz(p1,p2);
228 return theCrossSections->p_pizToSzKp(p1,p2);
232 return theCrossSections->NpiToLKpi(p1,p2);
236 return theCrossSections->NpiToSKpi(p1,p2);
240 return theCrossSections->NpiToLK2pi(p1,p2);
244 return theCrossSections->NpiToSK2pi(p1,p2);
248 return theCrossSections->NpiToNKKb(p1,p2);
252 return theCrossSections->NpiToMissingStrangeness(p1,p2);
256 return theCrossSections->NLToNS(p1,p2);
260 return theCrossSections->NSToNL(p1,p2);
264 return theCrossSections->NSToNS(p1,p2);
268 return theCrossSections->NKToNK(p1,p2);
272 return theCrossSections->NKToNKpi(p1,p2);
276 return theCrossSections->NKToNK2pi(p1,p2);
280 return theCrossSections->NKbToNKb(p1,p2);
284 return theCrossSections->NKbToSpi(p1,p2);
288 return theCrossSections->NKbToLpi(p1,p2);
292 return theCrossSections->NKbToS2pi(p1,p2);
296 return theCrossSections->NKbToL2pi(p1,p2);
300 return theCrossSections->NKbToNKbpi(p1,p2);
304 return theCrossSections->NKbToNKb2pi(p1,p2);
309 return theCrossSections->calculateNNAngularSlope(energyCM, iso);
317 piPlusProjectile.
setEnergy(piPlusProjectile.
getMass()+projectileKineticEnergy);
320 piZeroProjectile.
setEnergy(piZeroProjectile.
getMass()+projectileKineticEnergy);
323 piMinusProjectile.
setEnergy(piMinusProjectile.
getMass()+projectileKineticEnergy);
328 const G4double sigmapipp =
total(&piPlusProjectile, &protonTarget);
329 const G4double sigmapipn =
total(&piPlusProjectile, &neutronTarget);
330 const G4double sigmapi0p =
total(&piZeroProjectile, &protonTarget);
331 const G4double sigmapi0n =
total(&piZeroProjectile, &neutronTarget);
332 const G4double sigmapimp =
total(&piMinusProjectile, &protonTarget);
333 const G4double sigmapimn =
total(&piMinusProjectile, &neutronTarget);
342 return interactionDistance;
351 const G4double kineticEnergyPerNucleon = kineticEnergy / aSpecies.
theA;
354 protonProjectile.
setEnergy(protonProjectile.
getMass()+kineticEnergyPerNucleon);
357 neutronProjectile.
setEnergy(neutronProjectile.
getMass()+kineticEnergyPerNucleon);
362 const G4double sigmapp =
total(&protonProjectile, &protonTarget);
363 const G4double sigmapn =
total(&protonProjectile, &neutronTarget);
364 const G4double sigmann =
total(&neutronProjectile, &neutronTarget);
373 return interactionDistance;
389 const G4double sigmakpp =
total(&kpProjectile, &protonTarget);
390 const G4double sigmakpn =
total(&kpProjectile, &neutronTarget);
391 const G4double sigmakzp =
total(&kzProjectile, &protonTarget);
392 const G4double sigmakzn =
total(&kzProjectile, &neutronTarget);
397 return interactionDistance;
413 const G4double sigmakmp =
total(&kmProjectile, &protonTarget);
414 const G4double sigmakmn =
total(&kmProjectile, &neutronTarget);
415 const G4double sigmakzp =
total(&kzProjectile, &protonTarget);
416 const G4double sigmakzn =
total(&kzProjectile, &neutronTarget);
421 return interactionDistance;
444 const G4double sigmaln =
total(&lProjectile, &neutronTarget);
445 const G4double sigmaspp =
total(&spProjectile, &protonTarget);
446 const G4double sigmaspn =
total(&spProjectile, &neutronTarget);
447 const G4double sigmaszp =
total(&szProjectile, &protonTarget);
448 const G4double sigmaszn =
total(&szProjectile, &neutronTarget);
449 const G4double sigmasmp =
total(&smProjectile, &protonTarget);
450 const G4double sigmasmn =
total(&smProjectile, &neutronTarget);
455 return interactionDistance;
459 theCrossSections = c;
463 delete theCrossSections;
464 theCrossSections = NULL;
478 INCL_WARN(
"Truncated multipion cross sections were requested, but the specified maximum\n"
479 <<
"number of pions is <=0. Falling back to standard multipion cross-sections.\n");
G4double p_pimToSmKp(Particle const *const p1, Particle const *const p2)
G4double total(Particle const *const p1, Particle const *const p2)
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double NDeltaToNSK(Particle const *const p1, Particle const *const p2)
G4double interactionDistanceKN(const G4double projectileKineticEnergy)
Compute the "interaction distance".
G4double NDeltaToDeltaSK(Particle const *const p1, Particle const *const p2)
G4double NKbToSpi(Particle const *const p1, Particle const *const p2)
Cross sections used in INCL4.6.
G4double calculateNNAngularSlope(G4double energyCM, G4int iso)
Calculate the slope of the NN DDXS.
Cross sections used in INCL Multipions.
G4double NNToNNEta(Particle const *const p1, Particle const *const p2)
const ThreeVector & adjustMomentumFromEnergy()
Rescale the momentum to match the total energy.
G4double NNToNNOmegaExclu(Particle const *const p1, Particle const *const p2)
G4double NKbToNKb2pi(Particle const *const p1, Particle const *const p2)
G4double p_pimToSzKz(Particle const *const p1, Particle const *const p2)
G4double elastic(Particle const *const p1, Particle const *const p2)
G4double NKbToS2pi(Particle const *const p1, Particle const *const p2)
G4double NNToNNEtaExclu(Particle const *const p1, Particle const *const p2)
G4double NDeltaToDeltaLK(Particle const *const p1, Particle const *const p2)
G4double interactionDistanceYN(const G4double projectileKineticEnergy)
Compute the "interaction distance".
G4double NNToNDeltaOmega(Particle const *const p1, Particle const *const p2)
G4double getMass() const
Get the cached particle mass.
G4double NYelastic(Particle const *const p1, Particle const *const p2)
Cross sections used in INCL4.6.
G4double omegaNToPiPiN(Particle const *const p1, Particle const *const p2)
G4int getMaxNumberMultipions() const
Get the maximum number of pions for multipion collisions.
void deleteCrossSections()
G4double piNToDelta(Particle const *const p1, Particle const *const p2)
G4double NpiToSK2pi(Particle const *const p1, Particle const *const p2)
G4double NNToNNOmega(Particle const *const p1, Particle const *const p2)
G4double piNToEtaN(Particle const *const p1, Particle const *const p2)
G4double interactionDistanceNN(const ParticleSpecies &aSpecies, const G4double kineticEnergy)
Compute the "interaction distance".
G4double NNToNSKpi(Particle const *const p1, Particle const *const p2)
G4double piNToOmegaN(Particle const *const p1, Particle const *const p2)
G4double etaPrimeNToPiN(Particle const *const p1, Particle const *const p2)
G4double NLToNS(Particle const *const p1, Particle const *const p2)
G4double NNToMissingStrangeness(Particle const *const p1, Particle const *const p2)
G4double NKToNKpi(Particle const *const p1, Particle const *const p2)
G4double NDeltaToNN(Particle const *const p1, Particle const *const p2)
G4double NNToNNEtaxPi(const G4int xpi, Particle const *const p1, Particle const *const p2)
G4double NpiToSKpi(Particle const *const p1, Particle const *const p2)
Abstract interface for the cross-section classes.
G4double NDeltaToNNKKb(Particle const *const p1, Particle const *const p2)
G4double piNToEtaPrimeN(Particle const *const p1, Particle const *const p2)
G4double NSToNS(Particle const *const p1, Particle const *const p2)
G4double NpiToSK(Particle const *const p1, Particle const *const p2)
Truncated multipion cross sections.
G4double etaNToPiPiN(Particle const *const p1, Particle const *const p2)
Truncated multipion cross sections.
G4double NpiToLK2pi(Particle const *const p1, Particle const *const p2)
CrossSectionsType getCrossSectionsType() const
Get the Cross Section type.
G4double NNToNLKpi(Particle const *const p1, Particle const *const p2)
Multipion, mesonic Resonances and strange cross sections.
G4double NpiToNKKb(Particle const *const p1, Particle const *const p2)
G4double NKbToL2pi(Particle const *const p1, Particle const *const p2)
G4double omegaNToPiN(Particle const *const p1, Particle const *const p2)
G4double NDeltaToNLK(Particle const *const p1, Particle const *const p2)
G4double NNToNSK(Particle const *const p1, Particle const *const p2)
G4double interactionDistancePiN(const G4double projectileKineticEnergy)
Compute the "interaction distance".
G4double NSToNL(Particle const *const p1, Particle const *const p2)
G4double NNToNSK2pi(Particle const *const p1, Particle const *const p2)
Multipion and mesonic Resonances cross sections.
G4double NKbToNKbpi(Particle const *const p1, Particle const *const p2)
G4double NNToNDelta(Particle const *const p1, Particle const *const p2)
Multipion, mesonic Resonances and strange cross sections.
G4double interactionDistanceKbarN(const G4double projectileKineticEnergy)
Compute the "interaction distance".
void setEnergy(G4double energy)
G4double NKToNK2pi(Particle const *const p1, Particle const *const p2)
G4double NpiToLKpi(Particle const *const p1, Particle const *const p2)
G4double NKbelastic(Particle const *const p1, Particle const *const p2)
G4double NpiToMissingStrangeness(Particle const *const p1, Particle const *const p2)
G4double NKelastic(Particle const *const p1, Particle const *const p2)
G4double NNToxPiNN(const G4int xpi, Particle const *const p1, Particle const *const p2)
G4double NNToNNKKb(Particle const *const p1, Particle const *const p2)
G4double etaNToPiN(Particle const *const p1, Particle const *const p2)
G4double piNToxPiN(const G4int xpi, Particle const *const p1, Particle const *const p2)
G4double p_pizToSzKp(Particle const *const p1, Particle const *const p2)
G4double NNToNLK2pi(Particle const *const p1, Particle const *const p2)
Cross sections used in INCL Multipions.
void initialize(Config const *const theConfig)
G4double NNToNLK(Particle const *const p1, Particle const *const p2)
Strange cross sections.
G4double NKbToNKb(Particle const *const p1, Particle const *const p2)
Multipion and mesonic Resonances cross sections.
G4double NNToNNOmegaxPi(const G4int xpi, Particle const *const p1, Particle const *const p2)
G4double NKToNK(Particle const *const p1, Particle const *const p2)
G4double NNToNDeltaEta(Particle const *const p1, Particle const *const p2)
G4double NKbToLpi(Particle const *const p1, Particle const *const p2)
void setCrossSections(ICrossSections *c)
G4double NpiToLK(Particle const *const p1, Particle const *const p2)