00001 // -*- C++ -*- 00002 #ifndef RIVET_FinalStateHCM_HH 00003 #define RIVET_FinalStateHCM_HH 00004 00005 #include "Rivet/Particle.hh" 00006 #include "Rivet/Event.hh" 00007 #include "Rivet/Projections/FinalState.hh" 00008 #include "Rivet/Projections/DISKinematics.hh" 00009 00010 00011 namespace Rivet { 00012 00013 /// Project all final state particles (except the scattered lepton) 00014 /// boosted to the hadronic center of mass system. 00015 class FinalStateHCM: public FinalState { 00016 00017 public: 00018 00019 /// The default constructor. Must specify DISLepton, DISKinematics 00020 /// and FinalState projection objects which are assumed to live 00021 /// throughout the run. 00022 inline FinalStateHCM(DISLepton& leptonp, DISKinematics& kinematicsp, FinalState& fsp) 00023 : _lepton(&leptonp), _kinematics(&kinematicsp), _fsproj(&fsp) 00024 { 00025 addProjection(leptonp); 00026 addProjection(kinematicsp); 00027 addProjection(fsp); 00028 } 00029 00030 00031 public: 00032 /// Return the name of the projection 00033 inline string getName() const { 00034 return "FinalStateHCM"; 00035 } 00036 00037 protected: 00038 00039 /// Apply the projection on the supplied event. 00040 void project(const Event& e); 00041 00042 /// Compare projections. 00043 int compare(const Projection& p) const; 00044 00045 private: 00046 00047 /// The projector for the DIS lepton. 00048 DISLepton* _lepton; 00049 00050 /// The projector for the DIS kinematics. 00051 DISKinematics* _kinematics; 00052 00053 /// The projector for the full final state. 00054 FinalState* _fsproj; 00055 00056 }; 00057 00058 } 00059 00060 00061 #endif