FastJet 3.0.1
inline_maths.h
00001 #ifndef INLINE_MATHS
00002 #define INLINE_MATHS
00003 
00004 // History of changes in FastJet compared tothe original version of
00005 // inline_math.h
00006 //
00007 // 2011-10-06  Gregory Soyez  <soyez@fastjet.fr>
00008 //
00009 //        * put the code in the fastjet::d0 namespace
00010 
00011 #include <cmath>
00012 #include <cerrno>
00013 #include <fastjet/internal/base.hh>
00014 
00015 FASTJET_BEGIN_NAMESPACE
00016 
00017 //using namespace std;
00018 
00019 namespace d0runi{
00020 namespace inline_maths {
00021 
00022 const double PI = fabs(acos(-1.));
00023 
00024 const double TWOPI = 2*PI;
00025 
00026 
00027 inline double sqr(double a) {
00028   return a*a;
00029 }
00030 
00031 
00032 
00033 inline double min(double a, double b) {
00034   return (a < b) ? a : b;
00035 }
00036 
00037 
00038 
00039 inline double delta_phi(double phi1, double phi2) {
00040   double dphi = min( double(fabs(phi1-phi2)), double(2.*PI-fabs(phi1-phi2)) );
00041   return (phi1 < phi2) ? -dphi : dphi;
00042 }
00043 
00044 
00045 
00046 inline double phi(double px, double py) {
00047   return atan2(py, px);
00048 }
00049 
00050 
00051 
00052 inline double y(double E, double pz) {
00053   errno=0;
00054   double y;
00055   //cout << "inline_maths: ";
00056   if (fabs(E-pz) == 0.) {
00057     //    cout << "Error in header mathe.h: division by 0 in function y!" <<  " p=" << p << " pz=" << pz << endl;
00058     //  exit(721);
00059     errno=721;
00060     y = 99999.;
00061   }
00062   else {
00063     y = 0.5*log((E+pz)/(E-pz));
00064   }
00065   //cout << "y: E=" << E << " pz=" << pz << " y=" << y << endl;
00066   return y;
00067 }
00068 
00069 
00070 
00071 
00072 inline double eta(double p, double pz) {
00073   errno=0;
00074   double eta;
00075   //cout << "inline_maths: ";
00076   if (fabs(p-pz) == 0.) {
00077     //    cout << "Error in header mathe.h: division by 0 in function eta!" <<  " p=" << p << " pz=" << pz << endl;
00078     //  exit(721);
00079     errno=721;
00080     eta = 99999.;
00081   }
00082   else {
00083     eta = 0.5*log((p+pz)/(p-pz));
00084   }
00085   //cout << "eta: p=" << p << " pz=" << pz << " eta=" << eta << endl;
00086   return eta;
00087 }
00088 
00089 
00090 
00091 
00092  inline double eta(double px, double py, double pz) {
00093    errno=0;
00094    double eta;
00095   //cout << "inline_maths: ";
00096    double p = sqrt(px*px+py*py+pz*pz);
00097    if (fabs(p-pz) == 0.) {
00098     //    cout << "Error in header mathe.h: division by 0 in function eta!" <<  " p=" << p << " pz=" << pz << endl;
00099     //  exit(721);
00100     errno=721;
00101     eta = 99999.;
00102   }
00103   else {
00104     eta = 0.5*log((p+pz)/(p-pz));
00105   }
00106   //cout << "eta: p=" << p << " pz=" << pz << " eta=" << eta << endl;
00107   return eta;
00108 }
00109 
00110 
00111 
00112  inline double eta(double theta) {
00113    double eta = -log(tan(theta/2.));
00114    
00115    return eta;
00116  }
00117  
00118 
00119  inline double theta(double eta) {
00120    double theta = 2.*atan(exp(-eta));
00121    
00122    return theta;
00123  }
00124  
00125  inline double theta(double px, double py, double pz) {
00126    double Eta = eta(px, py, pz);
00127    double theta = 2.*atan(exp(-Eta));
00128    
00129    return theta;
00130  }
00131  
00132 
00133 
00134 } //end usename inline_maths
00135 } //end usename d0runi
00136 
00137 FASTJET_END_NAMESPACE
00138 
00139 
00140 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends