00001 // -*- C++ -*- 00002 #ifndef RIVET_TotalVisibleMomentum_HH 00003 #define RIVET_TotalVisibleMomentum_HH 00004 00005 #include "Rivet/Rivet.hh" 00006 #include "Rivet/RivetCLHEP.hh" 00007 #include "Rivet/Projection.hh" 00008 #include "Rivet/Projections/VetoedFinalState.hh" 00009 #include "Rivet/Particle.hh" 00010 #include "Rivet/Event.hh" 00011 00012 00013 namespace Rivet { 00014 00015 /// Project out the total visible energy vector, allowing missing 00016 /// \f$ E_T \f$ etc. to be calculated. 00017 class TotalVisibleMomentum: public Projection { 00018 00019 public: 00020 00021 /// Constructor. The provided FinalState projection must live throughout the run. 00022 inline TotalVisibleMomentum(FinalState& fsp) 00023 : _fsproj(&fsp) 00024 { 00025 addProjection(*_fsproj); 00026 } 00027 00028 public: 00029 /// Return the name of the projection 00030 inline string getName() const { 00031 return "TotalVisibleMomentum"; 00032 } 00033 00034 /// The projected four-momentum vector 00035 inline LorentzVector& getMomentum() { return _momentum; } 00036 00037 /// The projected four-momentum vector 00038 inline const LorentzVector& getMomentum() const { return _momentum; } 00039 00040 /// The projected Scalar Transverse Momentum 00041 inline const double getSET() const { return _set; } 00042 00043 00044 protected: 00045 00046 /// Apply the projection to the event. 00047 void project(const Event& e); 00048 00049 /// Compare projections. 00050 int compare(const Projection& p) const; 00051 00052 private: 00053 00054 /// The FinalState projection used by this projection 00055 FinalState* _fsproj; 00056 00057 /// The total visible momentum 00058 LorentzVector _momentum; 00059 00060 /// Scalar Transverse Energy 00061 double _set; 00062 00063 // private: 00064 00065 // /// Hide the assignment operator. 00066 // TotalVisibleMomentum& operator=(const TotalVisibleMomentum&); 00067 00068 }; 00069 00070 } 00071 00072 00073 #endif