34#define INCLXX_IN_GEANT4_MODE 1
109 return 77./(plab+1.5);
115 return 6.3555*std::exp(-3.2481*alp-0.377*alp*alp);
117 else if (plab < 0.800) {
118 return (33.+196.*std::sqrt(std::pow(std::abs(plab-0.95),5)));
121 return 31./std::sqrt(plab);
126 return 34.*std::pow(plab/0.4, (-2.104));
128 else if (plab < 0.800) {
129 return (23.5+1000.*std::pow(plab-0.7, 4));
132 return (1250./(50.+plab)-4.*std::pow(plab-1.3, 2));
138 return 34.*std::pow(plab/0.4, (-2.104));
140 else if (plab < 0.800) {
141 return (23.5+1000.*std::pow(plab-0.7, 4));
144 return (1250./(50.+plab)-4.*std::pow(plab-1.3, 2));
153 const G4double momentumGeV = 0.001 * pLab;
158 if(isospin==2 || isospin==-2) {
160 xs = (41.0 + (60.0*momentumGeV - 54.0)*std::exp(-1.2*momentumGeV) - 77.0/(momentumGeV + 1.5));
161 }
else if(pLab >= 1500.0 && pLab < 2000.0) {
162 xs = (41.0 + 60.0*(momentumGeV - 0.9)*std::exp(-1.2*momentumGeV) - 1250.0/(momentumGeV+50.0)+ 4.0*std::pow(momentumGeV - 1.3, 2));
163 }
else if(pLab < 1500.0) {
164 xs = (23.5 + 24.6/(1.0 + std::exp(-10.0*momentumGeV + 12.0))
165 -1250.0/(momentumGeV +50.0)+4.0*std::pow(momentumGeV - 1.3,2));
167 }
else if(isospin==0) {
169 xs = (42.0 - 77.0/(momentumGeV + 1.5));
170 }
else if(pLab >= 1000.0 && pLab < 2000.0) {
171 xs = (24.2 + 8.9*momentumGeV - 31.1/std::sqrt(momentumGeV));
172 }
else if(pLab < 1000.0) {
173 xs = (33.0 + 196.0*std::sqrt(std::pow(std::abs(momentumGeV - 0.95),5))
174 -31.1/std::sqrt(momentumGeV));
178 if(xs < 0.0)
return 0.0;
185 return -2.33730e-06*std::pow(x, 3)+1.13819e-02*std::pow(x,2)
186 -1.83993e+01*x+9893.4;
187 }
else if(x > 1750.0 && x <= 2175.0) {
188 return 1.13531e-06*std::pow(x, 3)-6.91694e-03*std::pow(x, 2)
189 +1.39907e+01*x-9360.76;
191 return -3.18087*std::log(x)+52.9784;
198 return 0.00120683*(x-1372.52)*(x-1372.52)+26.2058;
199 }
else if(x > 1475.0 && x <= 1565.0) {
200 return 1.15873e-05*x*x+49965.6/((x-1519.59)*(x-1519.59)+2372.55);
201 }
else if(x > 1565.0 && x <= 2400.0) {
202 return 34.0248+43262.2/((x-1681.65)*(x-1681.65)+1689.35);
203 }
else if(x > 2400.0 && x <= 7500.0) {
204 return 3.3e-7*(x-7500.0)*(x-7500.0)+24.5;
224 return inelastic +
elastic(p1, p2);
237 if(x>10000.)
return 0.0;
245 }
else if(particle2->
isPion()) {
256 G4double q2=(y-1076.0*1076.0)*(y-800.0*800.0)/y/4.0;
260 G4double q3 = std::pow(std::sqrt(q2),3);
262 G4double spnResult = 326.5/(std::pow((x-1215.0-ramass)*2.0/(110.0-ramass), 2)+1.0);
263 spnResult = spnResult*(1.0-5.0*ramass/1215.0);
265 spnResult = spnResult*f3*cg/6.0;
267 if(x < 1200.0 && spnResult < 5.0) {
273 if((ind2t3 == 1 && ipit3 == 2) || (ind2t3 == -1 && ipit3 == -2))
275 else if((ind2t3 == 1 && ipit3 == -2) || (ind2t3 == -1 && ipit3 == 2))
288 if(isospin==4 || isospin==-4)
return 0.0;
302 if(Ecm <= 938.3 + deltaMass) {
306 if(Ecm < 938.3 + deltaMass + 2.0) {
307 Ecm = 938.3 + deltaMass + 2.0;
319 result *= 3.*(32.0 + isospin * isospin * (deltaIsospin * deltaIsospin - 5))/64.0;
320 result /= 1.0 + 0.25 * isospin * isospin;
350 return 5.5e-6 * x/(7.7 + x);
352 return (5.34 + 0.67*(x - 2.0)) * 1.0e-6;
356 G4double b = (7.16 - 1.63*x) * 1.0e-6;
357 return b/(1.0 + std::exp(-(x - 0.45)/0.05));
358 }
else if(pl < 1100.0) {
359 return (9.87 - 4.88 * x) * 1.0e-6;
361 return (3.68 + 0.76*x) * 1.0e-6;
Cross sections used in INCL4.6.
virtual G4double NpiToSK(Particle const *const p1, Particle const *const p2)
virtual G4double NLToNS(Particle const *const p1, Particle const *const p2)
Nucleon-Hyperon cross sections.
virtual G4double NDeltaToDeltaSK(Particle const *const p1, Particle const *const p2)
virtual G4double NSToNL(Particle const *const p1, Particle const *const p2)
virtual G4double NKToNK(Particle const *const p1, Particle const *const p2)
Nucleon-Kaon inelastic cross sections.
virtual G4double piNToxPiN(const G4int xpi, Particle const *const p1, Particle const *const p2)
Cross section for X pion production - piN Channel.
virtual G4double NpiToLK2pi(Particle const *const p1, Particle const *const p2)
virtual G4double NNToNLKpi(Particle const *const p1, Particle const *const p2)
virtual G4double NNToNNKKb(Particle const *const p1, Particle const *const p2)
virtual G4double total(Particle const *const p1, Particle const *const p2)
Total (elastic+inelastic) particle-particle cross section.
G4double elasticNNLegacy(Particle const *const part1, Particle const *const part2)
Internal implementation of the elastic cross section.
virtual G4double NSToNS(Particle const *const p1, Particle const *const p2)
virtual G4double NKbelastic(Particle const *const p1, Particle const *const p2)
virtual G4double NKelastic(Particle const *const p1, Particle const *const p2)
virtual G4double NKbToNKb2pi(Particle const *const p1, Particle const *const p2)
virtual G4double omegaNToPiN(Particle const *const p1, Particle const *const p2)
Cross section for OmegaN->PiN.
virtual G4double NDeltaToNNKKb(Particle const *const p1, Particle const *const p2)
virtual G4double NNToMissingStrangeness(Particle const *const p1, Particle const *const p2)
virtual G4double NKToNK2pi(Particle const *const p1, Particle const *const p2)
virtual G4double NNToNSK(Particle const *const p1, Particle const *const p2)
G4double spnPiMinusPHE(const G4double x)
virtual G4double NNToxPiNN(const G4int xpi, Particle const *const p1, Particle const *const p2)
Cross section for X pion production - NN Channel.
virtual G4double NNToNNOmegaExclu(Particle const *const particle1, Particle const *const particle2)
Cross section for Eta production (exclusive) - NN entrance channel.
virtual G4double NDeltaToNLK(Particle const *const p1, Particle const *const p2)
Nucleon-Delta to Stange particles cross sections.
virtual G4double piNToEtaN(Particle const *const p1, Particle const *const p2)
Cross sections for mesonic resonance production - piN Channel.
virtual G4double NNToNSKpi(Particle const *const p1, Particle const *const p2)
virtual G4double NKbToNKb(Particle const *const p1, Particle const *const p2)
Nucleon-antiKaon inelastic cross sections.
virtual G4double p_pizToSzKp(Particle const *const p1, Particle const *const p2)
virtual G4double piNToEtaPrimeN(Particle const *const p1, Particle const *const p2)
Cross section for PiN->EtaPrimeN.
G4double deltaProduction(const G4int isospin, const G4double pLab)
Internal function for the delta-production cross section.
virtual G4double NpiToNKKb(Particle const *const p1, Particle const *const p2)
virtual G4double NNToNNOmegaxPi(const G4int xpi, Particle const *const p1, Particle const *const p2)
Cross section for X pion production - NNEta Channel.
virtual G4double NNToNLK2pi(Particle const *const p1, Particle const *const p2)
virtual G4double etaNToPiN(Particle const *const p1, Particle const *const p2)
Cross sections for mesonic resonance absorption on nucleons - piN Channel.
virtual G4double NNToNDeltaEta(Particle const *const p1, Particle const *const p2)
Cross section for N-Delta-Eta production - NNEta Channel.
virtual G4double etaPrimeNToPiN(Particle const *const p1, Particle const *const p2)
Cross section for EtaPrimeN->PiN.
virtual G4double NpiToMissingStrangeness(Particle const *const p1, Particle const *const p2)
virtual G4double etaNToPiPiN(Particle const *const p1, Particle const *const p2)
Cross sections for mesonic resonance absorption on nucleon - pipiN Channel.
virtual G4double NpiToSK2pi(Particle const *const p1, Particle const *const p2)
virtual G4double NYelastic(Particle const *const p1, Particle const *const p2)
elastic scattering for Nucleon-Strange Particles cross sections
virtual G4double NNToNLK(Particle const *const p1, Particle const *const p2)
Nucleon-Nucleon to Stange particles cross sections.
virtual G4double NNToNNOmega(Particle const *const particle1, Particle const *const particle2)
Cross section for Eta production - NN entrance channel.
virtual G4double p_pimToSmKp(Particle const *const p1, Particle const *const p2)
virtual G4double NNToNNEtaExclu(Particle const *const p1, Particle const *const p2)
Cross section for Eta production (exclusive) - NN entrance channel.
virtual G4double NpiToSKpi(Particle const *const p1, Particle const *const p2)
virtual G4double NKbToL2pi(Particle const *const p1, Particle const *const p2)
virtual G4double NDeltaToNN(Particle const *const p1, Particle const *const p2)
Cross section for NDelta->NN.
virtual G4double NKbToLpi(Particle const *const p1, Particle const *const p2)
virtual G4double NKbToSpi(Particle const *const p1, Particle const *const p2)
virtual G4double NpiToLK(Particle const *const p1, Particle const *const p2)
Nucleon-Pion to Stange particles cross sections.
virtual G4double NNToNDelta(Particle const *const p1, Particle const *const p2)
Cross section for NN->NDelta.
virtual G4double p_pimToSzKz(Particle const *const p1, Particle const *const p2)
virtual G4double NKbToNKbpi(Particle const *const p1, Particle const *const p2)
virtual G4double piNToDelta(Particle const *const p1, Particle const *const p2)
Cross section for piN->NDelta.
virtual G4double calculateNNAngularSlope(G4double energyCM, G4int iso)
Calculate the slope of the NN DDXS.
virtual G4double NDeltaToDeltaLK(Particle const *const p1, Particle const *const p2)
virtual G4double NDeltaToNSK(Particle const *const p1, Particle const *const p2)
virtual G4double NNToNDeltaOmega(Particle const *const p1, Particle const *const p2)
Cross section for N-Delta-Eta production - NNEta Channel.
virtual G4double NNToNNEtaxPi(const G4int xpi, Particle const *const p1, Particle const *const p2)
Cross section for X pion production - NNEta Channel.
virtual G4double NNToNNEta(Particle const *const p1, Particle const *const p2)
Cross section for Eta production - NN entrance channel.
virtual G4double NpiToLKpi(Particle const *const p1, Particle const *const p2)
virtual G4double omegaNToPiPiN(Particle const *const p1, Particle const *const p2)
Cross section for OmegaN->PiPiN.
virtual G4double piNToOmegaN(Particle const *const p1, Particle const *const p2)
Cross section for PiN->OmegaN.
virtual G4double NKbToS2pi(Particle const *const p1, Particle const *const p2)
virtual G4double NNToNSK2pi(Particle const *const p1, Particle const *const p2)
virtual G4double NKToNKpi(Particle const *const p1, Particle const *const p2)
virtual G4double elastic(Particle const *const p1, Particle const *const p2)
Elastic particle-particle cross section.
G4double spnPiPlusPHE(const G4double x)
G4bool isPion() const
Is this a pion?
G4INCL::ParticleType getType() const
G4double getMass() const
Get the cached particle mass.
G4bool isDelta() const
Is it a Delta?
G4double squareTotalEnergyInCM(Particle const *const p1, Particle const *const p2)
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)
G4double momentumInLab(Particle const *const p1, Particle const *const p2)
gives the momentum in the lab frame of two particles.
const G4double effectiveNucleonMass2
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
const G4double effectiveNucleonMass
const G4double effectivePionMass