16 #pragma implementation 
   32   } 
else if ( ee < w.ee ) {
 
   58                         double epsilon)
 const {
 
   59   double limit = std::fabs(pp.
dot(w.pp));
 
   60   limit += .25*((ee+w.ee)*(ee+w.ee));
 
   61   limit *= epsilon*epsilon;
 
   62   double delta = (pp - w.pp).
mag2();
 
   63   delta +=  (ee-w.ee)*(ee-w.ee);
 
   64   return (delta <= limit );
 
   68   double wdw = std::fabs(pp.
dot(w.pp)) + .25*((ee+w.ee)*(ee+w.ee));
 
   69   double delta = (pp - w.pp).
mag2() + (ee-w.ee)*(ee-w.ee);
 
   70   if ( (wdw > 0) && (delta < wdw)  ) {
 
   71     return std::sqrt (delta/wdw);
 
   72   } 
else if ( (wdw == 0) && (delta == 0) ) {
 
   87   double tTotal = (ee + w.ee);
 
   89   double vTotal2 = vTotal.
mag2();
 
   91   if ( vTotal2 >= tTotal*tTotal ) {
 
  100     return (isNear(w, epsilon));
 
  105   double tRecip = 1./tTotal;
 
  116   double b2 = vTotal2*tRecip*tRecip;
 
  118   register double ggamma = std::sqrt(1./(1.-b2));
 
  119   register double boostDotV1 = bboost.
dot(
pp);
 
  120   register double gm1_b2 = (ggamma-1)/b2;
 
  123                      ggamma * (ee + boostDotV1) );
 
  125   register double boostDotV2 = bboost.dot(w.pp);
 
  127                      ggamma * (w.ee + boostDotV2) );
 
  129   return (w1.
isNear(w2, epsilon));
 
  135   double tTotal = (ee + w.ee);
 
  137   double vTotal2 = vTotal.
mag2();
 
  139   if ( vTotal2 >= tTotal*tTotal ) {
 
  151   if ( vTotal2 == 0 ) {  
 
  157   double tRecip = 1./tTotal;
 
  168   double b2 = vTotal2*tRecip*tRecip;
 
  173   register double ggamma = std::sqrt(1./(1.-b2));
 
  174   register double boostDotV1 = bboost.
dot(pp);
 
  175   register double gm1_b2 = (ggamma-1)/b2;
 
  178                      ggamma * (ee + boostDotV1) );
 
  180   register double boostDotV2 = bboost.dot(w.pp);
 
  182                      ggamma * (w.ee + boostDotV2) );
 
  200   return std::sqrt ( a*a + b*b );
 
  245   return (x1 < 1) ? x1 : 1;
 
  251   double twoT2 = 2*ee*ee;