21#ifndef _LORENTZ_VECTOR_HH_ 
   22#define _LORENTZ_VECTOR_HH_ 
   25#include "fastjet/internal/base.hh" 
   28#define M_PI  3.141592653589793238462643383279502884197  
   31FASTJET_BEGIN_NAMESPACE
 
   41  LorentzVector(): px(0), py(0), pz(0), E(0) {}
 
   42  LorentzVector(
double p1, 
double p2, 
double p3, 
double p0): px(p1), py(p2), pz(p3), E(p0) {}
 
   43  LorentzVector(
const LorentzVector& lv): px(lv.px), py(lv.py), pz(lv.pz), E(lv.E) {}
 
   44  double p()
   const {
return sqrt(px*px + py*py + pz*pz);}
 
   45  double pt()
  const {
return sqrt(px*px + py*py);}
 
   46  double mt()
  const {
return sqrt((E-pz)*(E+pz));}
 
   47  double y()
   const {
return 0.5*log((E + pz)/(E - pz));}
 
   48  double Et()
  const {
return E/p()*pt();}
 
   49  inline double et()
  const {
return Et();}
 
   50  inline double e()
  const {
return E;}
 
   51  double eta()
 const {
return 0.5*log((p() + pz)/(p() - pz));}
 
   54    double r = atan2(py,px);
 
   59  void add(LorentzVector v)
 
   66  void subtract(LorentzVector v)
 
   73  bool isEqual(LorentzVector v)
 
   75    return px == v.px && py == v.py && pz == v.pz && E == v.E;