64 : fTotalXsc(0.0), fElasticXsc(0.0), fInelasticXsc(0.0)
84 outFile <<
"G4HadronNucleonXsc calculates the total, inelastic and elastic\n"
85 <<
"hadron-nucleon cross sections using several different\n"
86 <<
"parameterizations within the Glauber-Gribov approach. It is\n"
87 <<
"valid for all incident gammas and long-lived hadrons at\n"
88 <<
"energies above 30 keV. This is a cross section component which\n"
89 <<
"is to be used to build a cross section data set.\n";
99 if ( pdg == 2212 || pdg == 2112 || pdg == 211 ) {
102 else if ( pdg == 22 )
106 else if ( pdg == 321 || pdg == 310 || pdg == 130 )
112 if (pdg == 3122 || pdg == 3222 || pdg == 3112 || pdg == 3212 || pdg == 3322 || pdg == 3312 || pdg == 3324 ||
113 pdg == 4122 || pdg == 4332 || pdg == 4122 || pdg == 4212 || pdg == 4222 || pdg == 4112 || pdg == 4232 || pdg == 4132 ||
114 pdg == 5122 || pdg == 5332 || pdg == 5122 || pdg == 5112 || pdg == 5222 || pdg == 5212 || pdg == 5132 || pdg == 5232
123 }
else if (pdg > 220) {
124 if (pdg == 511 || pdg == 421 || pdg == 531 || pdg == 541 || pdg == 431 || pdg == 411 || pdg == 521 ||
125 pdg == 221 || pdg == 331 || pdg == 441 || pdg == 443 || pdg == 543)
149 static const G4double eta1 = 0.4473;
150 static const G4double eta2 = 0.5486;
162 G4double P(0.0), R1(0.0), R2(0.0), del(1.0);
198 else if(pdg == -2212)
214 else if(pdg == -2112)
291 R1 = (
neutron) ? 0.0231 : 0.0139;
310 (del*(H*blog*blog +
P) + R1*
G4Exp(-eta1*blog) + R2*
G4Exp(-eta2*blog));
347 if(pdg == -2212 || pdg == -2112) {
354 G4double pLab = std::sqrt(ekin*(ekin + 2*
pM));
379 else if( pLab >= 100.)
384 else if( pLab >= 10.)
386 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
398 else if( pLab < 0.73 )
403 else if( pLab < 1.05 )
411 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
421 else if( pLab < 0.8 )
426 else if( pLab < 1.4 )
434 fTotalXsc = 33.3 + 20.8*(pLab*pLab - 1.35)
436 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
449 else if( pLab >= 100.)
454 else if( pLab >= 10.)
456 fElasticXsc = 6. + 20./( (logP-0.182)*(logP-0.182) + 1.0 );
468 else if( pLab < 1.05 )
477 fElasticXsc = 6. + 20./( (logP-0.182)*(logP-0.182) + 1.0 );
487 else if( pLab < 0.8 )
492 else if( pLab < 1.4 )
501 fTotalXsc = 33.3 + 20.8*(pLab*pLab - 1.35)
503 fElasticXsc = 6. + 20./( (logP-0.182)*(logP-0.182) + 1.0 );
513 fTotalXsc = 10./((logP + 1.273)*(logP + 1.273) + 0.05);
516 else if( pLab < 0.68 )
518 fTotalXsc = 14./((logP + 1.273)*(logP + 1.273) + 0.07);
521 else if( pLab < 0.85 )
527 else if( pLab < 1.15 )
531 fElasticXsc = 6.0 + 1.4/(( pLab - 1.4)*( pLab - 1.4) + 0.1);
535 G4double Ex1 = 3.2*
G4Exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
536 G4double Ex2 = 12*
G4Exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
538 fElasticXsc = 6.0 + 1.4/(( pLab - 1.4)*( pLab - 1.4) + 0.1);
540 else if( pLab < 2.0 )
542 G4double Ex1 = 3.2*
G4Exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
543 G4double Ex2 = 12*
G4Exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
545 fElasticXsc = 3.0 + 1.36/( (logP - 0.336)*(logP - 0.336) + 0.08);
547 else if( pLab < 3.5 )
549 G4double Ex1 = 3.2*
G4Exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
550 G4double Ex2 = 12*
G4Exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
552 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
554 else if( pLab < 10. )
557 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
561 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
569 fTotalXsc = 0.288/((pLab - 0.28)*(pLab - 0.28) + 0.004);
570 fElasticXsc = 1.8/((logP + 1.273)*(logP + 1.273) + 0.07);
572 else if( pLab < 0.395676 )
574 fTotalXsc = 0.648/((pLab - 0.28)*(pLab - 0.28) + 0.009);
575 fElasticXsc = 0.257/((pLab - 0.28)*(pLab - 0.28) + 0.01);
577 else if( pLab < 0.5 )
583 else if( pLab < 0.65 )
587 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
589 else if( pLab < 0.72 )
592 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
593 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
595 else if( pLab < 0.88 )
598 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
599 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
601 else if( pLab < 1.03 )
604 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
605 fElasticXsc = 2.0 + 0.4/((pLab - 1.03)*(pLab - 1.03) + 0.016);
607 else if( pLab < 1.15 )
610 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
611 fElasticXsc = 2.0 + 0.4/((pLab - 1.03)*(pLab - 1.03) + 0.016);
613 else if( pLab < 1.3 )
616 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
622 3*
G4Exp(-(pLab-2.1)*(pLab-2.1)/0.4/0.4)+
623 1.5*
G4Exp(-(pLab-1.4)*(pLab-1.4)/0.12/0.12);
635 G4double psp = pLab*std::sqrt(pLab);
639 else if( pLab >
pMax )
667 + .004/md + 0.005/hd1+ 0.01/hd2 +.15/hd;
670 + .006/md + 0.01/hd1+ 0.02/hd2 + .20/hd ;
690 fTotalXsc = 25.2 + 0.38*sqrLogPlab - 2.9*logP + 0.30/hd;
700 else if( pLab >
pMax )
718 + 2./((pLab - 0.8)*(pLab - 0.8) + 0.652);
720 + 2.6/((pLab - 1.)*(pLab - 1.) + 0.392);
732 else if( pLab >
pMax )
786 }
else if(theParticle ==
theK0S || theParticle ==
theK0L) {
812 }
else if(theParticle ==
theK0S || theParticle ==
theK0L) {
849 G4double pLab = std::sqrt(ekin*(ekin + 2*
pM));
863 G4double psp = pLab*std::sqrt(pLab);
867 else if( pLab >
pMax )
906 fTotalXsc = 25.2 + 0.38*sqrLogPlab - 2.9*logP + 0.60/hd;
916 else if( pLab >
pMax )
934 + 2./((pLab - 0.8)*(pLab - 0.8) + 0.652);
936 + 2.6/((pLab - 1.)*(pLab - 1.) + 0.392);
948 else if( pLab >
pMax )
1001 if( pdg == 3122 || pdg == 3112 || pdg == 3212 || pdg == 3222 )
1006 else if( pdg == 3312 || pdg == 3322 )
1011 else if( pdg == 3334 )
1016 else if( pdg == 4122 || pdg == 4112 || pdg == 4212 || pdg == 4222 )
1021 else if( pdg == 4332 )
1026 else if( pdg == 4132 || pdg == 4232 )
1031 else if( pdg == 5122 || pdg == 5112 || pdg == 5212 || pdg == 5222 )
1036 else if( pdg == 5332 )
1041 else if( pdg == 5132 || pdg == 5232 )
1064 if( pdg == 511 || pdg == 521 )
1069 else if( pdg == 411 || pdg == 421 )
1074 else if( pdg == 531 )
1079 else if( pdg == 541 )
1084 else if( pdg == 431 )
1089 else if( pdg == 441 || pdg == 443 )
1094 else if( pdg == 553 )
1099 else if( pdg == 221 )
1104 else if( pdg == 331 )
1123 G4int absPDGcode = std::abs(PDGcode);
1128 G4double sqrLogPlab = logPlab * logPlab;
1133 if( absPDGcode > 1000)
1137 fTotalXsc = 48.0 + 0.522*sqrLogPlab - 4.51*logPlab;
1138 fElasticXsc = 11.9 + 26.9*
G4Exp(-logPlab*1.21) + 0.169*sqrLogPlab - 1.85*logPlab;
1142 fTotalXsc = 47.3 + 0.513*sqrLogPlab - 4.27*logPlab;
1143 fElasticXsc = 11.9 + 26.9*
G4Exp(-logPlab*1.21) + 0.169*sqrLogPlab - 1.85*logPlab;
1146 else if( PDGcode == 211)
1150 fTotalXsc = 16.4 + 19.3 *
G4Exp(-logPlab*0.42) + 0.19 *sqrLogPlab - 0.0 *logPlab;
1151 fElasticXsc = 0.0 + 11.4*
G4Exp(-logPlab*0.40) + 0.079*sqrLogPlab - 0.0 *logPlab;
1155 fTotalXsc = 33.0 + 14.0 *
G4Exp(-logPlab*1.36) + 0.456*sqrLogPlab - 4.03*logPlab;
1156 fElasticXsc = 1.76 + 11.2*
G4Exp(-logPlab*0.64) + 0.043*sqrLogPlab - 0.0 *logPlab;
1159 else if( PDGcode == -211)
1163 fTotalXsc = 33.0 + 14.0 *
G4Exp(-logPlab*1.36) + 0.456*sqrLogPlab - 4.03*logPlab;
1164 fElasticXsc = 1.76 + 11.2*
G4Exp(-logPlab*0.64) + 0.043*sqrLogPlab - 0.0 *logPlab;
1168 fTotalXsc = 16.4 + 19.3 *
G4Exp(-logPlab*0.42) + 0.19 *sqrLogPlab - 0.0 *logPlab;
1169 fElasticXsc = 0.0 + 11.4*
G4Exp(-logPlab*0.40) + 0.079*sqrLogPlab - 0.0 *logPlab;
1172 else if( PDGcode == 111)
1176 fTotalXsc = (16.4 + 19.3 *
G4Exp(-logPlab*0.42) + 0.19 *sqrLogPlab - 0.0 *logPlab +
1177 33.0 + 14.0 *
G4Exp(-logPlab*1.36) + 0.456*sqrLogPlab - 4.03*logPlab)/2;
1179 fElasticXsc = (0.0 + 11.4*
G4Exp(-logPlab*0.40) + 0.079*sqrLogPlab - 0.0 *logPlab +
1180 1.76 + 11.2*
G4Exp(-logPlab*0.64) + 0.043*sqrLogPlab - 0.0 *logPlab)/2;
1185 fTotalXsc = (33.0 + 14.0 *
G4Exp(-logPlab*1.36) + 0.456*sqrLogPlab - 4.03*logPlab +
1186 16.4 + 19.3 *
G4Exp(-logPlab*0.42) + 0.19 *sqrLogPlab - 0.0 *logPlab)/2;
1187 fElasticXsc = (1.76 + 11.2*
G4Exp(-logPlab*0.64) + 0.043*sqrLogPlab - 0.0 *logPlab +
1188 0.0 + 11.4*
G4Exp(-logPlab*0.40) + 0.079*sqrLogPlab - 0.0 *logPlab)/2;
1191 else if( PDGcode == 321 )
1195 fTotalXsc = 18.1 + 0.26 *sqrLogPlab - 1.0 *logPlab;
1196 fElasticXsc = 5.0 + 8.1*
G4Exp(-logPlab*1.8 ) + 0.16 *sqrLogPlab - 1.3 *logPlab;
1200 fTotalXsc = 18.7 + 0.21 *sqrLogPlab - 0.89*logPlab;
1201 fElasticXsc = 7.3 + 0.29 *sqrLogPlab - 2.4 *logPlab;
1204 else if( PDGcode ==-321 )
1208 fTotalXsc = 32.1 + 0.66*sqrLogPlab - 5.6*logPlab;
1209 fElasticXsc = 7.3 + 0.29*sqrLogPlab - 2.4*logPlab;
1213 fTotalXsc = 25.2 + 0.38*sqrLogPlab - 2.9*logPlab;
1214 fElasticXsc = 5.0 + 8.1*
G4Exp(-logPlab*1.8 ) + 0.16*sqrLogPlab - 1.3*logPlab;
1217 else if( PDGcode == 311 )
1221 fTotalXsc = ( 18.1 + 0.26 *sqrLogPlab - 1.0 *logPlab +
1222 32.1 + 0.66 *sqrLogPlab - 5.6 *logPlab)/2;
1223 fElasticXsc = ( 5.0 + 8.1*
G4Exp(-logPlab*1.8 ) + 0.16 *sqrLogPlab - 1.3 *logPlab +
1224 7.3 + 0.29 *sqrLogPlab - 2.4 *logPlab)/2;
1228 fTotalXsc = ( 18.7 + 0.21 *sqrLogPlab - 0.89*logPlab +
1229 25.2 + 0.38 *sqrLogPlab - 2.9 *logPlab)/2;
1230 fElasticXsc = ( 7.3 + 0.29 *sqrLogPlab - 2.4 *logPlab +
1231 5.0 + 8.1*
G4Exp(-logPlab*1.8 ) + 0.16 *sqrLogPlab - 1.3 *logPlab)/2;
1238 fTotalXsc = 48.0 + 0.522*sqrLogPlab - 4.51*logPlab;
1239 fElasticXsc = 11.9 + 26.9*
G4Exp(-logPlab*1.21) + 0.169*sqrLogPlab - 1.85*logPlab;
1243 fTotalXsc = 47.3 + 0.513*sqrLogPlab - 4.27*logPlab;
1244 fElasticXsc = 11.9 + 26.9*
G4Exp(-logPlab*1.21) + 0.169*sqrLogPlab - 1.85*logPlab;
1279 xsection = 0.0677*x1 + 0.129*x2;
1283 xsection = 21.70*x1 + 56.08*x2;
1287 xsection = 21.70*x1 + 56.08*x2;
1290 else if(pdg == -2212)
1292 xsection = 21.70*x1 + 98.39*x2;
1296 xsection = 13.63*x1 + 27.56*x2;
1299 else if(pdg == -211)
1301 xsection = 13.63*x1 + 36.02*x2;
1305 xsection = 11.82*x1 + 8.15*x2;
1309 xsection = 11.82*x1 + 26.36*x2;
1311 else if(theParticle ==
theK0S || theParticle ==
theK0L)
1313 xsection = 11.82*x1 + 17.25*x2;
1317 xsection = 21.70*x1 + 56.08*x2;
1347 G4double totEcm = std::sqrt(
pM*
pM + tM*tM + 2.*pElab*tM);
1356 G4double ratio = (totTcm > bC) ? 1. - bC/totTcm : 0.0;
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
static const G4double invGeV2
static const G4double minLogP
static const G4double ekinmaxQB
static const G4double cofLogT
static const G4double invGeV
static const G4double pMax
static const G4double pMin
static const G4double ekinmin
static const G4double cofLogE
G4double G4Log(G4double x)
G4double CoulombBarrier(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
const G4ParticleDefinition * theK0S
const G4ParticleDefinition * theK0L
G4double HadronNucleonXscEL(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
G4double KaonNucleonXscGG(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
G4double KaonNucleonXscNS(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
G4double SCBMesonNucleonXscNS(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
void CrossSectionDescription(std::ostream &) const
const G4ParticleDefinition * theKPlus
G4double HadronNucleonXscVU(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
G4double HadronNucleonXsc(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
const G4ParticleDefinition * theNeutron
G4double CalcMandelstamS(G4double ekin1, G4double mass1, G4double mass2)
G4double KaonNucleonXscVG(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
const G4ParticleDefinition * thePiPlus
G4double HyperonNucleonXscNS(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
const G4ParticleDefinition * theProton
G4double HadronNucleonXscPDG(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
G4double HadronNucleonXscNS(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
const G4ParticleDefinition * theKMinus
static G4KaonMinus * KaonMinus()
static G4KaonPlus * KaonPlus()
static G4KaonZeroLong * KaonZeroLong()
static G4KaonZeroShort * KaonZeroShort()
static G4Neutron * Neutron()
static G4double CoulombFactor(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
G4double GetPDGMass() const
G4int GetPDGEncoding() const
G4double GetPDGCharge() const
static G4PionPlus * PionPlus()
static G4Pow * GetInstance()
G4double powN(G4double x, G4int n) const
static G4Proton * Proton()
static constexpr double millibarn
static constexpr double proton_mass_c2
static constexpr double GeV
static constexpr double neutron_mass_c2
static constexpr double MeV
static constexpr double fermi
T max(const T t1, const T t2)
brief Return the largest of the two arguments
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
G4bool nucleon(G4int ityp)