365{
367
371
372
374
378
380
381 sMand /= GeV*GeV;
382 pLab /= GeV;
383 pE /= GeV;
384 pM /= GeV;
385
387
388
389
390
395
396
398
399 G4bool pORn = (nucleon == theProton || nucleon == theNeutron );
402
403 if( theParticle == theNeutron && pORn )
404 {
405 if( pLab >= 373.)
406 {
408
409 fElasticXsc = 6.5 + 0.308*std::pow(std::log(sMand/400.),1.65) + 9.19*std::pow(sMand,-0.458);
410
411 fTotalXsc = xsection;
412
413 }
414 else if( pLab >= 100.)
415 {
416 B0 = 7.5;
417 A0 = 100. - B0*std::log(3.0e7);
418
419 xsection = A0 + B0*std::log(pE) - 11
420
421 + 103*std::pow(sMand,-0.165);
422
423 fElasticXsc = 5.53 + 0.308*std::pow(std::log(sMand/28.9),1.1) + 9.19*std::pow(sMand,-0.458);
424
425 fTotalXsc = xsection;
426 }
427 else if( pLab >= 10.)
428 {
429 B0 = 7.5;
430 A0 = 100. - B0*std::log(3.0e7);
431
432 xsection = A0 + B0*std::log(pE) - 11
433 + 103*std::pow(2*0.93827*pE + pM*pM+
434 0.93827*0.93827,-0.165);
435 fTotalXsc = xsection;
436 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
437 }
438 else
439 {
441 {
442 if( pLab < 0.4 )
443 {
444 hnXsc = 23 + 50*( std::pow( std::log(0.73/pLab), 3.5 ) );
445 fElasticXsc = hnXsc;
446 }
447 else if( pLab < 0.73 )
448 {
449 hnXsc = 23 + 50*( std::pow( std::log(0.73/pLab), 3.5 ) );
450 fElasticXsc = hnXsc;
451 }
452 else if( pLab < 1.05 )
453 {
454 hnXsc = 23 + 40*(std::log(pLab/0.73))*
455 (std::log(pLab/0.73));
456 fElasticXsc = 23 + 20*(std::log(pLab/0.73))*
457 (std::log(pLab/0.73));
458 }
459 else
460 {
461 hnXsc = 39.0+75*(pLab - 1.2)/(std::pow(pLab,3.0) + 0.15);
462
463 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
464 }
465 fTotalXsc = hnXsc;
466 }
467 if( proton )
468 {
469 if( pLab < 0.02 )
470 {
471 hpXsc = 4100+30*std::pow(std::log(1.3/pLab),3.6);
472 fElasticXsc = hpXsc;
473 }
474 else if( pLab < 0.8 )
475 {
476 hpXsc = 33+30*std::pow(std::log(pLab/1.3),4.0);
477 fElasticXsc = hpXsc;
478 }
479 else if( pLab < 1.05 )
480 {
481 hpXsc = 33+30*std::pow(std::log(pLab/0.95),2.0);
482 fElasticXsc = 6 + 52/( std::log(0.511/pLab)*std::log(0.511/pLab) + 1.6 );
483 }
484 else if( pLab < 1.4 )
485 {
486 hpXsc = 33+30*std::pow(std::log(pLab/0.95),2.0);
487 fElasticXsc = 6 + 52/( std::log(0.511/pLab)*std::log(0.511/pLab) + 1.6 );
488 }
489 else
490 {
491 hpXsc = 33.3 + 20.8*(std::pow(pLab,2.0) - 1.35)/(std::pow(pLab,2.50) + 0.95);
492
493 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
494 }
495 fTotalXsc = hpXsc;
496 }
497 }
498 }
499 else if( theParticle == theProton && pORn )
500 {
501 if( pLab >= 373.)
502 {
504
505 fElasticXsc = 6.5 + 0.308*std::pow(std::log(sMand/400.),1.65) + 9.19*std::pow(sMand,-0.458);
506
507 fTotalXsc = xsection;
508 }
509 else if( pLab >= 100.)
510 {
511 B0 = 7.5;
512 A0 = 100. - B0*std::log(3.0e7);
513
514 xsection = A0 + B0*std::log(pE) - 11 + 103*std::pow(sMand,-0.165);
515
516 fElasticXsc = 5.53 + 0.308*std::pow(std::log(sMand/28.9),1.1) + 9.19*std::pow(sMand,-0.458);
517
518 fTotalXsc = xsection;
519 }
520 else if( pLab >= 10.)
521 {
522 B0 = 7.5;
523 A0 = 100. - B0*std::log(3.0e7);
524
525 xsection = A0 + B0*std::log(pE) - 11 + 103*std::pow(sMand,-0.165);
526
527 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
528
529 fTotalXsc = xsection;
530 }
531 else
532 {
533
534
535 if( proton )
536 {
537 if( pLab < 0.4 )
538 {
539 hpXsc = 23 + 50*( std::pow( std::log(0.73/pLab), 3.5 ) );
540 fElasticXsc = hpXsc;
541 }
542 else if( pLab < 0.73 )
543 {
544 hpXsc = 23 + 50*( std::pow( std::log(0.73/pLab), 3.5 ) );
545 fElasticXsc = hpXsc;
546 }
547 else if( pLab < 1.05 )
548 {
549 hpXsc = 23 + 40*(std::log(pLab/0.73))*
550 (std::log(pLab/0.73));
551 fElasticXsc = 23 + 20*(std::log(pLab/0.73))*
552 (std::log(pLab/0.73));
553 }
554 else
555 {
556 hpXsc = 39.0+75*(pLab - 1.2)/(std::pow(pLab,3.0) + 0.15);
557
558 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
559 }
560 fTotalXsc = hpXsc;
561 }
563 {
564 if( pLab < 0.02 )
565 {
566 hnXsc = 4100+30*std::pow(std::log(1.3/pLab),3.6);
567 fElasticXsc = hnXsc;
568 }
569 else if( pLab < 0.8 )
570 {
571 hnXsc = 33+30*std::pow(std::log(pLab/1.3),4.0);
572 fElasticXsc = hnXsc;
573 }
574 else if( pLab < 1.05 )
575 {
576 hnXsc = 33+30*std::pow(std::log(pLab/0.95),2.0);
577 fElasticXsc = 6 + 52/( std::log(0.511/pLab)*std::log(0.511/pLab) + 1.6 );
578 }
579 else if( pLab < 1.4 )
580 {
581 hnXsc = 33+30*std::pow(std::log(pLab/0.95),2.0);
582 fElasticXsc = 6 + 52/( std::log(0.511/pLab)*std::log(0.511/pLab) + 1.6 );
583 }
584 else
585 {
586 hnXsc = 33.3 + 20.8*(std::pow(pLab,2.0) - 1.35)/(std::pow(pLab,2.50) + 0.95);
587
588 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
589 }
590 fTotalXsc = hnXsc;
591 }
592 }
593 }
594 else if( theParticle == theAProton && pORn )
595 {
596 if( proton )
597 {
598 xsection = 35.45 + B*std::pow(std::log(sMand/s0),2.)
599 + 42.53*std::pow(sMand,-eta1) + 33.34*std::pow(sMand,-eta2);
600 }
602 {
603 xsection = 35.80 + B*std::pow(std::log(sMand/s0),2.)
604 + 40.15*std::pow(sMand,-eta1) + 30.*std::pow(sMand,-eta2);
605 }
606 fTotalXsc = xsection;
607 }
608 else if( theParticle == thePiPlus && pORn )
609 {
610 if( proton )
611 {
612 if( pLab < 0.28 )
613 {
614 hpXsc = 10./((logP + 1.273)*(logP + 1.273) + 0.05);
615 fElasticXsc = hpXsc;
616 }
617 else if( pLab < 0.4 )
618 {
619 hpXsc = 14./( (logP + 1.273)*(logP + 1.273) + 0.07);
620 fElasticXsc = hpXsc;
621 }
622 else if( pLab < 0.68 )
623 {
624 hpXsc = 14./( (logP + 1.273)*(logP + 1.273) + 0.07);
625 fElasticXsc = hpXsc;
626 }
627 else if( pLab < 0.85 )
628 {
629 G4double Ex4 = 88*(std::log(pLab/0.77))*(std::log(pLab/0.77));
630 hpXsc = Ex4 + 14.9;
631 fElasticXsc = hpXsc*std::exp(-3.*(pLab - 0.68));
632 }
633 else if( pLab < 1.15 )
634 {
635 G4double Ex4 = 88*(std::log(pLab/0.77))*(std::log(pLab/0.77));
636 hpXsc = Ex4 + 14.9;
637
638 fElasticXsc = 6.0 + 1.4/(( pLab - 1.4)*( pLab - 1.4) + 0.1);
639 }
640 else if( pLab < 1.4)
641 {
642 G4double Ex1 = 3.2*std::exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
643 G4double Ex2 = 12*std::exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
644 hpXsc = Ex1 + Ex2 + 27.5;
645 fElasticXsc = 6.0 + 1.4/(( pLab - 1.4)*( pLab - 1.4) + 0.1);
646 }
647 else if( pLab < 2.0 )
648 {
649 G4double Ex1 = 3.2*std::exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
650 G4double Ex2 = 12*std::exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
651 hpXsc = Ex1 + Ex2 + 27.5;
652 fElasticXsc = 3.0 + 1.36/( (logP - 0.336)*(logP - 0.336) + 0.08);
653 }
654 else if( pLab < 3.5 )
655 {
656 G4double Ex1 = 3.2*std::exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
657 G4double Ex2 = 12*std::exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
658 hpXsc = Ex1 + Ex2 + 27.5;
659 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
660 }
661 else if( pLab < 200. )
662 {
663 hpXsc = 10.6 + 2.*std::log(pE) + 25*std::pow(pE, -0.43 );
664
665 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
666 }
667 else
668 {
670 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
671 }
672 fTotalXsc = hpXsc;
673 }
675 {
676 if( pLab < 0.28 )
677 {
678 hnXsc = 0.288/((pLab - 0.28)*(pLab - 0.28) + 0.004);
679 fElasticXsc = 1.8/((logP + 1.273)*(logP + 1.273) + 0.07);
680 }
681 else if( pLab < 0.395676 )
682 {
683 hnXsc = 0.648/((pLab - 0.28)*(pLab - 0.28) + 0.009);
684 fElasticXsc = 0.257/((pLab - 0.28)*(pLab - 0.28) + 0.01);
685 }
686 else if( pLab < 0.5 )
687 {
688 hnXsc = 26 + 110*(std::log(pLab/0.48))*(std::log(pLab/0.48));
689 fElasticXsc = 0.37*hnXsc;
690 }
691 else if( pLab < 0.65 )
692 {
693 hnXsc = 26 + 110*(std::log(pLab/0.48))*(std::log(pLab/0.48));
694 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
695 }
696 else if( pLab < 0.72 )
697 {
698 hnXsc = 36.1 + 10*std::exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
699 24*std::exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
700 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
701 }
702 else if( pLab < 0.88 )
703 {
704 hnXsc = 36.1 + 10*std::exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
705 24*std::exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
706 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
707 }
708 else if( pLab < 1.03 )
709 {
710 hnXsc = 36.1 + 10*std::exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
711 24*std::exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
712 fElasticXsc = 2.0 + 0.4/((pLab - 1.03)*(pLab - 1.03) + 0.016);
713 }
714 else if( pLab < 1.15 )
715 {
716 hnXsc = 36.1 + 10*std::exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
717 24*std::exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
718 fElasticXsc = 2.0 + 0.4/((pLab - 1.03)*(pLab - 1.03) + 0.016);
719 }
720 else if( pLab < 1.3 )
721 {
722 hnXsc = 36.1 + 10*std::exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
723 24*std::exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
724 fElasticXsc = 3. + 13./pLab;
725 }
726 else if( pLab < 2.6 )
727 {
728 hnXsc = 36.1 + 0.079-4.313*std::log(pLab)+
729 3*std::exp(-(pLab-2.1)*(pLab-2.1)/0.4/0.4)+
730 1.5*std::exp(-(pLab-1.4)*(pLab-1.4)/0.12/0.12);
731 fElasticXsc = 3. + 13./pLab;
732 }
733 else if( pLab < 20. )
734 {
735 hnXsc = 36.1 + 0.079 - 4.313*std::log(pLab)+
736 3*std::exp(-(pLab-2.1)*(pLab-2.1)/0.4/0.4)+
737 1.5*std::exp(-(pLab-1.4)*(pLab-1.4)/0.12/0.12);
738 fElasticXsc = 3. + 13./pLab;
739 }
740 else
741 {
743 fElasticXsc = 3. + 13./pLab;
744 }
745 fTotalXsc = hnXsc;
746 }
747 }
748 else if( theParticle == thePiMinus && pORn )
749 {
751 {
752 if( pLab < 0.28 )
753 {
754 hnXsc = 10./((logP + 1.273)*(logP + 1.273) + 0.05);
755 fElasticXsc = hnXsc;
756 }
757 else if( pLab < 0.4 )
758 {
759 hnXsc = 14./( (logP + 1.273)*(logP + 1.273) + 0.07);
760 fElasticXsc = hnXsc;
761 }
762 else if( pLab < 0.68 )
763 {
764 hnXsc = 14./( (logP + 1.273)*(logP + 1.273) + 0.07);
765 fElasticXsc = hnXsc;
766 }
767 else if( pLab < 0.85 )
768 {
769 G4double Ex4 = 88*(std::log(pLab/0.77))*(std::log(pLab/0.77));
770 hnXsc = Ex4 + 14.9;
771 fElasticXsc = hnXsc*std::exp(-3.*(pLab - 0.68));
772 }
773 else if( pLab < 1.15 )
774 {
775 G4double Ex4 = 88*(std::log(pLab/0.77))*(std::log(pLab/0.77));
776 hnXsc = Ex4 + 14.9;
777
778 fElasticXsc = 6.0 + 1.4/(( pLab - 1.4)*( pLab - 1.4) + 0.1);
779 }
780 else if( pLab < 1.4)
781 {
782 G4double Ex1 = 3.2*std::exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
783 G4double Ex2 = 12*std::exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
784 hnXsc = Ex1 + Ex2 + 27.5;
785 fElasticXsc = 6.0 + 1.4/(( pLab - 1.4)*( pLab - 1.4) + 0.1);
786 }
787 else if( pLab < 2.0 )
788 {
789 G4double Ex1 = 3.2*std::exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
790 G4double Ex2 = 12*std::exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
791 hnXsc = Ex1 + Ex2 + 27.5;
792 fElasticXsc = 3.0 + 1.36/( (logP - 0.336)*(logP - 0.336) + 0.08);
793 }
794 else if( pLab < 3.5 )
795 {
796 G4double Ex1 = 3.2*std::exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
797 G4double Ex2 = 12*std::exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
798 hnXsc = Ex1 + Ex2 + 27.5;
799 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
800 }
801 else if( pLab < 200. )
802 {
803 hnXsc = 10.6 + 2.*std::log(pE) + 25*std::pow(pE, -0.43 );
804 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
805 }
806 else
807 {
809 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
810 }
811 fTotalXsc = hnXsc;
812 }
813 if( proton )
814 {
815 if( pLab < 0.28 )
816 {
817 hpXsc = 0.288/((pLab - 0.28)*(pLab - 0.28) + 0.004);
818 fElasticXsc = 1.8/((logP + 1.273)*(logP + 1.273) + 0.07);
819 }
820 else if( pLab < 0.395676 )
821 {
822 hpXsc = 0.648/((pLab - 0.28)*(pLab - 0.28) + 0.009);
823 fElasticXsc = 0.257/((pLab - 0.28)*(pLab - 0.28) + 0.01);
824 }
825 else if( pLab < 0.5 )
826 {
827 hpXsc = 26 + 110*(std::log(pLab/0.48))*(std::log(pLab/0.48));
828 fElasticXsc = 0.37*hpXsc;
829 }
830 else if( pLab < 0.65 )
831 {
832 hpXsc = 26 + 110*(std::log(pLab/0.48))*(std::log(pLab/0.48));
833 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
834 }
835 else if( pLab < 0.72 )
836 {
837 hpXsc = 36.1+
838 10*std::exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
839 24*std::exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
840 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
841 }
842 else if( pLab < 0.88 )
843 {
844 hpXsc = 36.1+
845 10*std::exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
846 24*std::exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
847 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
848 }
849 else if( pLab < 1.03 )
850 {
851 hpXsc = 36.1+
852 10*std::exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
853 24*std::exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
854 fElasticXsc = 2.0 + 0.4/((pLab - 1.03)*(pLab - 1.03) + 0.016);
855 }
856 else if( pLab < 1.15 )
857 {
858 hpXsc = 36.1+
859 10*std::exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
860 24*std::exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
861 fElasticXsc = 2.0 + 0.4/((pLab - 1.03)*(pLab - 1.03) + 0.016);
862 }
863 else if( pLab < 1.3 )
864 {
865 hpXsc = 36.1+
866 10*std::exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
867 24*std::exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
868 fElasticXsc = 3. + 13./pLab;
869 }
870 else if( pLab < 2.6 )
871 {
872 hpXsc = 36.1+0.079-4.313*std::log(pLab)+
873 3*std::exp(-(pLab-2.1)*(pLab-2.1)/0.4/0.4)+
874 1.5*std::exp(-(pLab-1.4)*(pLab-1.4)/0.12/0.12);
875 fElasticXsc = 3. +13./pLab;
876 }
877 else
878 {
880 fElasticXsc = 3. + 13./pLab;
881 }
882 fTotalXsc = hpXsc;
883 }
884 }
885 else if( theParticle == theKPlus && pORn )
886 {
887 if( proton )
888 {
889 xsection = 17.91 + B*std::pow(std::log(sMand/s0),2.)
890 + 7.14*std::pow(sMand,-eta1) - 13.45*std::pow(sMand,-eta2);
891 }
893 {
894 xsection = 17.87 + B*std::pow(std::log(sMand/s0),2.)
895 + 5.17*std::pow(sMand,-eta1) - 7.23*std::pow(sMand,-eta2);
896 }
897 fTotalXsc = xsection;
898 }
899 else if( theParticle == theKMinus && pORn )
900 {
901 if( proton )
902 {
903 xsection = 17.91 + B*std::pow(std::log(sMand/s0),2.)
904 + 7.14*std::pow(sMand,-eta1) + 13.45*std::pow(sMand,-eta2);
905 }
907 {
908 xsection = 17.87 + B*std::pow(std::log(sMand/s0),2.)
909 + 5.17*std::pow(sMand,-eta1) + 7.23*std::pow(sMand,-eta2);
910 }
911 fTotalXsc = xsection;
912 }
913 else if( theParticle == theSMinus && pORn )
914 {
915 xsection = 35.20 + B*std::pow(std::log(sMand/s0),2.)
916 - 199.*std::pow(sMand,-eta1) + 264.*std::pow(sMand,-eta2);
917 }
918 else if( theParticle == theGamma && pORn )
919 {
920 xsection = 0.0 + B*std::pow(std::log(sMand/s0),2.)
921 + 0.032*std::pow(sMand,-eta1) - 0.0*std::pow(sMand,-eta2);
922 fTotalXsc = xsection;
923 }
924 else
925 {
926 if( proton )
927 {
928 xsection = 35.45 + B*std::pow(std::log(sMand/s0),2.)
929 + 42.53*std::pow(sMand,-eta1) - 33.34*std::pow(sMand,-eta2);
930 }
932 {
933 xsection += 35.80 + B*std::pow(std::log(sMand/s0),2.)
934 + 40.15*std::pow(sMand,-eta1) - 30.*std::pow(sMand,-eta2);
935 }
936 fTotalXsc = xsection;
937 }
938 fTotalXsc *= millibarn;
939 fElasticXsc *= millibarn;
940
942 {
944 fTotalXsc *= cB;
945 fElasticXsc *= cB;
946 }
947 fInelasticXsc = fTotalXsc - fElasticXsc;
948 if( fInelasticXsc < 0. ) fInelasticXsc = 0.;
949
950
951
952 return fTotalXsc;
953}
G4double GetTotalEnergy() const
G4double GetHadronNucleonXscPDG(const G4DynamicParticle *, const G4ParticleDefinition *)
G4double GetCoulombBarrier(const G4DynamicParticle *aParticle, const G4ParticleDefinition *nucleon)