Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4INCL::CrossSectionsMultiPions Class Reference

Cross sections used in INCL Multipions. More...

#include <G4INCLCrossSectionsMultiPions.hh>

Inheritance diagram for G4INCL::CrossSectionsMultiPions:
Collaboration diagram for G4INCL::CrossSectionsMultiPions:

Public Member Functions

 CrossSectionsMultiPions ()
 
virtual G4double elastic (Particle const *const p1, Particle const *const p2)
 Elastic particle-particle cross section. More...
 
virtual G4double total (Particle const *const p1, Particle const *const p2)
 Total (elastic+inelastic) particle-particle cross section. More...
 
virtual G4double NDeltaToNN (Particle const *const p1, Particle const *const p2)
 Cross section for NDelta->NN. More...
 
virtual G4double NNToNDelta (Particle const *const p1, Particle const *const p2)
 Cross section for Delta production - NN Channel. More...
 
virtual G4double piNToDelta (Particle const *const p1, Particle const *const p2)
 Cross section for Delta production - piN Channel. More...
 
virtual G4double piNToxPiN (const G4int xpi, Particle const *const p1, Particle const *const p2)
 Cross section for X pion production - piN Channel. More...
 
virtual G4double NNToxPiNN (const G4int xpi, Particle const *const p1, Particle const *const p2)
 Cross section for X pion production - NN Channel. More...
 
virtual G4double calculateNNAngularSlope (G4double energyCM, G4int iso)
 Calculate the slope of the NN DDXS. More...
 
virtual G4double piNToEtaN (Particle const *const p1, Particle const *const p2)
 Cross sections for mesonic resonance production - piN Channel. More...
 
virtual G4double piNToOmegaN (Particle const *const p1, Particle const *const p2)
 Cross section for PiN->OmegaN. More...
 
virtual G4double piNToEtaPrimeN (Particle const *const p1, Particle const *const p2)
 Cross section for PiN->EtaPrimeN. More...
 
virtual G4double etaNToPiPiN (Particle const *const p1, Particle const *const p2)
 Cross sections for mesonic resonance absorption on nucleon - pipiN Channel. More...
 
virtual G4double omegaNToPiPiN (Particle const *const p1, Particle const *const p2)
 Cross section for OmegaN->PiPiN. More...
 
virtual G4double etaNToPiN (Particle const *const p1, Particle const *const p2)
 Cross sections for mesonic resonance absorption on nucleon - piN Channel. More...
 
virtual G4double omegaNToPiN (Particle const *const p1, Particle const *const p2)
 Cross section for OmegaN->PiN. More...
 
virtual G4double etaPrimeNToPiN (Particle const *const p1, Particle const *const p2)
 Cross section for EtaPrimeN->PiN. More...
 
virtual G4double NNToNNEta (Particle const *const particle1, Particle const *const particle2)
 Cross section for Eta production - NN entrance channel. More...
 
virtual G4double NNToNNEtaExclu (Particle const *const particle1, Particle const *const particle2)
 Cross section for Eta production (exclusive) - NN entrance channel. More...
 
virtual G4double NNToNNEtaxPi (const G4int xpi, Particle const *const p1, Particle const *const p2)
 Cross section for X pion production - NNEta Channel. More...
 
virtual G4double NNToNDeltaEta (Particle const *const p1, Particle const *const p2)
 Cross section for N-Delta-Eta production - NNEta Channel. More...
 
virtual G4double NNToNNOmega (Particle const *const particle1, Particle const *const particle2)
 Cross section for Eta production - NN entrance channel. More...
 
virtual G4double NNToNNOmegaExclu (Particle const *const particle1, Particle const *const particle2)
 Cross section for Eta production (exclusive) - NN entrance channel. More...
 
virtual G4double NNToNNOmegaxPi (const G4int xpi, Particle const *const p1, Particle const *const p2)
 Cross section for X pion production - NNEta Channel. More...
 
virtual G4double NNToNDeltaOmega (Particle const *const p1, Particle const *const p2)
 Cross section for N-Delta-Eta production - NNEta Channel. More...
 
- Public Member Functions inherited from G4INCL::ICrossSections
 ICrossSections ()
 
virtual ~ICrossSections ()
 

Protected Member Functions

G4double NNElastic (Particle const *const part1, Particle const *const part2)
 Internal implementation of the NN elastic cross section. More...
 
G4double NNElasticFixed (const G4double s, const G4int i)
 Internal implementation of the NN elastic cross section with fixed isospin. More...
 
G4double NNTot (Particle const *const part1, Particle const *const part2)
 Internal implementation of the NN total cross section. More...
 
G4double NNTotFixed (const G4double s, const G4int i)
 Internal implementation of the NN total cross section with fixed isospin. More...
 
G4double NNInelasticIso (const G4double ener, const G4int iso)
 Internal implementation of the isospin dependent NN reaction cross section. More...
 
virtual G4double NNOnePiOrDelta (const G4double ener, const G4int iso, const G4double xsiso)
 Cross section for direct 1-pion production + delta production - NN entrance channel. More...
 
virtual G4double NNTwoPi (const G4double ener, const G4int iso, const G4double xsiso)
 Cross section for direct 2-pion production - NN entrance channel. More...
 
virtual G4double NNThreePi (const G4double ener, const G4int iso, const G4double xsiso, const G4double xs1pi, const G4double xs2pi)
 Cross section for direct 3-pion production - NN entrance channel. More...
 
virtual G4double NNOnePi (Particle const *const part1, Particle const *const part2)
 Cross section for direct 1-pion production - NN entrance channel. More...
 
virtual G4double NNOnePiOrDelta (Particle const *const part1, Particle const *const part2)
 Cross section for direct 1-pion production - NN entrance channel. More...
 
virtual G4double NNTwoPi (Particle const *const part1, Particle const *const part2)
 Cross section for direct 2-pion production - NN entrance channel. More...
 
virtual G4double NNThreePi (Particle const *const part1, Particle const *const part2)
 Cross section for direct 3-pion production - NN entrance channel. More...
 
virtual G4double NNFourPi (Particle const *const part1, Particle const *const part2)
 Cross section for direct 4-pion production - NN entrance channel. More...
 
G4double spnPiPlusPHE (const G4double x)
 Internal function for pion cross sections. More...
 
G4double spnPiMinusPHE (const G4double x)
 Internal function for pion cross sections. More...
 
G4double piNIne (Particle const *const p1, Particle const *const p2)
 
G4double piNTot (Particle const *const p1, Particle const *const p2)
 
G4double piNTopiN (Particle const *const p1, Particle const *const p2)
 
G4double piPluspIne (Particle const *const p1, Particle const *const p2)
 
G4double piMinuspIne (Particle const *const p1, Particle const *const p2)
 
G4double piPluspOnePi (Particle const *const p1, Particle const *const p2)
 
G4double piMinuspOnePi (Particle const *const p1, Particle const *const p2)
 
G4double piPluspTwoPi (Particle const *const p1, Particle const *const p2)
 
G4double piMinuspTwoPi (Particle const *const p1, Particle const *const p2)
 
virtual G4double piNOnePi (Particle const *const p1, Particle const *const p2)
 Cross section for One (more) pion production - piN entrance channel. More...
 
virtual G4double piNTwoPi (Particle const *const p1, Particle const *const p2)
 Cross section for Two (more) pion production - piN entrance channel. More...
 

Protected Attributes

const HornerC7 s11pzHC
 Horner coefficients for s11pz. More...
 
const HornerC8 s01ppHC
 Horner coefficients for s01pp. More...
 
const HornerC4 s01pzHC
 Horner coefficients for s01pz. More...
 
const HornerC4 s11pmHC
 Horner coefficients for s11pm. More...
 
const HornerC5 s12pmHC
 Horner coefficients for s12pm. More...
 
const HornerC3 s12ppHC
 Horner coefficients for s12pp. More...
 
const HornerC4 s12zzHC
 Horner coefficients for s12zz. More...
 
const HornerC4 s02pzHC
 Horner coefficients for s02pz. More...
 
const HornerC6 s02pmHC
 Horner coefficients for s02pm. More...
 
const HornerC4 s12mzHC
 Horner coefficients for s12mz. More...
 

Static Protected Attributes

static const G4int nMaxPiNN = 4
 Maximum number of outgoing pions in NN collisions. More...
 
static const G4int nMaxPiPiN = 4
 Maximum number of outgoing pions in piN collisions. More...
 
static const G4double s11pzOOT = 0.0035761542037692665889
 One over threshold for s11pz. More...
 
static const G4double s01ppOOT = 0.003421025623481919853
 One over threshold for s01pp. More...
 
static const G4double s01pzOOT = 0.0035739814152966403123
 One over threshold for s01pz. More...
 
static const G4double s11pmOOT = 0.0034855350296270480281
 One over threshold for s11pm. More...
 
static const G4double s12pmOOT = 0.0016672224074691565119
 One over threshold for s12pm. More...
 
static const G4double s12ppOOT = 0.0016507643038726931312
 One over threshold for s12pp. More...
 
static const G4double s12zzOOT = 0.0011111111111111111111
 One over threshold for s12zz. More...
 
static const G4double s02pzOOT = 0.00125
 One over threshold for s02pz. More...
 
static const G4double s02pmOOT = 0.0016661112962345883443
 One over threshold for s02pm. More...
 
static const G4double s12mzOOT = 0.0017047391749062392793
 One over threshold for s12mz. More...
 

Detailed Description

Cross sections used in INCL Multipions.

Definition at line 54 of file G4INCLCrossSectionsMultiPions.hh.

Constructor & Destructor Documentation

G4INCL::CrossSectionsMultiPions::CrossSectionsMultiPions ( )

Definition at line 71 of file G4INCLCrossSectionsMultiPions.cc.

