FastJet 3.0.0
|
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