44 fLowerLimit( 0.03 *
MeV ),
45 fTotalXsc(0.0), fElasticXsc(0.0), fInelasticXsc(0.0)
88 outFile <<
"G4HadronNucleonXsc calculates the total, inelastic and elastic\n"
89 <<
"hadron-nucleon cross sections using several different\n"
90 <<
"parameterizations within the Glauber-Gribov approach. It is\n"
91 <<
"valid for all incident gammas and long-lived hadrons at\n"
92 <<
"energies above 30 keV. This is a cross section component which\n"
93 <<
"is to be used to build a cross section data set.\n";
112 G4bool applicable =
false;
118 if ( ( kineticEnergy >= fLowerLimit &&
120 ( theParticle == theAProton ||
121 theParticle == theGamma ||
122 theParticle == theKPlus ||
123 theParticle == theKMinus ||
124 theParticle == theSMinus) ) ||
126 ( kineticEnergy >= 0.1*fLowerLimit &&
128 ( theParticle == theProton ||
129 theParticle == theNeutron ||
130 theParticle == thePiPlus ||
131 theParticle == thePiMinus ) ) ) applicable =
true;
158 proj_momentum /=
GeV;
162 G4bool pORn = (nucleon == theProton || nucleon == theNeutron );
165 if(theParticle == theGamma && pORn )
167 xsection = (0.0677*std::pow(sMand,0.0808) + 0.129*std::pow(sMand,-0.4525));
169 else if(theParticle == theNeutron && pORn )
171 xsection = (21.70*std::pow(sMand,0.0808) + 56.08*std::pow(sMand,-0.4525));
173 else if(theParticle == theProton && pORn )
175 xsection = (21.70*std::pow(sMand,0.0808) + 56.08*std::pow(sMand,-0.4525));
180 else if(theParticle == theAProton && pORn )
182 xsection = ( 21.70*std::pow(sMand,0.0808) + 98.39*std::pow(sMand,-0.4525));
184 else if(theParticle == thePiPlus && pORn )
186 xsection = (13.63*std::pow(sMand,0.0808) + 27.56*std::pow(sMand,-0.4525));
188 else if(theParticle == thePiMinus && pORn )
191 xsection = (13.63*std::pow(sMand,0.0808) + 36.02*std::pow(sMand,-0.4525));
193 else if(theParticle == theKPlus && pORn )
195 xsection = (11.82*std::pow(sMand,0.0808) + 8.15*std::pow(sMand,-0.4525));
197 else if(theParticle == theKMinus && pORn )
199 xsection = (11.82*std::pow(sMand,0.0808) + 26.36*std::pow(sMand,-0.4525));
203 xsection = (21.70*std::pow(sMand,0.0808) + 56.08*std::pow(sMand,-0.4525));
207 fTotalXsc = xsection;
208 fInelasticXsc = 0.83*xsection;
209 fElasticXsc = fTotalXsc - fInelasticXsc;
210 if (fElasticXsc < 0.)fElasticXsc = 0.;
227 G4int Zt=1, Nt=1, At=1;
247 G4bool pORn = (nucleon == theProton || nucleon == theNeutron );
251 if(theParticle == theNeutron)
255 xsection = Zt*( 35.80 + B*std::pow(
G4Log(sMand/s0),2.)
256 + 40.15*std::pow(sMand,-eta1) - 30.*std::pow(sMand,-eta2));
260 xsection = Nt*( 35.45 + B*std::pow(
G4Log(sMand/s0),2.)
261 + 42.53*std::pow(sMand,-eta1) - 33.34*std::pow(sMand,-eta2));
264 else if(theParticle == theProton)
268 xsection = Zt*( 35.45 + B*std::pow(
G4Log(sMand/s0),2.)
269 + 42.53*std::pow(sMand,-eta1) - 33.34*std::pow(sMand,-eta2));
273 xsection = Nt*( 35.80 + B*std::pow(
G4Log(sMand/s0),2.)
274 + 40.15*std::pow(sMand,-eta1) - 30.*std::pow(sMand,-eta2));
277 else if(theParticle == theAProton)
281 xsection = Zt*( 35.45 + B*std::pow(
G4Log(sMand/s0),2.)
282 + 42.53*std::pow(sMand,-eta1) + 33.34*std::pow(sMand,-eta2));
286 xsection = Nt*( 35.80 + B*std::pow(
G4Log(sMand/s0),2.)
287 + 40.15*std::pow(sMand,-eta1) + 30.*std::pow(sMand,-eta2));
290 else if(theParticle == thePiPlus && pORn )
292 xsection = At*( 20.86 + B*std::pow(
G4Log(sMand/s0),2.)
293 + 19.24*std::pow(sMand,-eta1) - 6.03*std::pow(sMand,-eta2));
295 else if(theParticle == thePiMinus && pORn )
297 xsection = At*( 20.86 + B*std::pow(
G4Log(sMand/s0),2.)
298 + 19.24*std::pow(sMand,-eta1) + 6.03*std::pow(sMand,-eta2));
300 else if(theParticle == theKPlus)
304 xsection = Zt*( 17.91 + B*std::pow(
G4Log(sMand/s0),2.)
305 + 7.14*std::pow(sMand,-eta1) - 13.45*std::pow(sMand,-eta2));
309 xsection = Nt*( 17.87 + B*std::pow(
G4Log(sMand/s0),2.)
310 + 5.17*std::pow(sMand,-eta1) - 7.23*std::pow(sMand,-eta2));
313 else if(theParticle == theKMinus)
317 xsection = Zt*( 17.91 + B*std::pow(
G4Log(sMand/s0),2.)
318 + 7.14*std::pow(sMand,-eta1) + 13.45*std::pow(sMand,-eta2));
322 xsection = Nt*( 17.87 + B*std::pow(
G4Log(sMand/s0),2.)
323 + 5.17*std::pow(sMand,-eta1) + 7.23*std::pow(sMand,-eta2) );
326 else if(theParticle == theSMinus && pORn )
328 xsection = At*( 35.20 + B*std::pow(
G4Log(sMand/s0),2.)
329 - 199.*std::pow(sMand,-eta1) + 264.*std::pow(sMand,-eta2) );
331 else if(theParticle == theGamma && pORn )
333 xsection = At*( 0.0 + B*std::pow(
G4Log(sMand/s0),2.)
334 + 0.032*std::pow(sMand,-eta1) - 0.0*std::pow(sMand,-eta2) );
341 xsection = Zt*( 35.45 + B*std::pow(
G4Log(sMand/s0),2.)
342 + 42.53*std::pow(sMand,-eta1) - 33.34*std::pow(sMand,-eta2) );
346 xsection = Nt*( 35.80 + B*std::pow(
G4Log(sMand/s0),2.)
347 + 40.15*std::pow(sMand,-eta1) - 30.*std::pow(sMand,-eta2));
352 fTotalXsc = xsection;
353 fInelasticXsc = 0.75*xsection;
354 fElasticXsc = fTotalXsc - fInelasticXsc;
355 if (fElasticXsc < 0.) fElasticXsc = 0.;
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.;
1079 G4double sqrLogPlab = LogPlab * LogPlab;
1092 if( (theParticle == theKMinus || theParticle == theK0S) &&
proton )
1097 G4double psp = pLab*std::sqrt(pLab);
1098 fElasticXsc = 5.2/psp;
1099 fTotalXsc = 14./psp;
1101 else if( pLab > pMax )
1105 fElasticXsc = cofLogE*ld2 + 2.23;
1106 fTotalXsc = 1.1*cofLogT*ld2 + 19.7;
1121 fElasticXsc = 5.2/psp + (cofLogE*ld2 + 2.23)/(1. - .7/sp + .075/p4)
1123 fTotalXsc = 14./psp + (1.1*cofLogT*ld2 + 19.5)/(1. - .21/sp + .52/p4)
1128 else if( (theParticle == theKMinus || theParticle == theK0S) &&
neutron )
1134 fElasticXsc = cofLogE*ld2 + 2.23;
1135 fTotalXsc = 1.1*cofLogT*ld2 + 19.7;
1144 5.0 + 8.1*std::pow(pLab,-1.8 ) + 0.16*sqrLogPlab - 1.3*LogPlab + .15/hd;
1148 25.2 + 0.38*sqrLogPlab - 2.9*LogPlab
1153 else if( (theParticle == theKPlus || theParticle == theK0L) && proton )
1160 fElasticXsc = .7/(lr*lr + .076) + 2./md;
1164 else if( pLab > pMax )
1168 fElasticXsc = cofLogE*ld2 + 2.23;
1169 fTotalXsc = cofLogT*ld2 + 19.2;
1182 fElasticXsc = LE + (cofLogE*ld2 + 2.23)/(1. - .7/sp + .1/p4) + 2./md;
1183 fTotalXsc = (cofLogT*ld2 + 19.5)/(1. + .46/sp + 1.6/p4) + 7.6/md;
1186 else if( (theParticle == theKPlus || theParticle == theK0L) &&
neutron )
1192 fElasticXsc = 2./md;
1195 else if( pLab > pMax )
1199 fElasticXsc = cofLogE*ld2 + 2.23;
1200 fTotalXsc = cofLogT*ld2 + 19.2;
1211 fElasticXsc = (cofLogE*ld2 + 2.23)/(1. - .7/sp + .1/p4) + 2./md;
1212 fTotalXsc = (cofLogT*ld2 + 19.5)/(1. + .46/sp + 1.6/p4) + 7.6/md;
1224 fInelasticXsc = fTotalXsc - fElasticXsc;
1225 if( fInelasticXsc < 0. ) fInelasticXsc = 0.;
1242 G4int absPDGcode = std::abs(PDGcode);
1252 G4double sqrLogPlab = LogPlab * LogPlab;
1254 G4bool pORn = (nucleon == theProton || nucleon == theNeutron );
1259 if( absPDGcode > 1000 && pORn )
1264 fTotalXsc = 48.0 + 0.522*sqrLogPlab - 4.51*LogPlab;
1265 fElasticXsc = 11.9 + 26.9*std::pow(Plab,-1.21) + 0.169*sqrLogPlab - 1.85*LogPlab;
1270 fTotalXsc = 47.3 + 0.513*sqrLogPlab - 4.27*LogPlab;
1271 fElasticXsc = 11.9 + 26.9*std::pow(Plab,-1.21) + 0.169*sqrLogPlab - 1.85*LogPlab;
1274 else if( PDGcode == 211 && pORn )
1278 fTotalXsc = 16.4 + 19.3 *std::pow(Plab,-0.42) + 0.19 *sqrLogPlab - 0.0 *LogPlab;
1279 fElasticXsc = 0.0 + 11.4*std::pow(Plab,-0.40) + 0.079*sqrLogPlab - 0.0 *LogPlab;
1283 fTotalXsc = 33.0 + 14.0 *std::pow(Plab,-1.36) + 0.456*sqrLogPlab - 4.03*LogPlab;
1284 fElasticXsc = 1.76 + 11.2*std::pow(Plab,-0.64) + 0.043*sqrLogPlab - 0.0 *LogPlab;
1287 else if( PDGcode == -211 && pORn )
1291 fTotalXsc = 33.0 + 14.0 *std::pow(Plab,-1.36) + 0.456*sqrLogPlab - 4.03*LogPlab;
1292 fElasticXsc = 1.76 + 11.2*std::pow(Plab,-0.64) + 0.043*sqrLogPlab - 0.0 *LogPlab;
1296 fTotalXsc = 16.4 + 19.3 *std::pow(Plab,-0.42) + 0.19 *sqrLogPlab - 0.0 *LogPlab;
1297 fElasticXsc = 0.0 + 11.4*std::pow(Plab,-0.40) + 0.079*sqrLogPlab - 0.0 *LogPlab;
1300 else if( PDGcode == 111 && pORn )
1304 fTotalXsc = (16.4 + 19.3 *std::pow(Plab,-0.42) + 0.19 *sqrLogPlab - 0.0 *LogPlab +
1305 33.0 + 14.0 *std::pow(Plab,-1.36) + 0.456*sqrLogPlab - 4.03*LogPlab)/2;
1307 fElasticXsc = ( 0.0 + 11.4*std::pow(Plab,-0.40) + 0.079*sqrLogPlab - 0.0 *LogPlab +
1308 1.76 + 11.2*std::pow(Plab,-0.64) + 0.043*sqrLogPlab - 0.0 *LogPlab)/2;
1313 fTotalXsc = (33.0 + 14.0 *std::pow(Plab,-1.36) + 0.456*sqrLogPlab - 4.03*LogPlab +
1314 16.4 + 19.3 *std::pow(Plab,-0.42) + 0.19 *sqrLogPlab - 0.0 *LogPlab)/2;
1315 fElasticXsc = ( 1.76 + 11.2*std::pow(Plab,-0.64) + 0.043*sqrLogPlab - 0.0 *LogPlab +
1316 0.0 + 11.4*std::pow(Plab,-0.40) + 0.079*sqrLogPlab - 0.0 *LogPlab)/2;
1319 else if( PDGcode == 321 && pORn )
1324 fTotalXsc = 18.1 + 0.26 *sqrLogPlab - 1.0 *LogPlab;
1325 fElasticXsc = 5.0 + 8.1*std::pow(Plab,-1.8 ) + 0.16 *sqrLogPlab - 1.3 *LogPlab;
1331 fTotalXsc = 18.7 + 0.21 *sqrLogPlab - 0.89*LogPlab;
1332 fElasticXsc = 7.3 + 0.29 *sqrLogPlab - 2.4 *LogPlab;
1335 else if( PDGcode ==-321 && pORn )
1341 fTotalXsc = 32.1 + 0.66*sqrLogPlab - 5.6*LogPlab;
1342 fElasticXsc = 7.3 + 0.29*sqrLogPlab - 2.4*LogPlab;
1347 fTotalXsc = 25.2 + 0.38*sqrLogPlab - 2.9*LogPlab;
1348 fElasticXsc = 5.0 + 8.1*std::pow(Plab,-1.8 ) + 0.16*sqrLogPlab - 1.3*LogPlab;
1351 else if( PDGcode == 311 && pORn )
1357 fTotalXsc = ( 18.1 + 0.26 *sqrLogPlab - 1.0 *LogPlab +
1358 32.1 + 0.66 *sqrLogPlab - 5.6 *LogPlab)/2;
1359 fElasticXsc = ( 5.0 + 8.1*std::pow(Plab,-1.8 ) + 0.16 *sqrLogPlab - 1.3 *LogPlab +
1360 7.3 + 0.29 *sqrLogPlab - 2.4 *LogPlab)/2;
1367 fTotalXsc = ( 18.7 + 0.21 *sqrLogPlab - 0.89*LogPlab +
1368 25.2 + 0.38 *sqrLogPlab - 2.9 *LogPlab)/2;
1370 fElasticXsc = ( 7.3 + 0.29 *sqrLogPlab - 2.4 *LogPlab +
1371 5.0 + 8.1*std::pow(Plab,-1.8 ) + 0.16 *sqrLogPlab - 1.3 *LogPlab)/2;
1379 fTotalXsc = 48.0 + 0.522*sqrLogPlab - 4.51*LogPlab;
1380 fElasticXsc = 11.9 + 26.9*std::pow(Plab,-1.21) + 0.169*sqrLogPlab - 1.85*LogPlab;
1385 fTotalXsc = 47.3 + 0.513*sqrLogPlab - 4.27*LogPlab;
1386 fElasticXsc = 11.9 + 26.9*std::pow(Plab,-1.21) + 0.169*sqrLogPlab - 1.85*LogPlab;
1391 fInelasticXsc = fTotalXsc - fElasticXsc;
1392 if (fInelasticXsc < 0.) fInelasticXsc = 0.;
1405 G4double Elab = std::sqrt ( mp * mp + Plab * Plab );
1406 G4double Ecm = std::sqrt ( mp * mp + mt * mt + 2 * Elab * mt );
1422 G4double Elab = std::sqrt ( mp * mp + Plab * Plab );
1423 G4double sMand = mp*mp + mt*mt + 2*Elab*mt ;
1443 else pR = 0.500*
fermi;
1455 G4double totEcm = std::sqrt(pM*pM + tM*tM + 2.*pElab*tM);
1466 if( totTcm <= bC ) ratio = 0.;
1467 else ratio = 1. - bC/totTcm;
1470 if( ratio < 0.) ratio = 0.;
virtual ~G4HadronNucleonXsc()
G4double GetCoulombBarrier(const G4DynamicParticle *aParticle, const G4ParticleDefinition *nucleon)
static G4AntiOmegaMinus * AntiOmegaMinus()
G4double GetKineticEnergy() const
G4double GetTotalEnergy() const
static constexpr double hbarc
static G4OmegaMinus * OmegaMinus()
static G4KaonZeroLong * KaonZeroLong()
G4int GetPDGEncoding() const
G4ParticleDefinition * GetDefinition() const
double B(double temperature)
static G4AntiSigmaPlus * AntiSigmaPlus()
static G4SigmaZero * SigmaZero()
static G4KaonMinus * KaonMinus()
G4double GetHadronNucleonXscNS(const G4DynamicParticle *, const G4ParticleDefinition *)
static G4AntiSigmaMinus * AntiSigmaMinus()
static G4XiZero * XiZero()
double A(double temperature)
G4double GetKaonNucleonXscGG(const G4DynamicParticle *, const G4ParticleDefinition *)
static G4KaonZeroShort * KaonZeroShort()
G4bool nucleon(G4int ityp)
static G4AntiProton * AntiProton()
G4double CalculateEcmValue(const G4double, const G4double, const G4double)
static G4XiMinus * XiMinus()
static G4AntiXiMinus * AntiXiMinus()
static G4Triton * Triton()
static G4Proton * Proton()
static G4PionPlus * PionPlus()
virtual G4bool IsIsoApplicable(const G4DynamicParticle *aDP, G4int Z, G4int A)
void CrossSectionDescription(std::ostream &) const
static G4Neutron * Neutron()
static G4PionZero * PionZero()
static G4Deuteron * Deuteron()
G4double GetHadronNucleonXscVU(const G4DynamicParticle *, const G4ParticleDefinition *)
static G4SigmaMinus * SigmaMinus()
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
virtual G4bool IsApplicable(const G4DynamicParticle *aDP, const G4Element *)
G4double GetPDGMass() const
static G4AntiLambda * AntiLambda()
static G4PionMinus * PionMinus()
static G4AntiSigmaZero * AntiSigmaZero()
static constexpr double GeV
static G4AntiXiZero * AntiXiZero()
G4double GetHadronNucleonXscPDG(const G4DynamicParticle *, const G4ParticleDefinition *)
static constexpr double MeV
static G4SigmaPlus * SigmaPlus()
static G4Lambda * Lambda()
static G4KaonPlus * KaonPlus()
static constexpr double fine_structure_const
static constexpr double fermi
G4double GetPDGCharge() const
G4double GetHadronNucleonXscEL(const G4DynamicParticle *, const G4ParticleDefinition *)
static G4AntiNeutron * AntiNeutron()
static constexpr double millibarn
G4ThreeVector GetMomentum() const
G4double CalcMandelstamS(const G4double, const G4double, const G4double)