43 #ifndef G4DiffuseElastic_h 
   44 #define G4DiffuseElastic_h 1 
   76   void BuildAngleTable();
 
   87   void SetHEModelLowLimit(
G4double value);
 
   89   void SetQModelLowLimit(
G4double value);
 
   91   void SetLowestEnergyLimit(
G4double value);
 
   93   void SetRecoilKinEnergyLimit(
G4double value);
 
  210   std::vector<G4PhysicsTable*>  fAngleBank;
 
  212   std::vector<G4double> fElementNumberVector;
 
  213   std::vector<G4String> fElementNameVector;
 
  230   lowEnergyRecoilLimit = 
value;
 
  235   plabLowLimit = 
value;
 
  240   lowEnergyLimitHE = 
value;
 
  245   lowEnergyLimitQ = 
value;
 
  250   lowestEnergyLimit = 
value;
 
  261   G4double modvalue, value2, fact1, fact2, arg, shift, bessel;
 
  263   modvalue = fabs(value);
 
  267     value2 = value*
value;
 
  269     fact1  = 57568490574.0 + value2*(-13362590354.0 
 
  270                            + value2*( 651619640.7 
 
  271                            + value2*(-11214424.18 
 
  272                            + value2*( 77392.33017 
 
  273                            + value2*(-184.9052456   ) ) ) ) );
 
  275     fact2  = 57568490411.0 + value2*( 1029532985.0 
 
  276                            + value2*( 9494680.718
 
  277                            + value2*(59272.64853
 
  278                            + value2*(267.8532712 
 
  279                            + value2*1.0               ) ) ) );
 
  281     bessel = fact1/fact2;
 
  289     shift  = modvalue-0.785398164;
 
  291     fact1  = 1.0 + value2*(-0.1098628627e-2 
 
  292                  + value2*(0.2734510407e-4
 
  293                  + value2*(-0.2073370639e-5 
 
  294                  + value2*0.2093887211e-6    ) ) );
 
  296     fact2  = -0.1562499995e-1 + value2*(0.1430488765e-3
 
  297                               + value2*(-0.6911147651e-5 
 
  298                               + value2*(0.7621095161e-6
 
  299                               - value2*0.934945152e-7    ) ) );
 
  301     bessel = sqrt(0.636619772/modvalue)*(cos(shift)*fact1 - arg*sin(shift)*fact2 );
 
  313   G4double modvalue, value2, fact1, fact2, arg, shift, bessel;
 
  315   modvalue = fabs(value);
 
  317   if ( modvalue < 8.0 ) 
 
  319     value2 = value*
value;
 
  321     fact1  = value*(72362614232.0 + value2*(-7895059235.0 
 
  322                                   + value2*( 242396853.1
 
  323                                   + value2*(-2972611.439 
 
  324                                   + value2*( 15704.48260 
 
  325                                   + value2*(-30.16036606  ) ) ) ) ) );
 
  327     fact2  = 144725228442.0 + value2*(2300535178.0 
 
  328                             + value2*(18583304.74
 
  329                             + value2*(99447.43394 
 
  330                             + value2*(376.9991397 
 
  331                             + value2*1.0             ) ) ) );
 
  332     bessel = fact1/fact2;
 
  340     shift  = modvalue - 2.356194491;
 
  342     fact1  = 1.0 + value2*( 0.183105e-2 
 
  343                  + value2*(-0.3516396496e-4
 
  344                  + value2*(0.2457520174e-5 
 
  345                  + value2*(-0.240337019e-6          ) ) ) );
 
  347     fact2 = 0.04687499995 + value2*(-0.2002690873e-3
 
  348                           + value2*( 0.8449199096e-5
 
  349                           + value2*(-0.88228987e-6
 
  350                           + value2*0.105787412e-6       ) ) );
 
  352     bessel = sqrt( 0.636619772/modvalue)*(cos(shift)*fact1 - arg*sin(shift)*fact2);
 
  354     if (value < 0.0) bessel = -bessel;
 
  370   if( std::fabs(x) < 0.01 )
 
  372     df = 1./(1. + x/f2 + x*x/
f3 + x*x*x/
f4);
 
  390   if( std::fabs(x) < 0.01 )
 
  394    result = 2. - x2 + x2*x2/6.;
 
  398     result = BesselJone(x)/
x; 
 
  412   fBeta         = a/std::sqrt(1+a*a);
 
  423   fZommerfeld = CLHEP::fine_structure_const*Z1*Z2/beta;
 
  436   G4double zn  = 1.77*k*std::pow(Z,-1./3.)*CLHEP::Bohr_radius;
 
  453     if( A > 10. ) r0  = 1.16*( 1 - std::pow(A, -2./3.) )*CLHEP::fermi;   
 
  454     else          r0  = 1.1*CLHEP::fermi;
 
  456     fNuclearRadius = r0*std::pow(A, 1./3.);
 
  460     r0 = 1.7*CLHEP::fermi;   
 
  462     fNuclearRadius = r0*std::pow(A, 0.27); 
 
  464   return fNuclearRadius;
 
  476   G4double sinHalfTheta  = std::sin(0.5*theta);
 
  477   G4double sinHalfTheta2 = sinHalfTheta*sinHalfTheta;
 
  478   G4double beta          = CalculateParticleBeta( particle, momentum);
 
  480   G4double n             = CalculateZommerfeld( beta, z, Z );
 
  481   G4double am            = CalculateAm( momentum, n, Z);
 
  485   G4double xsc           = ch2/(sinHalfTheta2+am)/(sinHalfTheta2+am);
 
  498   G4double beta          = CalculateParticleBeta( particle, momentum);
 
  501   G4double n             = CalculateZommerfeld( beta, z, Z );
 
  503   G4double am            = CalculateAm( momentum, n, Z);
 
  507   G4cout<<
"k*Bohr_radius = "<<k*CLHEP::Bohr_radius<<
G4endl;
 
  510   G4double xsc           = ch2*CLHEP::pi/(am +am*am);
 
  528   G4double beta          = CalculateParticleBeta( particle, momentum);
 
  531   G4double n             = CalculateZommerfeld( beta, z, Z );
 
  533   G4double am            = CalculateAm( momentum, n, Z);
 
  541   G4double xsc           = ch2*CLHEP::twopi*(c1-c2);
 
  542            xsc          /= (1 - c1 + am)*(1 - c2 + am);