00001 // -*- C++ -*- 00002 #ifndef RIVET_ChargedFinalState_HH 00003 #define RIVET_ChargedFinalState_HH 00004 00005 #include "Rivet/Tools/Logging.hh" 00006 #include "Rivet/Rivet.hh" 00007 #include "Rivet/Particle.hh" 00008 #include "Rivet/Event.hh" 00009 #include "Rivet/Projection.hh" 00010 #include "Rivet/Projections/FinalState.hh" 00011 00012 namespace Rivet { 00013 00014 00015 /// @brief Project only charged final state particles. 00016 class ChargedFinalState : public FinalState { 00017 public: 00018 00019 /// @name Constructors 00020 //@{ 00021 ChargedFinalState(const FinalState& fsp); 00022 00023 /// Single eta-range constructor. 00024 ChargedFinalState(double mineta = -MAXRAPIDITY, 00025 double maxeta = MAXRAPIDITY, 00026 double minpt = 0.0*GeV); 00027 00028 /// A constructor which allows to specify multiple eta ranges 00029 /// and the min \f$ p_T \f$. 00030 ChargedFinalState(const vector<pair<double, double> >& etaRanges, 00031 double minpt = 0.0*GeV); 00032 00033 /// Clone on the heap. 00034 virtual const Projection* clone() const { 00035 return new ChargedFinalState(*this); 00036 } 00037 //@} 00038 00039 00040 protected: 00041 00042 /// Apply the projection on the supplied event. 00043 void project(const Event& e); 00044 00045 /// Compare projections. 00046 int compare(const Projection& p) const; 00047 }; 00048 00049 00050 } 00051 00052 00053 #endif