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;
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);
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);
1123 G4int absPDGcode = std::abs(PDGcode);
1125 G4double Plab = std::sqrt(ekin*(ekin + 2.*mass))*invGeV;
1128 G4double sqrLogPlab = logPlab * logPlab;
1130 G4bool proton = (nucleon == theProton);
1131 G4bool neutron = (nucleon == theNeutron);
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;
1248 fTotalXsc *= CLHEP::millibarn;
1249 fElasticXsc *= CLHEP::millibarn;
1250 fElasticXsc = std::min(fElasticXsc, fTotalXsc);
1251 fInelasticXsc = fTotalXsc - fElasticXsc;