LorentzVector.hh
Go to the documentation of this file.00001
00002
00003
00004
00005 #ifndef _LORENTZ_VECTOR_HH_
00006 #define _LORENTZ_VECTOR_HH_
00007
00008 #include <cmath>
00009 #include <fastjet/internal/base.hh>
00010
00011 #ifndef M_PI
00012 #define M_PI 3.141592653589793238462643383279502884197
00013 #endif
00014
00015 FASTJET_BEGIN_NAMESPACE
00016
00017 namespace atlas{
00018
00019 class LorentzVector
00020 {
00021 public:
00022
00023 double px,py,pz,E;
00024
00025 LorentzVector(): px(0), py(0), pz(0), E(0) {}
00026 LorentzVector(double p1, double p2, double p3, double p0): px(p1), py(p2), pz(p3), E(p0) {}
00027 LorentzVector(const LorentzVector& p): px(p.px), py(p.py), pz(p.pz), E(p.E) {}
00028 double p() const {return sqrt(px*px + py*py + pz*pz);}
00029 double pt() const {return sqrt(px*px + py*py);}
00030 double mt() const {return sqrt((E-pz)*(E+pz));}
00031 double y() const {return 0.5*log((E + pz)/(E - pz));}
00032 double Et() const {return E/p()*pt();}
00033 inline double et() const {return Et();}
00034 inline double e() const {return E;}
00035 double eta() const {return 0.5*log((p() + pz)/(p() - pz));}
00036 double phi() const
00037 {
00038 double r = atan2(py,px);
00039 if(r < 0)
00040 r += 2*M_PI;
00041 return r;
00042 }
00043 void add(LorentzVector v)
00044 {
00045 px += v.px;
00046 py += v.py;
00047 pz += v.pz;
00048 E += v.E;
00049 }
00050 void subtract(LorentzVector v)
00051 {
00052 px -= v.px;
00053 py -= v.py;
00054 pz -= v.pz;
00055 E -= v.E;
00056 }
00057 bool isEqual(LorentzVector v)
00058 {
00059 return px == v.px && py == v.py && pz == v.pz && E == v.E;
00060 }
00061 };
00062
00063 }
00064
00065 FASTJET_END_NAMESPACE
00066
00067 #endif