408 G4bool pORn = (nucleon == theProton || nucleon == theNeutron );
412 if( theParticle == theNeutron && pORn )
418 fElasticXsc = 6.5 + 0.308*std::pow(
G4Log(sMand/400.),1.65) + 9.19*std::pow(sMand,-0.458);
420 fTotalXsc = xsection;
423 else if( pLab >= 100.)
426 A0 = 100. - B0*
G4Log(3.0e7);
428 xsection = A0 + B0*
G4Log(pE) - 11
430 + 103*std::pow(sMand,-0.165);
432 fElasticXsc = 5.53 + 0.308*std::pow(
G4Log(sMand/28.9),1.1) + 9.19*std::pow(sMand,-0.458);
434 fTotalXsc = xsection;
436 else if( pLab >= 10.)
439 A0 = 100. - B0*
G4Log(3.0e7);
441 xsection = A0 + B0*
G4Log(pE) - 11
442 + 103*std::pow(2*0.93827*pE + pM*pM+
443 0.93827*0.93827,-0.165);
444 fTotalXsc = xsection;
445 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
453 hnXsc = 23 + 50*( std::pow(
G4Log(0.73/pLab), 3.5 ) );
456 else if( pLab < 0.73 )
458 hnXsc = 23 + 50*( std::pow(
G4Log(0.73/pLab), 3.5 ) );
461 else if( pLab < 1.05 )
463 hnXsc = 23 + 40*(
G4Log(pLab/0.73))*
465 fElasticXsc = 23 + 20*(
G4Log(pLab/0.73))*
470 hnXsc = 39.0+75*(pLab - 1.2)/(std::pow(pLab,3.0) + 0.15);
472 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
480 hpXsc = 4100+30*std::pow(
G4Log(1.3/pLab),3.6);
483 else if( pLab < 0.8 )
485 hpXsc = 33+30*std::pow(
G4Log(pLab/1.3),4.0);
488 else if( pLab < 1.05 )
490 hpXsc = 33+30*std::pow(
G4Log(pLab/0.95),2.0);
491 fElasticXsc = 6 + 52/(
G4Log(0.511/pLab)*
G4Log(0.511/pLab) + 1.6 );
493 else if( pLab < 1.4 )
495 hpXsc = 33+30*std::pow(
G4Log(pLab/0.95),2.0);
496 fElasticXsc = 6 + 52/(
G4Log(0.511/pLab)*
G4Log(0.511/pLab) + 1.6 );
500 hpXsc = 33.3 + 20.8*(std::pow(pLab,2.0) - 1.35)/(std::pow(pLab,2.50) + 0.95);
502 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
508 else if( theParticle == theProton && pORn )
514 fElasticXsc = 6.5 + 0.308*std::pow(
G4Log(sMand/400.),1.65) + 9.19*std::pow(sMand,-0.458);
516 fTotalXsc = xsection;
518 else if( pLab >= 100.)
521 A0 = 100. - B0*
G4Log(3.0e7);
523 xsection = A0 + B0*
G4Log(pE) - 11 + 103*std::pow(sMand,-0.165);
525 fElasticXsc = 5.53 + 0.308*std::pow(
G4Log(sMand/28.9),1.1) + 9.19*std::pow(sMand,-0.458);
527 fTotalXsc = xsection;
529 else if( pLab >= 10.)
532 A0 = 100. - B0*
G4Log(3.0e7);
534 xsection = A0 + B0*
G4Log(pE) - 11 + 103*std::pow(sMand,-0.165);
536 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
538 fTotalXsc = xsection;
548 hpXsc = 23 + 50*( std::pow(
G4Log(0.73/pLab), 3.5 ) );
551 else if( pLab < 0.73 )
553 hpXsc = 23 + 50*( std::pow(
G4Log(0.73/pLab), 3.5 ) );
556 else if( pLab < 1.05 )
558 hpXsc = 23 + 40*(
G4Log(pLab/0.73))*
560 fElasticXsc = 23 + 20*(
G4Log(pLab/0.73))*
565 hpXsc = 39.0+75*(pLab - 1.2)/(std::pow(pLab,3.0) + 0.15);
567 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
575 hnXsc = 4100+30*std::pow(
G4Log(1.3/pLab),3.6);
578 else if( pLab < 0.8 )
580 hnXsc = 33+30*std::pow(
G4Log(pLab/1.3),4.0);
583 else if( pLab < 1.05 )
585 hnXsc = 33+30*std::pow(
G4Log(pLab/0.95),2.0);
586 fElasticXsc = 6 + 52/(
G4Log(0.511/pLab)*
G4Log(0.511/pLab) + 1.6 );
588 else if( pLab < 1.4 )
590 hnXsc = 33+30*std::pow(
G4Log(pLab/0.95),2.0);
591 fElasticXsc = 6 + 52/(
G4Log(0.511/pLab)*
G4Log(0.511/pLab) + 1.6 );
595 hnXsc = 33.3 + 20.8*(std::pow(pLab,2.0) - 1.35)/(std::pow(pLab,2.50) + 0.95);
597 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
603 else if( theParticle == theAProton && pORn )
607 xsection = 35.45 + B*std::pow(
G4Log(sMand/s0),2.)
608 + 42.53*std::pow(sMand,-eta1) + 33.34*std::pow(sMand,-eta2);
612 xsection = 35.80 + B*std::pow(
G4Log(sMand/s0),2.)
613 + 40.15*std::pow(sMand,-eta1) + 30.*std::pow(sMand,-eta2);
615 fTotalXsc = xsection;
617 else if( theParticle == thePiPlus && pORn )
623 hpXsc = 10./((logP + 1.273)*(logP + 1.273) + 0.05);
626 else if( pLab < 0.4 )
628 hpXsc = 14./( (logP + 1.273)*(logP + 1.273) + 0.07);
631 else if( pLab < 0.68 )
633 hpXsc = 14./( (logP + 1.273)*(logP + 1.273) + 0.07);
636 else if( pLab < 0.85 )
640 fElasticXsc = hpXsc*
G4Exp(-3.*(pLab - 0.68));
642 else if( pLab < 1.15 )
647 fElasticXsc = 6.0 + 1.4/(( pLab - 1.4)*( pLab - 1.4) + 0.1);
651 G4double Ex1 = 3.2*
G4Exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
652 G4double Ex2 = 12*
G4Exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
653 hpXsc = Ex1 + Ex2 + 27.5;
654 fElasticXsc = 6.0 + 1.4/(( pLab - 1.4)*( pLab - 1.4) + 0.1);
656 else if( pLab < 2.0 )
658 G4double Ex1 = 3.2*
G4Exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
659 G4double Ex2 = 12*
G4Exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
660 hpXsc = Ex1 + Ex2 + 27.5;
661 fElasticXsc = 3.0 + 1.36/( (logP - 0.336)*(logP - 0.336) + 0.08);
663 else if( pLab < 3.5 )
665 G4double Ex1 = 3.2*
G4Exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
666 G4double Ex2 = 12*
G4Exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
667 hpXsc = Ex1 + Ex2 + 27.5;
668 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
670 else if( pLab < 200. )
672 hpXsc = 10.6 + 2.*
G4Log(pE) + 25*std::pow(pE, -0.43 );
674 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
679 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
687 hnXsc = 0.288/((pLab - 0.28)*(pLab - 0.28) + 0.004);
688 fElasticXsc = 1.8/((logP + 1.273)*(logP + 1.273) + 0.07);
690 else if( pLab < 0.395676 )
692 hnXsc = 0.648/((pLab - 0.28)*(pLab - 0.28) + 0.009);
693 fElasticXsc = 0.257/((pLab - 0.28)*(pLab - 0.28) + 0.01);
695 else if( pLab < 0.5 )
697 hnXsc = 26 + 110*(
G4Log(pLab/0.48))*(
G4Log(pLab/0.48));
698 fElasticXsc = 0.37*hnXsc;
700 else if( pLab < 0.65 )
702 hnXsc = 26 + 110*(
G4Log(pLab/0.48))*(
G4Log(pLab/0.48));
703 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
705 else if( pLab < 0.72 )
707 hnXsc = 36.1 + 10*
G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
708 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
709 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
711 else if( pLab < 0.88 )
713 hnXsc = 36.1 + 10*
G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
714 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
715 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
717 else if( pLab < 1.03 )
719 hnXsc = 36.1 + 10*
G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
720 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
721 fElasticXsc = 2.0 + 0.4/((pLab - 1.03)*(pLab - 1.03) + 0.016);
723 else if( pLab < 1.15 )
725 hnXsc = 36.1 + 10*
G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
726 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
727 fElasticXsc = 2.0 + 0.4/((pLab - 1.03)*(pLab - 1.03) + 0.016);
729 else if( pLab < 1.3 )
731 hnXsc = 36.1 + 10*
G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
732 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
733 fElasticXsc = 3. + 13./pLab;
735 else if( pLab < 2.6 )
737 hnXsc = 36.1 + 0.079-4.313*
G4Log(pLab)+
738 3*
G4Exp(-(pLab-2.1)*(pLab-2.1)/0.4/0.4)+
739 1.5*
G4Exp(-(pLab-1.4)*(pLab-1.4)/0.12/0.12);
740 fElasticXsc = 3. + 13./pLab;
742 else if( pLab < 20. )
744 hnXsc = 36.1 + 0.079 - 4.313*
G4Log(pLab)+
745 3*
G4Exp(-(pLab-2.1)*(pLab-2.1)/0.4/0.4)+
746 1.5*
G4Exp(-(pLab-1.4)*(pLab-1.4)/0.12/0.12);
747 fElasticXsc = 3. + 13./pLab;
752 fElasticXsc = 3. + 13./pLab;
757 else if( theParticle == thePiMinus && pORn )
763 hnXsc = 10./((logP + 1.273)*(logP + 1.273) + 0.05);
766 else if( pLab < 0.4 )
768 hnXsc = 14./( (logP + 1.273)*(logP + 1.273) + 0.07);
771 else if( pLab < 0.68 )
773 hnXsc = 14./( (logP + 1.273)*(logP + 1.273) + 0.07);
776 else if( pLab < 0.85 )
780 fElasticXsc = hnXsc*
G4Exp(-3.*(pLab - 0.68));
782 else if( pLab < 1.15 )
787 fElasticXsc = 6.0 + 1.4/(( pLab - 1.4)*( pLab - 1.4) + 0.1);
791 G4double Ex1 = 3.2*
G4Exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
792 G4double Ex2 = 12*
G4Exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
793 hnXsc = Ex1 + Ex2 + 27.5;
794 fElasticXsc = 6.0 + 1.4/(( pLab - 1.4)*( pLab - 1.4) + 0.1);
796 else if( pLab < 2.0 )
798 G4double Ex1 = 3.2*
G4Exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
799 G4double Ex2 = 12*
G4Exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
800 hnXsc = Ex1 + Ex2 + 27.5;
801 fElasticXsc = 3.0 + 1.36/( (logP - 0.336)*(logP - 0.336) + 0.08);
803 else if( pLab < 3.5 )
805 G4double Ex1 = 3.2*
G4Exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
806 G4double Ex2 = 12*
G4Exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
807 hnXsc = Ex1 + Ex2 + 27.5;
808 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
810 else if( pLab < 200. )
812 hnXsc = 10.6 + 2.*
G4Log(pE) + 25*std::pow(pE, -0.43 );
813 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
818 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
826 hpXsc = 0.288/((pLab - 0.28)*(pLab - 0.28) + 0.004);
827 fElasticXsc = 1.8/((logP + 1.273)*(logP + 1.273) + 0.07);
829 else if( pLab < 0.395676 )
831 hpXsc = 0.648/((pLab - 0.28)*(pLab - 0.28) + 0.009);
832 fElasticXsc = 0.257/((pLab - 0.28)*(pLab - 0.28) + 0.01);
834 else if( pLab < 0.5 )
836 hpXsc = 26 + 110*(
G4Log(pLab/0.48))*(
G4Log(pLab/0.48));
837 fElasticXsc = 0.37*hpXsc;
839 else if( pLab < 0.65 )
841 hpXsc = 26 + 110*(
G4Log(pLab/0.48))*(
G4Log(pLab/0.48));
842 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
844 else if( pLab < 0.72 )
847 10*
G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
848 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
849 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
851 else if( pLab < 0.88 )
854 10*
G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
855 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
856 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
858 else if( pLab < 1.03 )
861 10*
G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
862 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
863 fElasticXsc = 2.0 + 0.4/((pLab - 1.03)*(pLab - 1.03) + 0.016);
865 else if( pLab < 1.15 )
868 10*
G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
869 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
870 fElasticXsc = 2.0 + 0.4/((pLab - 1.03)*(pLab - 1.03) + 0.016);
872 else if( pLab < 1.3 )
875 10*
G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
876 24*
G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
877 fElasticXsc = 3. + 13./pLab;
879 else if( pLab < 2.6 )
881 hpXsc = 36.1+0.079-4.313*
G4Log(pLab)+
882 3*
G4Exp(-(pLab-2.1)*(pLab-2.1)/0.4/0.4)+
883 1.5*
G4Exp(-(pLab-1.4)*(pLab-1.4)/0.12/0.12);
884 fElasticXsc = 3. +13./pLab;
889 fElasticXsc = 3. + 13./pLab;
894 else if( (theParticle == theKMinus || theParticle == theK0S) && proton )
898 G4double psp = pLab*std::sqrt(pLab);
899 fElasticXsc = 5.2/psp;
902 else if( pLab > pMax )
906 fElasticXsc = cofLogE*ld2 + 2.23;
907 fTotalXsc = 1.1*cofLogT*ld2 + 19.7;
929 fElasticXsc = 5.2/psp + (1.1*cofLogE*ld2 + 2.23)/(1. - .7/
sp + .075/p4)
930 + .004/md + 0.005/hd1+ 0.01/hd2 +.15/hd;
932 fTotalXsc = 14./psp + (1.1*cofLogT*ld2 + 19.5)/(1. - .21/
sp + .52/p4)
933 + .006/md + 0.01/hd1+ 0.02/hd2 + .20/hd ;
936 else if( (theParticle == theKMinus || theParticle == theK0S) &&
neutron )
942 fElasticXsc = cofLogE*ld2 + 2.23;
943 fTotalXsc = 1.1*cofLogT*ld2 + 19.7;
952 G4double sqrLogPlab = LogPlab * LogPlab;
955 5.0 + 8.1*std::pow(pLab,-1.8 ) + 0.16*sqrLogPlab - 1.3*LogPlab + .15/hd;
959 25.2 + 0.38*sqrLogPlab - 2.9*LogPlab
964 else if( (theParticle == theKPlus || theParticle == theK0L) && proton )
971 fElasticXsc = .7/(lr*lr + .076) + 2./md;
972 fTotalXsc = .7/(lr*lr + .076) + 2.6/md;
974 else if( pLab > pMax )
978 fElasticXsc = cofLogE*ld2 + 2.23;
979 fTotalXsc = cofLogT*ld2 + 19.2;
992 fElasticXsc = LE + (cofLogE*ld2 + 2.23)/(1. - .7/
sp + .1/p4) + 2./md;
993 fTotalXsc =
LE + (cofLogT*ld2 + 19.5)/(1. + .46/
sp + 1.6/p4) + 2.6/md;
996 else if( (theParticle == theKPlus || theParticle == theK0L) &&
neutron )
1002 fElasticXsc = 2./md;
1005 else if( pLab > pMax )
1009 fElasticXsc = cofLogE*ld2 + 2.23;
1010 fTotalXsc = cofLogT*ld2 + 19.2;
1021 fElasticXsc = (cofLogE*ld2 + 2.23)/(1. - .7/sp + .1/p4) + 2./md;
1022 fTotalXsc = (cofLogT*ld2 + 19.5)/(1. + .46/sp + 1.6/p4) + 4.6/md;
1025 else if( theParticle == theSMinus && pORn )
1027 xsection = 35.20 + B*std::pow(
G4Log(sMand/s0),2.)
1028 - 199.*std::pow(sMand,-eta1) + 264.*std::pow(sMand,-eta2);
1030 else if( theParticle == theGamma && pORn )
1032 xsection = 0.0 + B*std::pow(
G4Log(sMand/s0),2.)
1033 + 0.032*std::pow(sMand,-eta1);
1034 fTotalXsc = xsection;
1040 xsection = 35.45 + B*std::pow(
G4Log(sMand/s0),2.)
1041 + 42.53*std::pow(sMand,-eta1) - 33.34*std::pow(sMand,-eta2);
1045 xsection += 35.80 + B*std::pow(
G4Log(sMand/s0),2.)
1046 + 40.15*std::pow(sMand,-eta1) - 30.*std::pow(sMand,-eta2);
1048 fTotalXsc = xsection;
1059 fInelasticXsc = fTotalXsc - fElasticXsc;
1060 if( fInelasticXsc < 0. ) fInelasticXsc = 0.;
G4double GetCoulombBarrier(const G4DynamicParticle *aParticle, const G4ParticleDefinition *nucleon)
G4double GetTotalEnergy() const
G4ParticleDefinition * GetDefinition() const
double B(double temperature)
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
static constexpr double GeV
G4double GetHadronNucleonXscPDG(const G4DynamicParticle *, const G4ParticleDefinition *)
G4double GetPDGCharge() const
static constexpr double millibarn
G4ThreeVector GetMomentum() const
G4double CalcMandelstamS(const G4double, const G4double, const G4double)