FastJet 3.0beta1
|
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