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