00001 #ifndef INLINE_MATHS
00002 #define INLINE_MATHS
00003
00004 #include <cmath>
00005 #include <cerrno>
00006
00007
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
00046 if (fabs(E-pz) == 0.) {
00047
00048
00049 errno=721;
00050 y = 99999.;
00051 }
00052 else {
00053 y = 0.5*log((E+pz)/(E-pz));
00054 }
00055
00056 return y;
00057 }
00058
00059
00060
00061
00062 inline double eta(double p, double pz) {
00063 errno=0;
00064 double eta;
00065
00066 if (fabs(p-pz) == 0.) {
00067
00068
00069 errno=721;
00070 eta = 99999.;
00071 }
00072 else {
00073 eta = 0.5*log((p+pz)/(p-pz));
00074 }
00075
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
00086 double p = sqrt(px*px+py*py+pz*pz);
00087 if (fabs(p-pz) == 0.) {
00088
00089
00090 errno=721;
00091 eta = 99999.;
00092 }
00093 else {
00094 eta = 0.5*log((p+pz)/(p-pz));
00095 }
00096
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 }
00125 }
00126
00127
00128
00129 #endif