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