71  :
72  s11pzHC(-2.228000000000294018,8.7560000000005723725,-0.61000000000023239325,-5.4139999999999780324,3.3338333333333348023,-0.75835000000000022049,0.060623611111111114688),
73  s01ppHC(2.0570000000126518344,-6.029000000012135826,36.768500000002462784,-45.275666666666553533,25.112666666666611953,-7.2174166666666639187,1.0478875000000000275,-0.060804365079365080846),
74  s01pzHC(0.18030000000000441851,7.8700999999999953598,-4.0548999999999990425,0.555199999999999959),
75  s11pmHC(0.20590000000000031866,3.3450999999999993936,-1.4401999999999997825,0.17076666666666664973),
76  s12pmHC(-0.77235999999999901328,4.2626599999999991117,-1.9008899999999997323,0.30192266666666663379,-0.012270833333333331986),
77  s12ppHC(-0.75724999999999975664,2.0934399999999998565,-0.3803099999999999814),
78  s12zzHC(-0.89599999999996965072,7.882999999999978632,-7.1049999999999961928,1.884333333333333089),
79  s02pzHC(-1.0579999999999967036,11.113999999999994089,-8.5259999999999990196,2.0051666666666666525),
80  s02pmHC(2.4009000000012553286,-7.7680000000013376183,20.619000000000433505,-16.429666666666723928,5.2525708333333363472,-0.58969166666666670206),
81  s12mzHC(-0.21858699999999976269,1.9148999999999999722,-0.31727500000000001065,-0.027695000000000000486)
82  {
83  }
const HornerC4 s12zzHC
Horner coefficients for s12zz.
const HornerC4 s02pzHC
Horner coefficients for s02pz.
const HornerC8 s01ppHC
Horner coefficients for s01pp.
const HornerC4 s01pzHC
Horner coefficients for s01pz.
const HornerC3 s12ppHC
Horner coefficients for s12pp.
const HornerC7 s11pzHC
Horner coefficients for s11pz.
const HornerC4 s12mzHC
Horner coefficients for s12mz.
const HornerC4 s11pmHC
Horner coefficients for s11pm.
const HornerC6 s02pmHC
Horner coefficients for s02pm.
const HornerC5 s12pmHC
Horner coefficients for s12pm.

Member Function Documentation

G4double G4INCL::CrossSectionsMultiPions::calculateNNAngularSlope ( G4double  energyCM,
G4int  iso 
)
virtual

Calculate the slope of the NN DDXS.

Parameters
energyCMenergy in the CM frame, in MeV
isototal isospin of the system
Returns
the slope of the angular distribution

Implements G4INCL::ICrossSections.

Definition at line 820 of file G4INCLCrossSectionsMultiPions.cc.

820  {
821  G4double x = 0.001 * pl; // Change to GeV
822  if(iso != 0) {
823  if(pl <= 2000.0) {
824  x = std::pow(x, 8);
825  return 5.5e-6 * x/(7.7 + x);
826  } else {
827  return (5.34 + 0.67*(x - 2.0)) * 1.0e-6;
828  }
829  } else {
830  if(pl < 800.0) {
831  G4double b = (7.16 - 1.63*x) * 1.0e-6;
832  return b/(1.0 + std::exp(-(x - 0.45)/0.05));
833  } else if(pl < 1100.0) {
834  return (9.87 - 4.88 * x) * 1.0e-6;
835  } else {
836  return (3.68 + 0.76*x) * 1.0e-6;
837  }
838  }
839  return 0.0; // Should never reach this point
840  }
double G4double
Definition: G4Types.hh:76
G4double G4INCL::CrossSectionsMultiPions::elastic ( Particle const *const  p1,
Particle const *const  p2 
)
virtual

Elastic particle-particle cross section.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsTruncatedMultiPions, and G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 801 of file G4INCLCrossSectionsMultiPions.cc.

