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