52static const G4double invGeV = 1.0/CLHEP::GeV;
53static const G4double invGeV2 = 1.0/(CLHEP::GeV*CLHEP::GeV);
56static const G4double cofLogE = .0557;
60static const G4double ekinmin = 0.1*CLHEP::MeV;
61static const G4double ekinmaxQB = 100*CLHEP::MeV;
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;
156 G4double mass2 = nucleon->GetPDGMass();
158 G4double sMand = CalcMandelstamS(ekin, mass1, mass2)*invGeV2;
159 G4double x = (mass1 + mass2)*invGeV + M;
162 G4double P(0.0), R1(0.0), R2(0.0), del(1.0);
164 G4bool proton = (nucleon == theProton);
165 G4bool neutron = (nucleon == theNeutron);
167 if(theParticle == theNeutron)
182 else if(theParticle == theProton)
198 else if(pdg == -2212)
214 else if(pdg == -2112)
243 else if(theParticle == theKPlus)
258 else if(theParticle == theKMinus)
273 else if(theParticle == theK0S || theParticle == theK0L)
291 R1 = (neutron) ? 0.0231 : 0.0139;
309 fTotalXsc = CLHEP::millibarn*
310 (del*(H*blog*blog + P) + R1*
G4Exp(-eta1*blog) + R2*
G4Exp(-eta2*blog));
311 fInelasticXsc = 0.75*fTotalXsc;
312 fElasticXsc = fTotalXsc - fInelasticXsc;
314 if( proton && theParticle->
GetPDGCharge() > 0. && ekin < ekinmaxQB )
340 const G4double ekin = std::max(ekin0, ekinmin);
347 if(pdg == -2212 || pdg == -2112) {
352 G4double tM = nucleon->GetPDGMass();
354 G4double pLab = std::sqrt(ekin*(ekin + 2*pM));
356 G4double sMand = CalcMandelstamS(ekin, pM, tM)*invGeV2;
363 }
else { fTotalXsc = 0.0; }
369 G4bool proton = (nucleon == theProton);
370 G4bool neutron = (nucleon == theNeutron);
372 if( theParticle == theNeutron)
379 else if( pLab >= 100.)
384 else if( pLab >= 10.)
386 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
395 fTotalXsc = 23 + 50*std::sqrt(g4calc->
powN(-x, 7));
396 fElasticXsc = fTotalXsc;
398 else if( pLab < 0.73 )
400 fTotalXsc = 23 + 50*std::sqrt(g4calc->
powN(-x, 7));
401 fElasticXsc = fTotalXsc;
403 else if( pLab < 1.05 )
405 fTotalXsc = 23 + 40*x*x;
406 fElasticXsc = 23 + 20*x*x;
410 fTotalXsc = 39.0+75*(pLab - 1.2)/(g4calc->
powN(pLab,3) + 0.15);
411 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
419 fElasticXsc = fTotalXsc;
421 else if( pLab < 0.8 )
423 fTotalXsc = 33+30*g4calc->
powN(
G4Log(pLab/1.3),4);
424 fElasticXsc = fTotalXsc;
426 else if( pLab < 1.4 )
428 fTotalXsc = 33+30*g4calc->
powN(
G4Log(pLab/0.95),2);
430 fElasticXsc = 6 + 52/( x*x + 1.6 );
434 fTotalXsc = 33.3 + 20.8*(pLab*pLab - 1.35)
435 /(std::sqrt(g4calc->
powN(pLab,5)) + 0.95);
436 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
442 else if(theParticle == theProton)
449 else if( pLab >= 100.)
454 else if( pLab >= 10.)
456 fElasticXsc = 6. + 20./( (logP-0.182)*(logP-0.182) + 1.0 );
465 fTotalXsc = 23 + 50*std::sqrt(g4calc->
powN(
G4Log(0.73/pLab),7));
466 fElasticXsc = fTotalXsc;
468 else if( pLab < 1.05 )
471 fTotalXsc = 23 + 40*x*x;
472 fElasticXsc = 23 + 20*x*x;
476 fTotalXsc = 39.0+75*(pLab - 1.2)/(g4calc->
powN(pLab,3) + 0.15);
477 fElasticXsc = 6. + 20./( (logP-0.182)*(logP-0.182) + 1.0 );
485 fElasticXsc = fTotalXsc;
487 else if( pLab < 0.8 )
489 fTotalXsc = 33+30*g4calc->
powN(
G4Log(pLab/1.3),4);
490 fElasticXsc = fTotalXsc;
492 else if( pLab < 1.4 )
496 fTotalXsc = 33+30*x1*x1;
497 fElasticXsc = 6 + 52/(x2*x2 + 1.6);
501 fTotalXsc = 33.3 + 20.8*(pLab*pLab - 1.35)
502 /(std::sqrt(g4calc->
powN(pLab,5)) + 0.95);
503 fElasticXsc = 6. + 20./( (logP-0.182)*(logP-0.182) + 1.0 );
509 else if((pdg == 211 && proton) || (pdg == -211 && neutron))
513 fTotalXsc = 10./((logP + 1.273)*(logP + 1.273) + 0.05);
514 fElasticXsc = fTotalXsc;
516 else if( pLab < 0.68 )
518 fTotalXsc = 14./((logP + 1.273)*(logP + 1.273) + 0.07);
519 fElasticXsc = fTotalXsc;
521 else if( pLab < 0.85 )
524 fTotalXsc = 88.*x*x + 14.9;
525 fElasticXsc = fTotalXsc*
G4Exp(-3.*(pLab - 0.68));
527 else if( pLab < 1.15 )
530 fTotalXsc = 88.*x*x + 14.9;
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);
537 fTotalXsc = Ex1 + Ex2 + 27.5;
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);
544 fTotalXsc = Ex1 + Ex2 + 27.5;
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);
551 fTotalXsc = Ex1 + Ex2 + 27.5;
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);
565 else if((pdg == 211 && neutron) || (pdg == -211 && proton))
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 )
580 fTotalXsc = 26 + 110*y*y;
581 fElasticXsc = 0.37*fTotalXsc;
583 else if( pLab < 0.65 )
586 fTotalXsc = 26. + 110.*x*x;
587 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
589 else if( pLab < 0.72 )
591 fTotalXsc = 36.1 + 10*
G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
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 )
597 fTotalXsc = 36.1 + 10.*
G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
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 )
603 fTotalXsc = 36.1 + 10.*
G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
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 )
609 fTotalXsc = 36.1 + 10.*
G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
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 )
615 fTotalXsc = 36.1 + 10.*
G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
616 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
617 fElasticXsc = 3. + 13./pLab;
621 fTotalXsc = 36.1 + 0.079-4.313*logP+
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);
624 fElasticXsc = 3. + 13./pLab;
628 fElasticXsc = 3. + 13./pLab;
631 else if( (theParticle == theKMinus) && proton )
635 G4double psp = pLab*std::sqrt(pLab);
636 fElasticXsc = 5.2/psp;
639 else if( pLab > pMax )
643 fElasticXsc = cofLogE*ld2 + 2.23;
644 fTotalXsc = 1.1*cofLogT*ld2 + 19.7;
666 fElasticXsc = 5.2/psp + (1.1*cofLogE*ld2 + 2.23)/(1. - .7/sp + .075/p4)
667 + .004/md + 0.005/hd1+ 0.01/hd2 +.15/hd;
669 fTotalXsc = 14./psp + (1.1*cofLogT*ld2 + 19.5)/(1. - .21/sp + .52/p4)
670 + .006/md + 0.01/hd1+ 0.02/hd2 + .20/hd ;
673 else if( (theParticle == theKMinus) && neutron )
679 fElasticXsc = cofLogE*ld2 + 2.23;
680 fTotalXsc = 1.1*cofLogT*ld2 + 19.7;
688 fElasticXsc = 5.0 + 8.1*
G4Exp(-logP*1.8) + 0.16*sqrLogPlab
690 fTotalXsc = 25.2 + 0.38*sqrLogPlab - 2.9*logP + 0.30/hd;
693 else if( (theParticle == theKPlus) && proton )
698 fElasticXsc = fTotalXsc = 12.03;
700 else if( pLab > pMax )
704 fElasticXsc = cofLogE*ld2 + 2.23;
705 fTotalXsc = cofLogT*ld2 + 19.2;
717 fElasticXsc =
LE + (cofLogE*ld2 + 2.23)/(1. - .7/sp + .1/p4)
718 + 2./((pLab - 0.8)*(pLab - 0.8) + 0.652);
719 fTotalXsc =
LE + (cofLogT*ld2 + 19.5)/(1. + .46/sp + 1.6/p4)
720 + 2.6/((pLab - 1.)*(pLab - 1.) + 0.392);
723 else if( (theParticle == theKPlus) && neutron)
732 else if( pLab > pMax )
736 fElasticXsc = cofLogE*ld2 + 2.23;
737 fTotalXsc = cofLogT*ld2 + 19.2;
748 fElasticXsc = (cofLogE*ld2 + 2.23)/(1. - .7/sp + .1/p4) + 2./md;
749 fTotalXsc = (cofLogT*ld2 + 19.5)/(1. + .46/sp + 1.6/p4) + 4.6/md;
752 fTotalXsc *= CLHEP::millibarn;
753 fElasticXsc *= CLHEP::millibarn;
754 fElasticXsc = std::min(fElasticXsc, fTotalXsc);
756 if( proton && theParticle->
GetPDGCharge() > 0. && ekin < ekinmaxQB )
762 fInelasticXsc = std::max(fTotalXsc - fElasticXsc,0.0);
782 fTotalXsc = fElasticXsc = fInelasticXsc = 0.0;
783 if(theParticle == theKMinus || theParticle == theKPlus) {
786 }
else if(theParticle == theK0S || theParticle == theK0L) {
792 sinel += fInelasticXsc;
793 fTotalXsc = stot*0.5;
794 fElasticXsc = sel*0.5;
795 fInelasticXsc = sinel*0.5;
808 fTotalXsc = fElasticXsc = fInelasticXsc = 0.0;
809 if(theParticle == theKMinus || theParticle == theKPlus) {
812 }
else if(theParticle == theK0S || theParticle == theK0L) {
817 if(ekin > ekinmaxQB) {
820 sinel = fInelasticXsc;
823 sinel += fInelasticXsc;
825 fact *= std::sqrt(ekinmaxQB/std::max(ekin, ekinmin));
828 sinel = fInelasticXsc;
831 sinel += fInelasticXsc;
833 fTotalXsc = stot*fact;
834 fElasticXsc = sel*fact;
835 fInelasticXsc = sinel*fact;
849 G4double pLab = std::sqrt(ekin*(ekin + 2*pM));
856 G4bool proton = (nucleon == theProton);
857 G4bool neutron = (nucleon == theNeutron);
859 if( (theParticle == theKMinus) && proton )
863 G4double psp = pLab*std::sqrt(pLab);
864 fElasticXsc = 5.2/psp;
867 else if( pLab > pMax )
871 fElasticXsc = cofLogE*ld2 + 2.23;
872 fTotalXsc = 1.1*cofLogT*ld2 + 19.7;
885 fElasticXsc = 5.2/psp + (cofLogE*ld2 + 2.23)/(1. - .7/sp + .075/p4) + .15/hd;
886 fTotalXsc = 14./psp + (1.1*cofLogT*ld2 + 19.5)/(1. - .21/sp + .52/p4) + .60/hd;
889 else if( (theParticle == theKMinus) && neutron )
895 fElasticXsc = cofLogE*ld2 + 2.23;
896 fTotalXsc = 1.1*cofLogT*ld2 + 19.7;
904 fElasticXsc = 5.0 + 8.1*
G4Exp(-logP*1.8) + 0.16*sqrLogPlab
906 fTotalXsc = 25.2 + 0.38*sqrLogPlab - 2.9*logP + 0.60/hd;
909 else if( (theParticle == theKPlus) && proton )
914 fElasticXsc = fTotalXsc = 12.03;
916 else if( pLab > pMax )
920 fElasticXsc = cofLogE*ld2 + 2.23;
921 fTotalXsc = cofLogT*ld2 + 19.2;
933 fElasticXsc =
LE + (cofLogE*ld2 + 2.23)/(1. - .7/sp + .1/p4)
934 + 2./((pLab - 0.8)*(pLab - 0.8) + 0.652);
935 fTotalXsc =
LE + (cofLogT*ld2 + 19.5)/(1. + .46/sp + 1.6/p4)
936 + 2.6/((pLab - 1.)*(pLab - 1.) + 0.392);
939 else if( (theParticle == theKPlus) && neutron)
948 else if( pLab > pMax )
952 fElasticXsc = cofLogE*ld2 + 2.23;
953 fTotalXsc = cofLogT*ld2 + 19.2;
964 fElasticXsc = (cofLogE*ld2 + 2.23)/(1. - .7/sp + .1/p4) + 2./md;
965 fTotalXsc = (cofLogT*ld2 + 19.5)/(1. + .46/sp + 1.6/p4) + 4.6/md;
969 fTotalXsc *= CLHEP::millibarn;
970 fElasticXsc *= CLHEP::millibarn;
978 fElasticXsc = std::min(fElasticXsc, fTotalXsc);
979 fInelasticXsc = std::max(fTotalXsc - fElasticXsc,0.0);
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 )
1046 fInelasticXsc *= coeff;
1047 fElasticXsc *= coeff;
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 )
1109 fElasticXsc *= coeff;
1110 fInelasticXsc *= coeff;
1123 G4int absPDGcode = std::abs(PDGcode);
1127 G4double Plab = std::sqrt(ekin*(ekin + 2.*mass));
1133 G4double sqrLogPlab = logPlab * logPlab;
1135 G4bool proton = (nucleon == theProton);
1136 G4bool neutron = (nucleon == theNeutron);
1138 if( absPDGcode > 1000)
1142 fTotalXsc = 48.0 + 0.522*sqrLogPlab - 4.51*logPlab;
1143 fElasticXsc = 11.9 + 26.9*
G4Exp(-logPlab*1.21) + 0.169*sqrLogPlab - 1.85*logPlab;
1147 fTotalXsc = 47.3 + 0.513*sqrLogPlab - 4.27*logPlab;
1148 fElasticXsc = 11.9 + 26.9*
G4Exp(-logPlab*1.21) + 0.169*sqrLogPlab - 1.85*logPlab;
1151 else if( PDGcode == 211)
1155 fTotalXsc = 16.4 + 19.3 *
G4Exp(-logPlab*0.42) + 0.19 *sqrLogPlab - 0.0 *logPlab;
1156 fElasticXsc = 0.0 + 11.4*
G4Exp(-logPlab*0.40) + 0.079*sqrLogPlab - 0.0 *logPlab;
1160 fTotalXsc = 33.0 + 14.0 *
G4Exp(-logPlab*1.36) + 0.456*sqrLogPlab - 4.03*logPlab;
1161 fElasticXsc = 1.76 + 11.2*
G4Exp(-logPlab*0.64) + 0.043*sqrLogPlab - 0.0 *logPlab;
1164 else if( PDGcode == -211)
1168 fTotalXsc = 33.0 + 14.0 *
G4Exp(-logPlab*1.36) + 0.456*sqrLogPlab - 4.03*logPlab;
1169 fElasticXsc = 1.76 + 11.2*
G4Exp(-logPlab*0.64) + 0.043*sqrLogPlab - 0.0 *logPlab;
1173 fTotalXsc = 16.4 + 19.3 *
G4Exp(-logPlab*0.42) + 0.19 *sqrLogPlab - 0.0 *logPlab;
1174 fElasticXsc = 0.0 + 11.4*
G4Exp(-logPlab*0.40) + 0.079*sqrLogPlab - 0.0 *logPlab;
1177 else if( PDGcode == 111)
1181 fTotalXsc = (16.4 + 19.3 *
G4Exp(-logPlab*0.42) + 0.19 *sqrLogPlab - 0.0 *logPlab +
1182 33.0 + 14.0 *
G4Exp(-logPlab*1.36) + 0.456*sqrLogPlab - 4.03*logPlab)/2;
1184 fElasticXsc = (0.0 + 11.4*
G4Exp(-logPlab*0.40) + 0.079*sqrLogPlab - 0.0 *logPlab +
1185 1.76 + 11.2*
G4Exp(-logPlab*0.64) + 0.043*sqrLogPlab - 0.0 *logPlab)/2;
1190 fTotalXsc = (33.0 + 14.0 *
G4Exp(-logPlab*1.36) + 0.456*sqrLogPlab - 4.03*logPlab +
1191 16.4 + 19.3 *
G4Exp(-logPlab*0.42) + 0.19 *sqrLogPlab - 0.0 *logPlab)/2;
1192 fElasticXsc = (1.76 + 11.2*
G4Exp(-logPlab*0.64) + 0.043*sqrLogPlab - 0.0 *logPlab +
1193 0.0 + 11.4*
G4Exp(-logPlab*0.40) + 0.079*sqrLogPlab - 0.0 *logPlab)/2;
1196 else if( PDGcode == 321 )
1200 fTotalXsc = 18.1 + 0.26 *sqrLogPlab - 1.0 *logPlab;
1201 fElasticXsc = 5.0 + 8.1*
G4Exp(-logPlab*1.8 ) + 0.16 *sqrLogPlab - 1.3 *logPlab;
1205 fTotalXsc = 18.7 + 0.21 *sqrLogPlab - 0.89*logPlab;
1206 fElasticXsc = 7.3 + 0.29 *sqrLogPlab - 2.4 *logPlab;
1209 else if( PDGcode ==-321 )
1213 fTotalXsc = 32.1 + 0.66*sqrLogPlab - 5.6*logPlab;
1214 fElasticXsc = 7.3 + 0.29*sqrLogPlab - 2.4*logPlab;
1218 fTotalXsc = 25.2 + 0.38*sqrLogPlab - 2.9*logPlab;
1219 fElasticXsc = 5.0 + 8.1*
G4Exp(-logPlab*1.8 ) + 0.16*sqrLogPlab - 1.3*logPlab;
1222 else if( PDGcode == 311 )
1226 fTotalXsc = ( 18.1 + 0.26 *sqrLogPlab - 1.0 *logPlab +
1227 32.1 + 0.66 *sqrLogPlab - 5.6 *logPlab)/2;
1228 fElasticXsc = ( 5.0 + 8.1*
G4Exp(-logPlab*1.8 ) + 0.16 *sqrLogPlab - 1.3 *logPlab +
1229 7.3 + 0.29 *sqrLogPlab - 2.4 *logPlab)/2;
1233 fTotalXsc = ( 18.7 + 0.21 *sqrLogPlab - 0.89*logPlab +
1234 25.2 + 0.38 *sqrLogPlab - 2.9 *logPlab)/2;
1235 fElasticXsc = ( 7.3 + 0.29 *sqrLogPlab - 2.4 *logPlab +
1236 5.0 + 8.1*
G4Exp(-logPlab*1.8 ) + 0.16 *sqrLogPlab - 1.3 *logPlab)/2;
1243 fTotalXsc = 48.0 + 0.522*sqrLogPlab - 4.51*logPlab;
1244 fElasticXsc = 11.9 + 26.9*
G4Exp(-logPlab*1.21) + 0.169*sqrLogPlab - 1.85*logPlab;
1248 fTotalXsc = 47.3 + 0.513*sqrLogPlab - 4.27*logPlab;
1249 fElasticXsc = 11.9 + 26.9*
G4Exp(-logPlab*1.21) + 0.169*sqrLogPlab - 1.85*logPlab;
1253 fTotalXsc *= CLHEP::millibarn;
1254 fElasticXsc *= CLHEP::millibarn;
1255 fElasticXsc = std::min(fElasticXsc, fTotalXsc);
1256 fInelasticXsc = fTotalXsc - fElasticXsc;
1275 0.5*(CLHEP::proton_mass_c2 + CLHEP::neutron_mass_c2);
1277 CalcMandelstamS(ekin, theParticle->
GetPDGMass(), targ_mass)*invGeV2;
1284 xsection = 0.0677*x1 + 0.129*x2;
1286 else if(theParticle == theNeutron)
1288 xsection = 21.70*x1 + 56.08*x2;
1290 else if(theParticle == theProton)
1292 xsection = 21.70*x1 + 56.08*x2;
1295 else if(pdg == -2212)
1297 xsection = 21.70*x1 + 98.39*x2;
1299 else if(theParticle == thePiPlus)
1301 xsection = 13.63*x1 + 27.56*x2;
1304 else if(pdg == -211)
1306 xsection = 13.63*x1 + 36.02*x2;
1308 else if(theParticle == theKPlus)
1310 xsection = 11.82*x1 + 8.15*x2;
1312 else if(theParticle == theKMinus)
1314 xsection = 11.82*x1 + 26.36*x2;
1316 else if(theParticle == theK0S || theParticle == theK0L)
1318 xsection = 11.82*x1 + 17.25*x2;
1322 xsection = 21.70*x1 + 56.08*x2;
1324 fTotalXsc = xsection*CLHEP::millibarn;
1325 fInelasticXsc = 0.83*fTotalXsc;
1326 fElasticXsc = fTotalXsc - fInelasticXsc;
1340 if ( theParticle == theProton ) pR = 0.895*CLHEP::fermi;
1341 else if( theParticle == thePiPlus ) pR = 0.663*CLHEP::fermi;
1342 else if( theParticle == theKPlus ) pR = 0.340*CLHEP::fermi;
1345 G4double tZ = nucleon->GetPDGCharge();
1348 G4double tM = nucleon->GetPDGMass();
1352 G4double totEcm = std::sqrt(pM*pM + tM*tM + 2.*pElab*tM);
1356 G4double bC = fine_structure_const*hbarc*pZ*tZ/(2.*(pR + tR));
1361 G4double ratio = (totTcm > bC) ? 1. - bC/totTcm : 0.0;
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double G4Log(G4double x)
G4double CoulombBarrier(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
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
G4double HadronNucleonXscVU(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
G4double HadronNucleonXsc(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
G4double KaonNucleonXscVG(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
G4double HyperonNucleonXscNS(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
G4double HadronNucleonXscPDG(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
G4double HadronNucleonXscNS(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
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()