801  {
802 // if(!p1->isPion() && !p2->isPion()){
803  if((p1->isNucleon()||p1->isDelta()) && (p2->isNucleon()||p2->isDelta())){
804  return NNElastic(p1, p2);
805  }
806 // else if (p1->isNucleon() || p2->isNucleon()){
807  else if ((p1->isNucleon() && p2->isPion()) || (p2->isNucleon() && p1->isPion())){
808  G4double pielas = piNTot(p1,p2) - piNIne(p1,p2) - piNToDelta(p1,p2);
809  if (pielas < 0.){
810  pielas = 0.;
811  }
812 // return piNTot(p1,p2) - piNIne(p1,p2) - piNToDelta(p1,p2);
813  return pielas;
814  }
815  else {
816  return 0.0;
817  }
818  }
G4double piNIne(Particle const *const p1, Particle const *const p2)
virtual G4double piNToDelta(Particle const *const p1, Particle const *const p2)
Cross section for Delta production - piN Channel.
G4double NNElastic(Particle const *const part1, Particle const *const part2)
Internal implementation of the NN elastic cross section.
G4double piNTot(Particle const *const p1, Particle const *const p2)
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::etaNToPiN ( Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross sections for mesonic resonance absorption on nucleon - piN Channel.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1226 of file G4INCLCrossSectionsMultiPions.cc.

1226  {
1227  //
1228  // Eta-Nucleon producing Pion cross sections
1229  //
1230  return 0.;
1231  }
G4double G4INCL::CrossSectionsMultiPions::etaNToPiPiN ( Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross sections for mesonic resonance absorption on nucleon - pipiN Channel.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1234 of file G4INCLCrossSectionsMultiPions.cc.

1234  {
1235  //
1236  // Eta-Nucleon producing Two Pions cross sections
1237  //
1238  return 0.;
1239  }
G4double G4INCL::CrossSectionsMultiPions::etaPrimeNToPiN ( Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross section for EtaPrimeN->PiN.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1256 of file G4INCLCrossSectionsMultiPions.cc.

1256  {
1257  //
1258  // EtaPrime-Nucleon producing Pion cross sections
1259  //
1260  return 0.;
1261  }
G4double G4INCL::CrossSectionsMultiPions::NDeltaToNN ( Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross section for NDelta->NN.

Implements G4INCL::ICrossSections.

Definition at line 743 of file G4INCLCrossSectionsMultiPions.cc.

743  {
744  const G4int isospin = ParticleTable::getIsospin(p1->getType()) + ParticleTable::getIsospin(p2->getType());
745  if(isospin==4 || isospin==-4) return 0.0;
746 
748  G4double Ecm = std::sqrt(s);
749  G4int deltaIsospin;
750  G4double deltaMass;
751  if(p1->isDelta()) {
752  deltaIsospin = ParticleTable::getIsospin(p1->getType());
753  deltaMass = p1->getMass();
754  } else {
755  deltaIsospin = ParticleTable::getIsospin(p2->getType());
756  deltaMass = p2->getMass();
757  }
758 
759  if(Ecm <= 938.3 + deltaMass) {
760  return 0.0;
761  }
762 
763  if(Ecm < 938.3 + deltaMass + 2.0) {
764  Ecm = 938.3 + deltaMass + 2.0;
765  s = Ecm*Ecm;
766  }
767 
769  (s - std::pow(ParticleTable::effectiveNucleonMass + deltaMass, 2));
770  const G4double y = s/(s - std::pow(deltaMass - ParticleTable::effectiveNucleonMass, 2));
771  /* Concerning the way we calculate the lab momentum, see the considerations
772  * in CrossSections::elasticNNLegacy().
773  */
774  G4double sDelta;
775  const G4double xsiso2=NNInelasticIso(Ecm, 2);
776  if (isospin != 0)
777  sDelta = NNOnePiOrDelta(Ecm, isospin, xsiso2);
778  else {
779  const G4double xsiso0=NNInelasticIso(Ecm, 0);
780  sDelta = 0.25*(NNOnePiOrDelta(Ecm, 0, xsiso0)+ NNOnePiOrDelta(Ecm, 2, xsiso2));
781  }
782  G4double result = 0.5 * x * y * sDelta;
783  /* modification for pion-induced cascade (see JC and MC LEMAIRE,NPA489(88)781
784  * result=3.*result
785  * pi absorption increased also for internal pions (7/3/01)
786  */
787  result *= 3.*(32.0 + isospin * isospin * (deltaIsospin * deltaIsospin - 5))/64.0;
788  result /= 1.0 + 0.25 * (isospin * isospin);
789  return result;
790  }
G4double G4ParticleHPJENDLHEData::G4double result
virtual G4double NNOnePiOrDelta(const G4double ener, const G4int iso, const G4double xsiso)
Cross section for direct 1-pion production + delta production - NN entrance channel.
G4double NNInelasticIso(const G4double ener, const G4int iso)
Internal implementation of the isospin dependent NN reaction cross section.
G4double squareTotalEnergyInCM(Particle const *const p1, Particle const *const p2)
int G4int
Definition: G4Types.hh:78
const XML_Char * s
Definition: expat.h:262
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
const G4double effectiveNucleonMass2
double G4double
Definition: G4Types.hh:76
const G4double effectiveNucleonMass

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::NNElastic ( Particle const *const  part1,
Particle const *const  part2 
)
protected

Internal implementation of the NN elastic cross section.

Definition at line 85 of file G4INCLCrossSectionsMultiPions.cc.

85  {
86 
87  /* The NN cross section is parametrised as a function of the lab momentum
88  * of one of the nucleons. For NDelta or DeltaDelta, the physical
89  * assumption is that the cross section is the same as NN *for the same
90  * total CM energy*. Thus, we calculate s from the particles involved, and
91  * we convert this value to the lab momentum of a nucleon *as if this were
92  * an NN collision*.
93  */
95 
96  if(part1->isNucleon() && part2->isNucleon()) { // NN
97  const G4int i = ParticleTable::getIsospin(part1->getType())
98  + ParticleTable::getIsospin(part2->getType());
99  return NNElasticFixed(s, i);
100  }
101  else { // Nucleon-Delta and Delta-Delta
103  if (plab < 0.440) {
104  return 34.*std::pow(plab/0.4, (-2.104));
105  }
106  else if (plab < 0.800) {
107  return 23.5+1000.*std::pow(plab-0.7, 4);
108  }
109  else if (plab <= 2.0) {
110  return 1250./(50.+plab)-4.*std::pow(plab-1.3, 2);
111  }
112  else {
113  return 77./(plab+1.5);
114  }
115  }
116  }
G4double squareTotalEnergyInCM(Particle const *const p1, Particle const *const p2)
G4double NNElasticFixed(const G4double s, const G4int i)
Internal implementation of the NN elastic cross section with fixed isospin.
int G4int
Definition: G4Types.hh:78
const XML_Char * s
Definition: expat.h:262
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
G4double momentumInLab(Particle const *const p1, Particle const *const p2)
gives the momentum in the lab frame of two particles.
double G4double
Definition: G4Types.hh:76
const G4double effectiveNucleonMass

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::NNElasticFixed ( const G4double  s,
const G4int  i 
)
protected

Internal implementation of the NN elastic cross section with fixed isospin.

Definition at line 118 of file G4INCLCrossSectionsMultiPions.cc.

118  {
119 
120  /* From NNElastic, with isospin fixed and for NN only.
121  */
122 
124 
125  if (i == 0) { // pn
126  if (plab < 0.446) {
127  G4double alp=std::log(plab);
128  return 6.3555*std::exp(-3.2481*alp-0.377*alp*alp);
129  }
130  else if (plab < 0.851) {
131  return 33.+196.*std::pow(std::fabs(plab-0.95),2.5);
132  }
133  else if (plab <= 2.0) {
134  return 31./std::sqrt(plab);
135  }
136  else {
137  return 77./(plab+1.5);
138  }
139  }
140  else { // pp and nn
141  if (plab < 0.440) {
142  return 34.*std::pow(plab/0.4, (-2.104));
143  }
144  else if (plab < 0.8067) {
145  return 23.5+1000.*std::pow(plab-0.7, 4);
146  }
147  else if (plab <= 2.0) {
148  return 1250./(50.+plab)-4.*std::pow(plab-1.3, 2);
149  }
150  else if (plab <= 3.0956) {
151  return 77./(plab+1.5);
152  }
153  else {
154  G4double alp=std::log(plab);
155  return 11.2+25.5*std::pow(plab, -1.12)+0.151*std::pow(alp, 2)-1.62*alp;
156  }
157  }
158  }
const XML_Char * s
Definition: expat.h:262
G4double momentumInLab(Particle const *const p1, Particle const *const p2)
gives the momentum in the lab frame of two particles.
double G4double
Definition: G4Types.hh:76
const G4double effectiveNucleonMass

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::NNFourPi ( Particle const *const  part1,
Particle const *const  part2 
)
protectedvirtual

Cross section for direct 4-pion production - NN entrance channel.

Definition at line 518 of file G4INCLCrossSectionsMultiPions.cc.

518  {
519  const G4double s = KinematicsUtils::squareTotalEnergyInCM(particle1, particle2);
520  if(s<6.25E6)
521  return 0.;
522  const G4double sigma = NNTot(particle1, particle2) - NNElastic(particle1, particle2) - NNOnePiOrDelta(particle1, particle2) - NNTwoPi(particle1, particle2) - NNThreePi(particle1, particle2);
523  return ((sigma>1.e-9) ? sigma : 0.);
524  }
virtual G4double NNOnePiOrDelta(const G4double ener, const G4int iso, const G4double xsiso)
Cross section for direct 1-pion production + delta production - NN entrance channel.
virtual G4double NNTwoPi(const G4double ener, const G4int iso, const G4double xsiso)
Cross section for direct 2-pion production - NN entrance channel.
G4double squareTotalEnergyInCM(Particle const *const p1, Particle const *const p2)
virtual G4double NNThreePi(const G4double ener, const G4int iso, const G4double xsiso, const G4double xs1pi, const G4double xs2pi)
Cross section for direct 3-pion production - NN entrance channel.
G4double NNElastic(Particle const *const part1, Particle const *const part2)
Internal implementation of the NN elastic cross section.
G4double NNTot(Particle const *const part1, Particle const *const part2)
Internal implementation of the NN total cross section.
const XML_Char * s
Definition: expat.h:262
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::NNInelasticIso ( const G4double  ener,
const G4int  iso 
)
protected

Internal implementation of the isospin dependent NN reaction cross section.

Definition at line 220 of file G4INCLCrossSectionsMultiPions.cc.

220  {
221 
222  const G4double s = ener*ener;
223  G4double sincl;
224 
225  if (iso != 0) {
226  if(s>=4074595.287720512986) { // plab>800 MeV/c
227  sincl = NNTotFixed(s, 2)-NNElasticFixed(s, 2);
228  }
229  else {
230  sincl = 0. ;
231  }
232  } else {
233  if(s>=4074595.287720512986) { // plab>800 MeV/c
234  sincl = 2*(NNTotFixed(s, 0)-NNElasticFixed(s, 0))-(NNTotFixed(s, 2)-NNElasticFixed(s, 2));
235  }
236  else {
237  return 0. ;
238  }
239  }
240  if (sincl < 0.) sincl = 0.;
241  return sincl;
242  }
G4double NNElasticFixed(const G4double s, const G4int i)
Internal implementation of the NN elastic cross section with fixed isospin.
const XML_Char * s
Definition: expat.h:262
G4double NNTotFixed(const G4double s, const G4int i)
Internal implementation of the NN total cross section with fixed isospin.
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::NNOnePi ( Particle const *const  part1,
Particle const *const  part2 
)
protectedvirtual

Cross section for direct 1-pion production - NN entrance channel.

Definition at line 449 of file G4INCLCrossSectionsMultiPions.cc.

449  {
450  // Cross section for nucleon-nucleon directly producing one pion
451 
452  const G4int iso=ParticleTable::getIsospin(particle1->getType()) + ParticleTable::getIsospin(particle2->getType());
453  if (iso!=0)
454  return 0.;
455 
456  const G4double ener=KinematicsUtils::totalEnergyInCM(particle1, particle2);
457 
458  const G4double xsiso2=NNInelasticIso(ener, 2);
459  const G4double xsiso0=NNInelasticIso(ener, 0);
460  return 0.25*(NNOnePiOrDelta(ener, 0, xsiso0)+ NNOnePiOrDelta(ener, 2, xsiso2));
461  }
virtual G4double NNOnePiOrDelta(const G4double ener, const G4int iso, const G4double xsiso)
Cross section for direct 1-pion production + delta production - NN entrance channel.
G4double NNInelasticIso(const G4double ener, const G4int iso)
Internal implementation of the isospin dependent NN reaction cross section.
int G4int
Definition: G4Types.hh:78
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
double G4double
Definition: G4Types.hh:76
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::NNOnePiOrDelta ( const G4double  ener,
const G4int  iso,
const G4double  xsiso 
)
protectedvirtual

Cross section for direct 1-pion production + delta production - NN entrance channel.

Definition at line 244 of file G4INCLCrossSectionsMultiPions.cc.

244  {
245 
246  /* Article J. Physique 48 (1987)1901-1924 "Energy dependence of
247  nucleon-cucleon inelastic total cross-sections."
248  J. Bystricky, P. La France, F. Lehar, F. Perrot, T. Siemiarczuk & P. Winternitz
249  S11PZ= section pp->pp pi0
250  S01PP= section pp->pn pi+
251  S01PZ= section pn->pn pi0
252  S11PM= section pn->pp pi-
253  S= X-Section, 1st number : 1 if pp and 0 if pn
254  2nd number = number of pions, PP= pi+; PZ= pi0 ; PM= pi-
255  */
256 
257  const G4double s = ener*ener;
259 
260  G4double snnpit1=0.;
261  G4double snnpit=0.;
262  G4double s11pz=0.;
263  G4double s01pp=0.;
264  G4double s01pz=0.;
265  G4double s11pm=0.;
266 
267  if ((iso != 0) && (plab < 2.1989)) {
268  snnpit = xsiso - NNTwoPi(ener, iso, xsiso);
269  if (snnpit < 1.e-8) snnpit=0.;
270  return snnpit;
271  }
272  else if ((iso == 0) && (plab < 1.7369)) {
273  snnpit = xsiso;
274  if (snnpit < 1.e-8) snnpit=0.;
275  return snnpit;
276  }
277 
278 //s11pz
279  if (plab > 18.) {
280  s11pz=55.185/std::pow((0.1412*plab+5),2);
281  }
282  else if (plab > 13.9) {
283  G4double alp=std::log(plab);
284  s11pz=6.67-13.3*std::pow(plab, -6.18)+0.456*alp*alp-3.29*alp;
285  }
286  else if (plab >= 0.7765) {
288  s11pz=b*b;
289  }
290 //s01pp
291  if (plab >= 0.79624) {
293  s01pp=b*b;
294  }
295 
296 // channel T=1
297  snnpit1=s11pz+s01pp;
298  if (snnpit1 < 1.e-8) snnpit1=0.;
299  if (iso != 0) {
300  return snnpit1;
301  }
302 
303 //s01pz
304  if (plab > 4.5) {
305  s01pz=15289.4/std::pow((11.573*plab+5),2);
306  }
307  else if (plab >= 0.777) {
309  s01pz=b*b;
310  }
311 //s11pm
312  if (plab > 14.) {
313  s11pm=46.68/std::pow((0.2231*plab+5),2);
314  }
315  else if (plab >= 0.788) {
317  s11pm=b*b;
318  }
319 
320 // channel T=0
321  snnpit=2*(s01pz+2*s11pm)-snnpit1;
322  if (snnpit < 1.e-8) snnpit=0.;
323  return snnpit;
324  }
static const G4double s01pzOOT
One over threshold for s01pz.
virtual G4double NNTwoPi(const G4double ener, const G4int iso, const G4double xsiso)
Cross section for direct 2-pion production - NN entrance channel.
const HornerC8 s01ppHC
Horner coefficients for s01pp.
static const G4double s01ppOOT
One over threshold for s01pp.
const XML_Char * s
Definition: expat.h:262
const HornerC4 s01pzHC
Horner coefficients for s01pz.
static const G4double s11pmOOT
One over threshold for s11pm.
const HornerC7 s11pzHC
Horner coefficients for s11pz.
static G4double eval(const G4double pLab, const G4double oneOverThreshold, HornerCoefficients< N > const &coeffs)
static const G4double s11pzOOT
One over threshold for s11pz.
G4double momentumInLab(Particle const *const p1, Particle const *const p2)
gives the momentum in the lab frame of two particles.
double G4double
Definition: G4Types.hh:76
const HornerC4 s11pmHC
Horner coefficients for s11pm.
const G4double effectiveNucleonMass

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::NNOnePiOrDelta ( Particle const *const  part1,
Particle const *const  part2 
)
protectedvirtual

Cross section for direct 1-pion production - NN entrance channel.

Definition at line 463 of file G4INCLCrossSectionsMultiPions.cc.

463  {
464  // Cross section for nucleon-nucleon directly producing one pion or producing a nucleon-delta pair
465  const G4double ener=KinematicsUtils::totalEnergyInCM(particle1, particle2);
466  const G4int iso=ParticleTable::getIsospin(particle1->getType()) + ParticleTable::getIsospin(particle2->getType());
467 
468  const G4double xsiso2=NNInelasticIso(ener, 2);
469  if (iso != 0)
470  return NNOnePiOrDelta(ener, iso, xsiso2);
471  else {
472  const G4double xsiso0=NNInelasticIso(ener, 0);
473  return 0.5*(NNOnePiOrDelta(ener, 0, xsiso0)+ NNOnePiOrDelta(ener, 2, xsiso2));
474  }
475  }
virtual G4double NNOnePiOrDelta(const G4double ener, const G4int iso, const G4double xsiso)
Cross section for direct 1-pion production + delta production - NN entrance channel.
G4double NNInelasticIso(const G4double ener, const G4int iso)
Internal implementation of the isospin dependent NN reaction cross section.
int G4int
Definition: G4Types.hh:78
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
double G4double
Definition: G4Types.hh:76
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)

Here is the call graph for this function:

G4double G4INCL::CrossSectionsMultiPions::NNThreePi ( const G4double  ener,
const G4int  iso,
const G4double  xsiso,
const G4double  xs1pi,
const G4double  xs2pi 
)
protectedvirtual

Cross section for direct 3-pion production - NN entrance channel.

Definition at line 417 of file G4INCLCrossSectionsMultiPions.cc.

417  {
418 
419  const G4double s = ener*ener;
421 
422  G4double snn3pit=0.;
423 
424  if (iso == 0) {
425 // channel T=0
426  if (plab > 7.2355) {
427  return 46.72/std::pow((plab - 5.8821),2);
428  }
429  else {
430  snn3pit=xsiso-xs1pi-xs2pi;
431  if (snn3pit < 1.e-8) snn3pit=0.;
432  return snn3pit;
433  }
434  }
435  else {
436 // channel T=1
437  if (plab > 7.206) {
438  return 5592.92/std::pow((plab+14.9764),2);
439  }
440  else if (plab > 2.1989){
441  snn3pit=xsiso-xs1pi-xs2pi;
442  if (snn3pit < 1.e-8) snn3pit=0.;
443  return snn3pit;
444  }
445  else return snn3pit;
446  }
447  }
const XML_Char * s
Definition: expat.h:262
G4double momentumInLab(Particle const *const p1, Particle const *const p2)
gives the momentum in the lab frame of two particles.
double G4double
Definition: G4Types.hh:76
const G4double effectiveNucleonMass

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::NNThreePi ( Particle const *const  part1,
Particle const *const  part2 
)
protectedvirtual

Cross section for direct 3-pion production - NN entrance channel.

Definition at line 496 of file G4INCLCrossSectionsMultiPions.cc.

496  {
497  //
498  // Nucleon-Nucleon producing one pion cross sections
499  //
500 
501  const G4double ener=KinematicsUtils::totalEnergyInCM(particle1, particle2);
502  const G4int iso=ParticleTable::getIsospin(particle1->getType()) + ParticleTable::getIsospin(particle2->getType());
503 
504 
505  const G4double xsiso2=NNInelasticIso(ener, 2);
506  const G4double xs1pi2=NNOnePiOrDelta(ener, 2, xsiso2);
507  const G4double xs2pi2=NNTwoPi(ener, 2, xsiso2);
508  if (iso != 0)
509  return NNThreePi(ener, 2, xsiso2, xs1pi2, xs2pi2);
510  else {
511  const G4double xsiso0=NNInelasticIso(ener, 0);
512  const G4double xs1pi0=NNOnePiOrDelta(ener, 0, xsiso0);
513  const G4double xs2pi0=NNTwoPi(ener, 0, xsiso0);
514  return 0.5*(NNThreePi(ener, 0, xsiso0, xs1pi0, xs2pi0)+ NNThreePi(ener, 2, xsiso2, xs1pi2, xs2pi2));
515  }
516  }
virtual G4double NNOnePiOrDelta(const G4double ener, const G4int iso, const G4double xsiso)
Cross section for direct 1-pion production + delta production - NN entrance channel.
G4double NNInelasticIso(const G4double ener, const G4int iso)
Internal implementation of the isospin dependent NN reaction cross section.
virtual G4double NNTwoPi(const G4double ener, const G4int iso, const G4double xsiso)
Cross section for direct 2-pion production - NN entrance channel.
int G4int
Definition: G4Types.hh:78
virtual G4double NNThreePi(const G4double ener, const G4int iso, const G4double xsiso, const G4double xs1pi, const G4double xs2pi)
Cross section for direct 3-pion production - NN entrance channel.
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
double G4double
Definition: G4Types.hh:76
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)

Here is the call graph for this function:

G4double G4INCL::CrossSectionsMultiPions::NNToNDelta ( Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross section for Delta production - NN Channel.

Implements G4INCL::ICrossSections.

Definition at line 792 of file G4INCLCrossSectionsMultiPions.cc.

792  {
793 // assert(p1->isNucleon() && p2->isNucleon());
794  const G4int isospin = ParticleTable::getIsospin(p1->getType()) + ParticleTable::getIsospin(p2->getType());
795  G4double sigma = NNOnePiOrDelta(p1, p2);
796  if(isospin==0)
797  sigma *= 0.5;
798  return sigma;
799  }
virtual G4double NNOnePiOrDelta(const G4double ener, const G4int iso, const G4double xsiso)
Cross section for direct 1-pion production + delta production - NN entrance channel.
int G4int
Definition: G4Types.hh:78
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

G4double G4INCL::CrossSectionsMultiPions::NNToNDeltaEta ( Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross section for N-Delta-Eta production - NNEta Channel.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1281 of file G4INCLCrossSectionsMultiPions.cc.

1281  {
1282  //
1283  // Nucleon-Nucleon producing N-Delta-Eta cross sections
1284  //
1285  return 0.;
1286  }
G4double G4INCL::CrossSectionsMultiPions::NNToNDeltaOmega ( Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross section for N-Delta-Eta production - NNEta Channel.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1306 of file G4INCLCrossSectionsMultiPions.cc.

1306  {
1307  //
1308  // Nucleon-Nucleon producing N-Delta-Omega cross sections
1309  //
1310  return 0.;
1311  }
G4double G4INCL::CrossSectionsMultiPions::NNToNNEta ( Particle const *const  particle1,
Particle const *const  particle2 
)
virtual

Cross section for Eta production - NN entrance channel.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1263 of file G4INCLCrossSectionsMultiPions.cc.

1263  {
1264  //
1265  // Nucleon-Nucleon producing Eta cross sections
1266  //
1267  return 0.;
1268  }
G4double G4INCL::CrossSectionsMultiPions::NNToNNEtaExclu ( Particle const *const  particle1,
Particle const *const  particle2 
)
virtual

Cross section for Eta production (exclusive) - NN entrance channel.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1270 of file G4INCLCrossSectionsMultiPions.cc.

1270  {
1271  //
1272  // Nucleon-Nucleon producing Eta cross sections
1273  //
1274  return 0.;
1275  }
G4double G4INCL::CrossSectionsMultiPions::NNToNNEtaxPi ( const G4int  xpi,
Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross section for X pion production - NNEta Channel.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1277 of file G4INCLCrossSectionsMultiPions.cc.

1277  {
1278  return 0.;
1279  }
G4double G4INCL::CrossSectionsMultiPions::NNToNNOmega ( Particle const *const  particle1,
Particle const *const  particle2 
)
virtual

Cross section for Eta production - NN entrance channel.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1288 of file G4INCLCrossSectionsMultiPions.cc.

1288  {
1289  //
1290  // Nucleon-Nucleon producing Omega cross sections
1291  //
1292  return 0.;
1293  }
G4double G4INCL::CrossSectionsMultiPions::NNToNNOmegaExclu ( Particle const *const  particle1,
Particle const *const  particle2 
)
virtual

Cross section for Eta production (exclusive) - NN entrance channel.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1295 of file G4INCLCrossSectionsMultiPions.cc.

1295  {
1296  //
1297  // Nucleon-Nucleon producing Omega cross sections
1298  //
1299  return 0.;
1300  }
G4double G4INCL::CrossSectionsMultiPions::NNToNNOmegaxPi ( const G4int  xpi,
Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross section for X pion production - NNEta Channel.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1302 of file G4INCLCrossSectionsMultiPions.cc.

1302  {
1303  return 0.;
1304  }
G4double G4INCL::CrossSectionsMultiPions::NNTot ( Particle const *const  part1,
Particle const *const  part2 
)
protected

Internal implementation of the NN total cross section.

Definition at line 160 of file G4INCLCrossSectionsMultiPions.cc.

160  {
161 
162  G4int i = ParticleTable::getIsospin(part1->getType())
163  + ParticleTable::getIsospin(part2->getType());
164 
165  if(part1->isNucleon() && part2->isNucleon()) { // NN
166  const G4double s = KinematicsUtils::squareTotalEnergyInCM(part1, part2);
167  return NNTotFixed(s, i);
168  }
169  else if (part1->isDelta() && part2->isDelta()) { // Delta-Delta
170  return elastic(part1, part2);
171  }
172  else { // Nucleon-Delta
173  return NDeltaToNN(part1, part2) + elastic(part1, part2);
174  }
175  }
G4double squareTotalEnergyInCM(Particle const *const p1, Particle const *const p2)
int G4int
Definition: G4Types.hh:78
const XML_Char * s
Definition: expat.h:262
virtual G4double elastic(Particle const *const p1, Particle const *const p2)
Elastic particle-particle cross section.
virtual G4double NDeltaToNN(Particle const *const p1, Particle const *const p2)
Cross section for NDelta-&gt;NN.
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
G4double NNTotFixed(const G4double s, const G4int i)
Internal implementation of the NN total cross section with fixed isospin.
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::NNTotFixed ( const G4double  s,
const G4int  i 
)
protected

Internal implementation of the NN total cross section with fixed isospin.

Definition at line 177 of file G4INCLCrossSectionsMultiPions.cc.

177  {
178 
179  /* From NNTot, with isospin fixed and for NN only.
180  */
181 
183 
184  if (i == 0) { // pn
185  if (plab < 0.446) {
186  G4double alp=std::log(plab);
187  return 6.3555*std::exp(-3.2481*alp-0.377*std::pow(alp, 2));
188  }
189  else if (plab < 1.0) {
190  return 33.+196.*std::sqrt(std::pow(std::fabs(plab-0.95),5));
191  }
192  else if (plab < 1.924) {
193  return 24.2+8.9*plab;
194  }
195  else {
196  G4double alp=std::log(plab);
197  return 48.9-33.7*std::pow(plab, -3.08)+0.619*std::pow(alp, 2)-5.12*alp;
198  }
199  }
200  else { // pp and nn
201  if (plab < 0.440) {
202  return 34.*std::pow(plab/0.4, (-2.104));
203  }
204  else if (plab < 0.8734) {
205  return 23.5+1000.*std::pow(plab-0.7, 4);
206  }
207  else if (plab < 1.5) {
208  return 23.5+24.6/(1.+std::exp(-10.*(plab-1.2)));
209  }
210  else if (plab < 3.0044) {
211  return 41.+60.*(plab-0.9)*std::exp(-1.2*plab);
212  }
213  else {
214  G4double alp=std::log(plab);
215  return 45.6+219.*std::pow(plab, -4.23)+0.41*std::pow(alp, 2)-3.41*alp;
216  }
217  }
218  }
const XML_Char * s
Definition: expat.h:262
G4double momentumInLab(Particle const *const p1, Particle const *const p2)
gives the momentum in the lab frame of two particles.
double G4double
Definition: G4Types.hh:76
const G4double effectiveNucleonMass

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::NNToxPiNN ( const G4int  xpi,
Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross section for X pion production - NN Channel.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances, and G4INCL::CrossSectionsTruncatedMultiPions.

Definition at line 526 of file G4INCLCrossSectionsMultiPions.cc.

526  {
527  //
528  // Nucleon-Nucleon producing xpi pions cross sections
529  //
530 // assert(xpi>0 && xpi<=nMaxPiNN);
531 // assert(particle1->isNucleon() && particle2->isNucleon());
532 
533  if (xpi == 1)
534  return NNOnePi(particle1, particle2);
535  else if (xpi == 2)
536  return NNTwoPi(particle1, particle2);
537  else if (xpi == 3)
538  return NNThreePi(particle1, particle2);
539  else if (xpi == 4)
540  return NNFourPi(particle1, particle2);
541  else // should never reach this point
542  return 0.;
543  }
virtual G4double NNTwoPi(const G4double ener, const G4int iso, const G4double xsiso)
Cross section for direct 2-pion production - NN entrance channel.
virtual G4double NNThreePi(const G4double ener, const G4int iso, const G4double xsiso, const G4double xs1pi, const G4double xs2pi)
Cross section for direct 3-pion production - NN entrance channel.
virtual G4double NNOnePi(Particle const *const part1, Particle const *const part2)
Cross section for direct 1-pion production - NN entrance channel.
virtual G4double NNFourPi(Particle const *const part1, Particle const *const part2)
Cross section for direct 4-pion production - NN entrance channel.

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::NNTwoPi ( const G4double  ener,
const G4int  iso,
const G4double  xsiso 
)
protectedvirtual

Cross section for direct 2-pion production - NN entrance channel.

Definition at line 326 of file G4INCLCrossSectionsMultiPions.cc.

326  {
327 
328  /* Article J. Physique 48 (1987)1901-1924 "Energy dependence of nucleon-cucleon inelastic total cross-sections."
329  J. Bystricky, P. La France, F. Lehar, F. Perrot, T. Siemiarczuk & P. Winternitz
330  S12PM : pp -> pp Pi+ Pi-
331  S12ZZ : pp -> pp Pi0 Pi0
332  S12PP : pp -> nn Pi+ Pi+
333  S02PZ : pp -> pn Pi+ Pi0
334  S02PM : pn -> pn Pi+ Pi-
335  S12MZ : pn -> pp Pi- Pi0
336  */
337 
338  const G4double s = ener*ener;
340 
341  G4double snn2pit=0.;
342  G4double s12pm=0.;
343  G4double s12pp=0.;
344  G4double s12zz=0.;
345  G4double s02pz=0.;
346  G4double s02pm=0.;
347  G4double s12mz=0.;
348 
349  if (iso==0 && plab<3.3) {
350  snn2pit = xsiso - NNOnePiOrDelta(ener, iso, xsiso);
351  if (snn2pit < 1.e-8) snn2pit=0.;
352  return snn2pit;
353  }
354 
355  if (iso != 0) {
356 //s12pm
357  if (plab > 15.) {
358  s12pm=25.977/plab;
359  }
360  else if (plab >= 1.3817) {
362  s12pm=b*b;
363  }
364 //s12pp
365  if (plab > 10.) {
366  s12pp=141.505/std::pow((-0.1016*plab-7),2);
367  }
368  else if (plab >= 1.5739) {
370  s12pp=b*b;
371  }
372  }
373 //s12zz
374  if (plab > 4.) {
375  s12zz=97.355/std::pow((1.1579*plab+5),2);
376  }
377  else if (plab >= 1.72207) {
379  s12zz=b*b;
380  }
381 //s02pz
382  if (plab > 4.5) {
383  s02pz=178.082/std::pow((0.2014*plab+5),2);
384  }
385  else if (plab >= 1.5656) {
387  s02pz=b*b;
388  }
389 
390 // channel T=1
391  if (iso != 0) {
392  snn2pit=s12pm+s12pp+s12zz+s02pz;
393  if (snn2pit < 1.e-8) snn2pit=0.;
394  return snn2pit;
395  }
396 
397 //s02pm
398  if (plab > 5.) {
399  s02pm=135.826/std::pow(plab,2);
400  }
401  else if (plab >= 1.21925) {
403  s02pm=b*b;
404  }
405 //s12mz
406  if (plab >= 1.29269) {
408  s12mz=b*b;
409  }
410 
411 // channel T=0
412  snn2pit=3*(s02pm+0.5*s12mz-0.5*s02pz-s12zz);
413  if (snn2pit < 1.e-8) snn2pit=0.;
414  return snn2pit;
415  }
virtual G4double NNOnePiOrDelta(const G4double ener, const G4int iso, const G4double xsiso)
Cross section for direct 1-pion production + delta production - NN entrance channel.
static const G4double s12mzOOT
One over threshold for s12mz.
static const G4double s12ppOOT
One over threshold for s12pp.
const HornerC4 s12zzHC
Horner coefficients for s12zz.
const HornerC4 s02pzHC
Horner coefficients for s02pz.
const XML_Char * s
Definition: expat.h:262
const HornerC3 s12ppHC
Horner coefficients for s12pp.
static const G4double s02pzOOT
One over threshold for s02pz.
static G4double eval(const G4double pLab, const G4double oneOverThreshold, HornerCoefficients< N > const &coeffs)
static const G4double s12pmOOT
One over threshold for s12pm.
static const G4double s12zzOOT
One over threshold for s12zz.
const HornerC4 s12mzHC
Horner coefficients for s12mz.
static const G4double s02pmOOT
One over threshold for s02pm.
G4double momentumInLab(Particle const *const p1, Particle const *const p2)
gives the momentum in the lab frame of two particles.
double G4double
Definition: G4Types.hh:76
const G4double effectiveNucleonMass
const HornerC6 s02pmHC
Horner coefficients for s02pm.
const HornerC5 s12pmHC
Horner coefficients for s12pm.

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::NNTwoPi ( Particle const *const  part1,
Particle const *const  part2 
)
protectedvirtual

Cross section for direct 2-pion production - NN entrance channel.

Definition at line 477 of file G4INCLCrossSectionsMultiPions.cc.

477  {
478  //
479  // Nucleon-Nucleon producing one pion cross sections
480  //
481  const G4double ener=KinematicsUtils::totalEnergyInCM(particle1, particle2);
482  const G4int iso=ParticleTable::getIsospin(particle1->getType()) + ParticleTable::getIsospin(particle2->getType());
483 
484 
485  const G4double xsiso2=NNInelasticIso(ener, 2);
486  if (iso != 0) {
487  return NNTwoPi(ener, 2, xsiso2);
488  }
489  else {
490  const G4double xsiso0=NNInelasticIso(ener, 0);
491  return 0.5*(NNTwoPi(ener, 0, xsiso0)+ NNTwoPi(ener, 2, xsiso2));
492  }
493  return 0.0; // Should never reach this point
494  }
G4double NNInelasticIso(const G4double ener, const G4int iso)
Internal implementation of the isospin dependent NN reaction cross section.
virtual G4double NNTwoPi(const G4double ener, const G4int iso, const G4double xsiso)
Cross section for direct 2-pion production - NN entrance channel.
int G4int
Definition: G4Types.hh:78
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
double G4double
Definition: G4Types.hh:76
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)

Here is the call graph for this function:

G4double G4INCL::CrossSectionsMultiPions::omegaNToPiN ( Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross section for OmegaN->PiN.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1242 of file G4INCLCrossSectionsMultiPions.cc.

1242  {
1243  //
1244  // Omega-Nucleon producing Pion cross sections
1245  //
1246  return 0.;
1247  }
G4double G4INCL::CrossSectionsMultiPions::omegaNToPiPiN ( Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross section for OmegaN->PiPiN.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1249 of file G4INCLCrossSectionsMultiPions.cc.

1249  {
1250  //
1251  // Omega-Nucleon producing Two Pions cross sections
1252  //
1253  return 0.;
1254  }
G4double G4INCL::CrossSectionsMultiPions::piMinuspIne ( Particle const *const  p1,
Particle const *const  p2 
)
protected

Definition at line 1005 of file G4INCLCrossSectionsMultiPions.cc.

1005  {
1006  // piMinusp inelastic cross section (Delta excluded)
1007 
1008  const Particle *pion;
1009  const Particle *nucleon;
1010  if(particle1->isNucleon()) {
1011  nucleon = particle1;
1012  pion = particle2;
1013  } else {
1014  pion = particle1;
1015  nucleon = particle2;
1016  }
1017 // assert(pion->isPion());
1018 
1019  const G4double pLab = KinematicsUtils::momentumInLab(pion, nucleon);
1020 
1021  // these limits correspond to sqrt(s)=1230 and 20000 MeV
1022  if(pLab>212677. || pLab<296.367)
1023  return 0.0;
1024 
1025 // const G4int ipit3 = ParticleTable::getIsospin(pion->getType());
1026 // const G4int ind2t3 = ParticleTable::getIsospin(nucleon->getType());
1027 // const G4int cg = 4 + ind2t3*ipit3;
1028 // assert(cg==2 || cg==4 || cg==6);
1029 
1030  const G4double p1=1e-3*pLab;
1031  const G4double p2=std::log(p1);
1032  G4double xpimp = 0.0;
1033 
1034  // x-section pi- p inelastique :
1035  if(p1 <= 0.4731)
1036  xpimp=0;
1037  else
1038  xpimp=26.6-7.18*std::pow(p1, -1.86)+0.327*p2*p2-2.81*p2;
1039  if(xpimp<0.)
1040  xpimp=0;
1041 
1042  // cas pi- p et pi+ n
1043  return xpimp;
1044 
1045  }
G4bool pion(G4int ityp)
G4bool nucleon(G4int ityp)
G4double momentumInLab(Particle const *const p1, Particle const *const p2)
gives the momentum in the lab frame of two particles.
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::piMinuspOnePi ( Particle const *const  p1,
Particle const *const  p2 
)
protected

Definition at line 1084 of file G4INCLCrossSectionsMultiPions.cc.

1084  {
1085  const Particle *pion;
1086  const Particle *nucleon;
1087  if(particle1->isNucleon()) {
1088  nucleon = particle1;
1089  pion = particle2;
1090  } else {
1091  pion = particle1;
1092  nucleon = particle2;
1093  }
1094 // assert(pion->isPion());
1095 
1096  const G4double pLab = KinematicsUtils::momentumInLab(pion, nucleon);
1097 
1098  // this limit corresponds to sqrt(s)=1230 MeV
1099  if(pLab<296.367)
1100  return 0.0;
1101 
1102  // const G4int ipi = ParticleTable::getIsospin(pion->getType());
1103  // const G4int ind2 = ParticleTable::getIsospin(nucleon->getType());
1104  // const G4int cg = 4 + ind2*ipi;
1105  // assert(cg==2 || cg==4 || cg==6);
1106 
1107  const G4double p1=1e-3*pLab;
1108  G4double tamp2=0.;
1109 
1110  // X-SECTION PI- P INELASTIQUE :
1111  if (pLab < 1228.06) // corresponds to sqrt(s)=1794 MeV
1112  tamp2=piMinuspIne(particle1, particle2);
1113  else
1114  tamp2=9.04*std::pow(p1, -1.17)+18.*std::pow(p1, -1.21); // tamp2=9.04*std::pow(p1, -1.17)+(13.5*std::pow(p1, -1.21))*4./3.;
1115  if (tamp2 < 0.0) tamp2=0;
1116 
1117  // CAS PI- P ET PI+ N
1118  return tamp2;
1119  }
G4bool pion(G4int ityp)
G4bool nucleon(G4int ityp)
G4double piMinuspIne(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.
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::piMinuspTwoPi ( Particle const *const  p1,
Particle const *const  p2 
)
protected

Definition at line 1163 of file G4INCLCrossSectionsMultiPions.cc.

1163  {
1164  //
1165  // pion-nucleon interaction, producing 2 pions
1166  // fit from Landolt-Bornstein multiplied by factor determined with evaluation of total xs
1167  //
1168 
1169  const Particle *pion;
1170  const Particle *nucleon;
1171  if(particle1->isNucleon()) {
1172  nucleon = particle1;
1173  pion = particle2;
1174  } else {
1175  pion = particle1;
1176  nucleon = particle2;
1177  }
1178 // assert(pion->isPion());
1179 
1180  const G4double pLab = KinematicsUtils::momentumInLab(pion, nucleon);
1181 
1182  // this limit corresponds to sqrt(s)=1230 MeV
1183  if(pLab<296.367)
1184  return 0.0;
1185 
1186  // const G4int ipi = ParticleTable::getIsospin(pion->getType());
1187  // const G4int ind2 = ParticleTable::getIsospin(nucleon->getType());
1188  // const G4int cg = 4 + ind2*ipi;
1189  // assert(cg==2 || cg==4 || cg==6);
1190 
1191  const G4double p1=1e-3*pLab;
1192  G4double tamp2=0.;
1193 
1194  // X-SECTION PI- P INELASTIQUE :
1195  if(pLab<2083.63) // corresponds to sqrt(s)=2195 MeV
1196  tamp2=piMinuspIne(particle1, particle2)-piMinuspOnePi(particle1, particle2);
1197  else
1198  tamp2=2.457794117647+18.066176470588*std::pow(p1, -0.92); // tamp2=(0.619+4.55*std::pow(p1, -0.92))*135./34.;
1199 
1200  // CAS PI- P ET PI+ N
1201  return tamp2;
1202 }
G4bool pion(G4int ityp)
G4bool nucleon(G4int ityp)
G4double piMinuspOnePi(Particle const *const p1, Particle const *const p2)
G4double piMinuspIne(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.
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::piNIne ( Particle const *const  p1,
Particle const *const  p2 
)
protected

Definition at line 626 of file G4INCLCrossSectionsMultiPions.cc.

626  {
627  // piN inelastic cross section (Delta excluded)
628 
629  const Particle *pion;
630  const Particle *nucleon;
631  if(particle1->isNucleon()) {
632  nucleon = particle1;
633  pion = particle2;
634  } else {
635  pion = particle1;
636  nucleon = particle2;
637  }
638 // assert(pion->isPion());
639 
640  const G4double pLab = KinematicsUtils::momentumInLab(pion, nucleon);
641 
642  // these limits correspond to sqrt(s)=1230 and 20000 MeV
643  if(pLab>212677. || pLab<296.367)
644  return 0.0;
645 
646  const G4int ipit3 = ParticleTable::getIsospin(pion->getType());
647  const G4int ind2t3 = ParticleTable::getIsospin(nucleon->getType());
648  const G4int cg = 4 + ind2t3*ipit3;
649 // assert(cg==2 || cg==4 || cg==6);
650 
651 // const G4double p1=1e-3*pLab;
652 // const G4double p2=std::log(p1);
653  G4double xpipp = 0.0;
654  G4double xpimp = 0.0;
655 
656  if(cg!=2) {
657  // x-section pi+ p inelastique :
658  xpipp=piPluspIne(pion,nucleon);
659 
660  if(cg==6) // cas pi+ p et pi- n
661  return xpipp;
662  }
663 
664  // x-section pi- p inelastique :
665  xpimp=piMinuspIne(pion,nucleon);
666 
667  if(cg==2) // cas pi- p et pi+ n
668  return xpimp;
669  else // cas pi0 p et pi0 n
670  return 0.5*(xpipp+xpimp);
671  }
G4bool pion(G4int ityp)
int G4int
Definition: G4Types.hh:78
G4bool nucleon(G4int ityp)
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
G4double piMinuspIne(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.
double G4double
Definition: G4Types.hh:76
G4double piPluspIne(Particle const *const p1, Particle const *const p2)

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::piNOnePi ( Particle const *const  p1,
Particle const *const  p2 
)
protectedvirtual

Cross section for One (more) pion production - piN entrance channel.

Definition at line 867 of file G4INCLCrossSectionsMultiPions.cc.

867  {
868  const Particle *pion;
869  const Particle *nucleon;
870  if(particle1->isNucleon()) {
871  nucleon = particle1;
872  pion = particle2;
873  } else {
874  pion = particle1;
875  nucleon = particle2;
876  }
877 // assert(pion->isPion());
878 
879  const G4double pLab = KinematicsUtils::momentumInLab(pion, nucleon);
880 
881  // this limit corresponds to sqrt(s)=1230 MeV
882  if(pLab<296.367)
883  return 0.0;
884 
885  const G4int ipi = ParticleTable::getIsospin(pion->getType());
886  const G4int ind2 = ParticleTable::getIsospin(nucleon->getType());
887  const G4int cg = 4 + ind2*ipi;
888 // assert(cg==2 || cg==4 || cg==6);
889 
890  // const G4double p1=1e-3*pLab;
891  G4double tamp6=0.;
892  G4double tamp2=0.;
893 
894  // X-SECTION PI+ P INELASTIQUE :
895  if(cg != 2) {
896  tamp6=piPluspOnePi(particle1,particle2);
897  if (cg == 6) // CAS PI+ P ET PI- N
898  return tamp6;
899  }
900 
901  // X-SECTION PI- P INELASTIQUE :
902  tamp2=piMinuspOnePi(particle1,particle2);
903  if (tamp2 < 0.0) tamp2=0;
904 
905  if (cg == 2) // CAS PI- P ET PI+ N
906  return tamp2;
907  else { // CAS PI0 P ET PI0 N
908  G4double s1pin = 0.5*(tamp6+tamp2);
909  const G4double inelastic = piNIne(particle1, particle2);
910  if (s1pin > inelastic)
911  s1pin = inelastic;
912  return s1pin;
913  }
914  }
G4bool pion(G4int ityp)
G4double piNIne(Particle const *const p1, Particle const *const p2)
int G4int
Definition: G4Types.hh:78
G4double piPluspOnePi(Particle const *const p1, Particle const *const p2)
G4bool nucleon(G4int ityp)
G4double piMinuspOnePi(Particle const *const p1, Particle const *const p2)
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
G4double momentumInLab(Particle const *const p1, Particle const *const p2)
gives the momentum in the lab frame of two particles.
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::piNToDelta ( Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross section for Delta production - piN Channel.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsTruncatedMultiPions.

Definition at line 673 of file G4INCLCrossSectionsMultiPions.cc.

673  {
674  // piN Delta production
675 
676  G4double x = KinematicsUtils::totalEnergyInCM(particle1, particle2);
677  if(x>20000.) return 0.0; // no cross section above this value
678 
679  G4int ipit3 = 0;
680  G4int ind2t3 = 0;
681  const G4double ramass = 0.0;
682 
683  if(particle1->isPion()) {
684  ipit3 = ParticleTable::getIsospin(particle1->getType());
685  ind2t3 = ParticleTable::getIsospin(particle2->getType());
686  } else if(particle2->isPion()) {
687  ipit3 = ParticleTable::getIsospin(particle2->getType());
688  ind2t3 = ParticleTable::getIsospin(particle1->getType());
689  }
690 
691  const G4double y=x*x;
692  const G4double q2=(y-1076.0*1076.0)*(y-800.0*800.0)/y/4.0;
693  if (q2 <= 0.) {
694  return 0.0;
695  }
696  const G4double q3 = std::pow(std::sqrt(q2),3);
697  const G4double f3 = q3/(q3 + 5832000.); // 5832000 = 180^3
698  G4double sdelResult = 326.5/(std::pow((x-1215.0-ramass)*2.0/(110.0-ramass), 2)+1.0);
699  sdelResult = sdelResult*(1.0-5.0*ramass/1215.0);
700  const G4int cg = 4 + ind2t3*ipit3;
701  sdelResult = sdelResult*f3*cg/6.0;
702 
703  return sdelResult;
704  }
int G4int
Definition: G4Types.hh:78
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
double G4double
Definition: G4Types.hh:76
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::piNToEtaN ( Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross sections for mesonic resonance production - piN Channel.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1205 of file G4INCLCrossSectionsMultiPions.cc.

1205  {
1206  //
1207  // Pion-Nucleon producing Eta cross sections
1208  //
1209  return 0.;
1210  }
G4double G4INCL::CrossSectionsMultiPions::piNToEtaPrimeN ( Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross section for PiN->EtaPrimeN.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1219 of file G4INCLCrossSectionsMultiPions.cc.

1219  {
1220  //
1221  // Pion-Nucleon producing EtaPrime cross sections
1222  //
1223  return 0.;
1224  }
G4double G4INCL::CrossSectionsMultiPions::piNToOmegaN ( Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross section for PiN->OmegaN.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 1212 of file G4INCLCrossSectionsMultiPions.cc.

1212  {
1213  //
1214  // Pion-Nucleon producing Omega cross sections
1215  //
1216  return 0.;
1217  }
G4double G4INCL::CrossSectionsMultiPions::piNTopiN ( Particle const *const  p1,
Particle const *const  p2 
)
protected
G4double G4INCL::CrossSectionsMultiPions::piNTot ( Particle const *const  p1,
Particle const *const  p2 
)
protected

Definition at line 706 of file G4INCLCrossSectionsMultiPions.cc.

706  {
707  // FUNCTION SPN(X,IND2T3,IPIT3,f17)
708  // SIGMA(PI+ + P) IN THE (3,3) REGION
709  // NEW FIT BY J.VANDERMEULEN + FIT BY Th AOUST ABOVE (3,3) RES
710  // CONST AT LOW AND VERY HIGH ENERGY
711  // COMMON/BL8/RATHR,RAMASS REL21800
712  // integer f17
713  // RATHR and RAMASS are always 0.0!!!
714 
715  G4double x = KinematicsUtils::totalEnergyInCM(particle1, particle2);
716 
717  G4int ipit3 = 0;
718  G4int ind2t3 = 0;
719 
720  if(particle1->isPion()) {
721  ipit3 = ParticleTable::getIsospin(particle1->getType());
722  ind2t3 = ParticleTable::getIsospin(particle2->getType());
723  } else if(particle2->isPion()) {
724  ipit3 = ParticleTable::getIsospin(particle2->getType());
725  ind2t3 = ParticleTable::getIsospin(particle1->getType());
726  }
727 
728  G4double spnResult=0.0;
729 
730  // HE pi+ p and pi- n
731  if((ind2t3 == 1 && ipit3 == 2) || (ind2t3 == -1 && ipit3 == -2))
732  spnResult=spnPiPlusPHE(x);
733  else if((ind2t3 == 1 && ipit3 == -2) || (ind2t3 == -1 && ipit3 == 2))
734  spnResult=spnPiMinusPHE(x);
735  else if(ipit3 == 0) spnResult = (spnPiPlusPHE(x) + spnPiMinusPHE(x))/2.0; // (spnpipphe(x)+spnpimphe(x))/2.0
736  else {
737  INCL_ERROR("Unknown configuration!\n" << particle1->print() << particle2->print() << '\n');
738  }
739 
740  return spnResult;
741  }
#define INCL_ERROR(x)
G4double spnPiPlusPHE(const G4double x)
Internal function for pion cross sections.
int G4int
Definition: G4Types.hh:78
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
double G4double
Definition: G4Types.hh:76
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)
G4double spnPiMinusPHE(const G4double x)
Internal function for pion cross sections.

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::piNToxPiN ( const G4int  xpi,
Particle const *const  p1,
Particle const *const  p2 
)
virtual

Cross section for X pion production - piN Channel.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsTruncatedMultiPions, and G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 843 of file G4INCLCrossSectionsMultiPions.cc.

843  {
844  //
845  // pion-Nucleon producing xpi pions cross sections
846  //
847 // assert(xpi>1 && xpi<=nMaxPiPiN);
848 // assert((particle1->isNucleon() && particle2->isPion()) || (particle1->isPion() && particle2->isNucleon()));
849  if (xpi == 2) {
850  G4double OnePi=piNOnePi(particle1,particle2);
851  if (OnePi < 1.e-09) OnePi = 0.;
852  return OnePi;
853  }
854  else if (xpi == 3){
855  G4double TwoPi=piNTwoPi(particle1,particle2);
856  if (TwoPi < 1.e-09) TwoPi = 0.;
857  return TwoPi;
858  }
859  else if (xpi == 4) {
860  G4double piNThreePi = piNIne(particle1,particle2) - piNOnePi(particle1,particle2) - piNTwoPi(particle1,particle2);
861  if (piNThreePi < 1.e-09) piNThreePi = 0.;
862  return piNThreePi;
863  } else // should never reach this point
864  return 0.0;
865  }
G4double piNIne(Particle const *const p1, Particle const *const p2)
virtual G4double piNTwoPi(Particle const *const p1, Particle const *const p2)
Cross section for Two (more) pion production - piN entrance channel.
double G4double
Definition: G4Types.hh:76
virtual G4double piNOnePi(Particle const *const p1, Particle const *const p2)
Cross section for One (more) pion production - piN entrance channel.

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::piNTwoPi ( Particle const *const  p1,
Particle const *const  p2 
)
protectedvirtual

Cross section for Two (more) pion production - piN entrance channel.

Definition at line 916 of file G4INCLCrossSectionsMultiPions.cc.

916  {
917  //
918  // pion-nucleon interaction, producing 2 pions
919  // fit from Landolt-Bornstein multiplied by factor determined with evaluation of total xs
920  //
921 
922  const Particle *pion;
923  const Particle *nucleon;
924  if(particle1->isNucleon()) {
925  nucleon = particle1;
926  pion = particle2;
927  } else {
928  pion = particle1;
929  nucleon = particle2;
930  }
931 // assert(pion->isPion());
932 
933  const G4double pLab = KinematicsUtils::momentumInLab(pion, nucleon);
934 
935  // this limit corresponds to sqrt(s)=1230 MeV
936  if(pLab<296.367)
937  return 0.0;
938 
939  const G4int ipi = ParticleTable::getIsospin(pion->getType());
940  const G4int ind2 = ParticleTable::getIsospin(nucleon->getType());
941  const G4int cg = 4 + ind2*ipi;
942 // assert(cg==2 || cg==4 || cg==6);
943 
944  G4double tamp6=0.;
945  G4double tamp2=0.;
946 
947  // X-SECTION PI+ P INELASTIQUE :
948  if(cg!=2) {
949  tamp6=piPluspTwoPi(particle1,particle2);
950 
951  if(cg==6) // CAS PI+ P ET PI- N
952  return tamp6;
953  }
954 
955  // X-SECTION PI- P INELASTIQUE :
956  tamp2=piMinuspTwoPi(particle1,particle2);
957 
958  if(cg==2) // CAS PI- P ET PI+ N
959  return tamp2;
960  else { // CAS PI0 P ET PI0 N
961  const G4double s2pin=0.5*(tamp6+tamp2);
962  return s2pin;
963  }
964  }
G4bool pion(G4int ityp)
int G4int
Definition: G4Types.hh:78
G4bool nucleon(G4int ityp)
G4double piMinuspTwoPi(Particle const *const p1, Particle const *const p2)
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
G4double piPluspTwoPi(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.
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::piPluspIne ( Particle const *const  p1,
Particle const *const  p2 
)
protected

Definition at line 966 of file G4INCLCrossSectionsMultiPions.cc.

966  {
967  // piPlusP inelastic cross section (Delta excluded)
968 
969  const Particle *pion;
970  const Particle *nucleon;
971  if(particle1->isNucleon()) {
972  nucleon = particle1;
973  pion = particle2;
974  } else {
975  pion = particle1;
976  nucleon = particle2;
977  }
978 // assert(pion->isPion());
979 
980  const G4double pLab = KinematicsUtils::momentumInLab(pion, nucleon);
981 
982  // these limits correspond to sqrt(s)=1230 and 20000 MeV
983  if(pLab>212677. || pLab<296.367)
984  return 0.0;
985 
986 // const G4int ipit3 = ParticleTable::getIsospin(pion->getType());
987 // const G4int ind2t3 = ParticleTable::getIsospin(nucleon->getType());
988 // const G4int cg = 4 + ind2t3*ipit3;
989 // assert(cg==2 || cg==4 || cg==6);
990 
991  const G4double p1=1e-3*pLab;
992  const G4double p2=std::log(p1);
993  G4double xpipp = 0.0;
994 
995  // x-section pi+ p inelastique :
996  if(p1<=0.75)
997  xpipp=17.965*std::pow(p1, 5.4606);
998  else
999  xpipp=24.3-12.3*std::pow(p1, -1.91)+0.324*p2*p2-2.44*p2;
1000  // cas pi+ p et pi- n
1001  return xpipp;
1002 
1003  }
G4bool pion(G4int ityp)
G4bool nucleon(G4int ityp)
G4double momentumInLab(Particle const *const p1, Particle const *const p2)
gives the momentum in the lab frame of two particles.
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::piPluspOnePi ( Particle const *const  p1,
Particle const *const  p2 
)
protected

Definition at line 1047 of file G4INCLCrossSectionsMultiPions.cc.

1047  {
1048  const Particle *pion;
1049  const Particle *nucleon;
1050  if(particle1->isNucleon()) {
1051  nucleon = particle1;
1052  pion = particle2;
1053  } else {
1054  pion = particle1;
1055  nucleon = particle2;
1056  }
1057 // assert(pion->isPion());
1058 
1059  const G4double pLab = KinematicsUtils::momentumInLab(pion, nucleon);
1060 
1061  // this limit corresponds to sqrt(s)=1230 MeV
1062  if(pLab<296.367)
1063  return 0.0;
1064 
1065  // const G4int ipi = ParticleTable::getIsospin(pion->getType());
1066  // const G4int ind2 = ParticleTable::getIsospin(nucleon->getType());
1067  // const G4int cg = 4 + ind2*ipi;
1068  // assert(cg==2 || cg==4 || cg==6);
1069 
1070  const G4double p1=1e-3*pLab;
1071  G4double tamp6=0.;
1072 
1073  // X-SECTION PI+ P INELASTIQUE :
1074  if(pLab < 1532.52) // corresponds to sqrt(s)=1946 MeV
1075  tamp6=piPluspIne(particle1, particle2);
1076  else
1077  tamp6=0.204+18.2*std::pow(p1, -1.72)+6.33*std::pow(p1, -1.13);
1078 
1079  // CAS PI+ P ET PI- N
1080  return tamp6;
1081 
1082  }
G4bool pion(G4int ityp)
G4bool nucleon(G4int ityp)
G4double momentumInLab(Particle const *const p1, Particle const *const p2)
gives the momentum in the lab frame of two particles.
double G4double
Definition: G4Types.hh:76
G4double piPluspIne(Particle const *const p1, Particle const *const p2)

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::piPluspTwoPi ( Particle const *const  p1,
Particle const *const  p2 
)
protected

Definition at line 1121 of file G4INCLCrossSectionsMultiPions.cc.

1121  {
1122  //
1123  // pion-nucleon interaction, producing 2 pions
1124  // fit from Landolt-Bornstein multiplied by factor determined with evaluation of total xs
1125  //
1126 
1127  const Particle *pion;
1128  const Particle *nucleon;
1129  if(particle1->isNucleon()) {
1130  nucleon = particle1;
1131  pion = particle2;
1132  } else {
1133  pion = particle1;
1134  nucleon = particle2;
1135  }
1136 // assert(pion->isPion());
1137 
1138  const G4double pLab = KinematicsUtils::momentumInLab(pion, nucleon);
1139 
1140  // this limit corresponds to sqrt(s)=1230 MeV
1141  if(pLab<296.367)
1142  return 0.0;
1143 
1144  // const G4int ipi = ParticleTable::getIsospin(pion->getType());
1145  // const G4int ind2 = ParticleTable::getIsospin(nucleon->getType());
1146  // const G4int cg = 4 + ind2*ipi;
1147  // assert(cg==2 || cg==4 || cg==6);
1148 
1149  const G4double p1=1e-3*pLab;
1150  G4double tamp6=0.;
1151 
1152  // X-SECTION PI+ P INELASTIQUE :
1153  if(pLab < 2444.7) // corresponds to sqrt(s)=2344 MeV
1154  tamp6=piPluspIne(particle1, particle2)-piPluspOnePi(particle1, particle2);
1155  else
1156  tamp6=1.59+25.5*std::pow(p1, -1.04); // tamp6=(0.636+10.2*std::pow(p1, -1.04))*15./6.;
1157 
1158  // CAS PI+ P ET PI- N
1159  return tamp6;
1160  }
G4bool pion(G4int ityp)
G4double piPluspOnePi(Particle const *const p1, Particle const *const p2)
G4bool nucleon(G4int ityp)
G4double momentumInLab(Particle const *const p1, Particle const *const p2)
gives the momentum in the lab frame of two particles.
double G4double
Definition: G4Types.hh:76
G4double piPluspIne(Particle const *const p1, Particle const *const p2)

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::spnPiMinusPHE ( const G4double  x)
protected

Internal function for pion cross sections.

Definition at line 576 of file G4INCLCrossSectionsMultiPions.cc.

576  {
577  // HE pi- p and pi+ n
578  G4double ramass = 0.0;
579 
580  if(x <= 1275.8) {
581  G4double y = x*x;
582  G4double q2;
583  q2=(y-std::pow(1076.0, 2))*(y-std::pow(800.0, 2))/(4.0*y);
584  if (q2 > 0.) {
585  G4double q3=std::pow(q2, 3./2.);
586  G4double f3=q3/(q3+std::pow(180.0, 3));
587  G4double sdel;
588  sdel=326.5/(std::pow((x-1215.0-ramass)*2.0/110.0,2)+1.0);
589  return sdel*f3*(1.0-5.0*ramass/1215.0)/3.;
590  }
591  else {
592  return 0;
593  }
594  }
595  if(x <= 1495.0) {
596  return 0.00120683*(x-1372.52)*(x-1372.52)+26.2058;
597  } else if(x <= 1578.0) {
598  return 1.15873e-05*x*x+49965.6/((x-1519.59)*(x-1519.59)+2372.55);
599  } else if(x <= 2028.4) {
600  return 34.0248+43262.2/((x-1681.65)*(x-1681.65)+1689.35);
601  } else if(x <= 7500.0) {
602  return 3.3e-7*(x-7500.0)*(x-7500.0)+24.5;
603  } else {
604  return 24.5;
605  }
606  }
double G4double
Definition: G4Types.hh:76

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::spnPiPlusPHE ( const G4double  x)
protected

Internal function for pion cross sections.

Definition at line 546 of file G4INCLCrossSectionsMultiPions.cc.

546  {
547  // HE and LE pi- p and pi+ n
548  G4double ramass = 0.0;
549 
550  if(x <= 1306.0) {
551  G4double y = x*x;
552  G4double q2;
553  q2=(y-std::pow(1076.0, 2))*(y-std::pow(800.0, 2))/(4.0*y);
554  if (q2 > 0.) {
555  G4double q3=std::pow(q2, 3./2.);
556  G4double f3=q3/(q3+std::pow(180.0, 3));
557  G4double sdel;
558  sdel=326.5/(std::pow((x-1215.0-ramass)*2.0/110.0,2)+1.0);
559  return sdel*f3*(1.0-5.0*ramass/1215.0);
560  }
561  else {
562  return 0;
563  }
564  }
565  if(x <= 1754.0) {
566  return -2.33730e-06*std::pow(x, 3)+1.13819e-02*std::pow(x,2)
567  -1.83993e+01*x+9893.4;
568  } else if (x <= 2150.0) {
569  return 1.13531e-06*std::pow(x, 3)-6.91694e-03*std::pow(x, 2)
570  +1.39907e+01*x-9360.76;
571  } else {
572  return -3.18087*std::log(x)+52.9784;
573  }
574  }
double G4double
Definition: G4Types.hh:76

Here is the caller graph for this function:

G4double G4INCL::CrossSectionsMultiPions::total ( Particle const *const  p1,
Particle const *const  p2 
)
virtual

Total (elastic+inelastic) particle-particle cross section.

Implements G4INCL::ICrossSections.

Reimplemented in G4INCL::CrossSectionsMultiPionsAndResonances.

Definition at line 608 of file G4INCLCrossSectionsMultiPions.cc.

608  {
609  G4double inelastic;
610  if(p1->isNucleon() && p2->isNucleon()) {
611  return NNTot(p1, p2);
612  } else if((p1->isNucleon() && p2->isDelta()) ||
613  (p1->isDelta() && p2->isNucleon())) {
614  inelastic = NDeltaToNN(p1, p2);
615  } else if((p1->isNucleon() && p2->isPion()) ||
616  (p1->isPion() && p2->isNucleon())) {
617  return piNTot(p1,p2);
618  } else {
619  inelastic = 0.;
620  }
621 
622  return inelastic + elastic(p1, p2);
623  }
G4double NNTot(Particle const *const part1, Particle const *const part2)
Internal implementation of the NN total cross section.
G4double piNTot(Particle const *const p1, Particle const *const p2)
virtual G4double elastic(Particle const *const p1, Particle const *const p2)
Elastic particle-particle cross section.
virtual G4double NDeltaToNN(Particle const *const p1, Particle const *const p2)
Cross section for NDelta-&gt;NN.
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

Member Data Documentation

const G4int G4INCL::CrossSectionsMultiPions::nMaxPiNN = 4
staticprotected

Maximum number of outgoing pions in NN collisions.

Definition at line 128 of file G4INCLCrossSectionsMultiPions.hh.

const G4int G4INCL::CrossSectionsMultiPions::nMaxPiPiN = 4
staticprotected

Maximum number of outgoing pions in piN collisions.

Definition at line 131 of file G4INCLCrossSectionsMultiPions.hh.

const HornerC8 G4INCL::CrossSectionsMultiPions::s01ppHC
protected

Horner coefficients for s01pp.

Definition at line 136 of file G4INCLCrossSectionsMultiPions.hh.

const G4double G4INCL::CrossSectionsMultiPions::s01ppOOT = 0.003421025623481919853
staticprotected

One over threshold for s01pp.

Definition at line 157 of file G4INCLCrossSectionsMultiPions.hh.

const HornerC4 G4INCL::CrossSectionsMultiPions::s01pzHC
protected

Horner coefficients for s01pz.

Definition at line 138 of file G4INCLCrossSectionsMultiPions.hh.

const G4double G4INCL::CrossSectionsMultiPions::s01pzOOT = 0.0035739814152966403123
staticprotected

One over threshold for s01pz.

Definition at line 159 of file G4INCLCrossSectionsMultiPions.hh.

const HornerC6 G4INCL::CrossSectionsMultiPions::s02pmHC
protected

Horner coefficients for s02pm.

Definition at line 150 of file G4INCLCrossSectionsMultiPions.hh.

const G4double G4INCL::CrossSectionsMultiPions::s02pmOOT = 0.0016661112962345883443
staticprotected

One over threshold for s02pm.

Definition at line 171 of file G4INCLCrossSectionsMultiPions.hh.

const HornerC4 G4INCL::CrossSectionsMultiPions::s02pzHC
protected

Horner coefficients for s02pz.

Definition at line 148 of file G4INCLCrossSectionsMultiPions.hh.

const G4double G4INCL::CrossSectionsMultiPions::s02pzOOT = 0.00125
staticprotected

One over threshold for s02pz.

Definition at line 169 of file G4INCLCrossSectionsMultiPions.hh.

const HornerC4 G4INCL::CrossSectionsMultiPions::s11pmHC
protected

Horner coefficients for s11pm.

Definition at line 140 of file G4INCLCrossSectionsMultiPions.hh.

const G4double G4INCL::CrossSectionsMultiPions::s11pmOOT = 0.0034855350296270480281
staticprotected

One over threshold for s11pm.

Definition at line 161 of file G4INCLCrossSectionsMultiPions.hh.

const HornerC7 G4INCL::CrossSectionsMultiPions::s11pzHC
protected

Horner coefficients for s11pz.

Definition at line 134 of file G4INCLCrossSectionsMultiPions.hh.

const G4double G4INCL::CrossSectionsMultiPions::s11pzOOT = 0.0035761542037692665889
staticprotected

One over threshold for s11pz.

Definition at line 155 of file G4INCLCrossSectionsMultiPions.hh.

const HornerC4 G4INCL::CrossSectionsMultiPions::s12mzHC
protected

Horner coefficients for s12mz.

Definition at line 152 of file G4INCLCrossSectionsMultiPions.hh.

const G4double G4INCL::CrossSectionsMultiPions::s12mzOOT = 0.0017047391749062392793
staticprotected

One over threshold for s12mz.

Definition at line 173 of file G4INCLCrossSectionsMultiPions.hh.

const HornerC5 G4INCL::CrossSectionsMultiPions::s12pmHC
protected

Horner coefficients for s12pm.

Definition at line 142 of file G4INCLCrossSectionsMultiPions.hh.

const G4double G4INCL::CrossSectionsMultiPions::s12pmOOT = 0.0016672224074691565119
staticprotected

One over threshold for s12pm.

Definition at line 163 of file G4INCLCrossSectionsMultiPions.hh.

const HornerC3 G4INCL::CrossSectionsMultiPions::s12ppHC
protected

Horner coefficients for s12pp.

Definition at line 144 of file G4INCLCrossSectionsMultiPions.hh.

const G4double G4INCL::CrossSectionsMultiPions::s12ppOOT = 0.0016507643038726931312
staticprotected

One over threshold for s12pp.

Definition at line 165 of file G4INCLCrossSectionsMultiPions.hh.

const HornerC4 G4INCL::CrossSectionsMultiPions::s12zzHC
protected

Horner coefficients for s12zz.

Definition at line 146 of file G4INCLCrossSectionsMultiPions.hh.

const G4double G4INCL::CrossSectionsMultiPions::s12zzOOT = 0.0011111111111111111111
staticprotected

One over threshold for s12zz.

Definition at line 167 of file G4INCLCrossSectionsMultiPions.hh.


The documentation for this class was generated from the following files: