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 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 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)