00001 // -*- C++ -*- 00002 #ifndef RIVET_InitialQuarks_HH 00003 #define RIVET_InitialQuarks_HH 00004 00005 #include "Rivet/Projection.hh" 00006 #include "Rivet/Particle.hh" 00007 #include "Rivet/Event.hh" 00008 00009 namespace Rivet { 00010 00011 00012 /// @brief Project out quarks from the hard process in \f$ e^+ e^- \to Z^0 \f$ events 00013 /// 00014 /// @warning This is a very dangerous and specific projection! Use 00015 /// e.g. PID::hasBottom and friends instead whenever possible 00016 class InitialQuarks : public Projection { 00017 public: 00018 00019 /// @name Standard constructors and destructors. 00020 //@{ 00021 /// The default constructor. May specify the minimum and maximum 00022 /// pseudorapidity \f$ \eta \f$ and the min \f$ p_T \f$ (in GeV). 00023 InitialQuarks() 00024 { 00025 setName("InitialQuarks"); 00026 } 00027 00028 00029 /// Clone on the heap. 00030 virtual const Projection* clone() const { 00031 return new InitialQuarks(*this); 00032 } 00033 //@} 00034 00035 /// Access the projected final-state particles. 00036 virtual const ParticleVector& particles() const { return _theParticles; } 00037 00038 /// Is this final state empty? 00039 virtual bool empty() const { return _theParticles.empty(); } 00040 /// @deprecated Is this final state empty? 00041 virtual bool isEmpty() const { return _theParticles.empty(); } 00042 00043 00044 protected: 00045 00046 /// Apply the projection to the event. 00047 virtual void project(const Event& e); 00048 00049 /// Compare projections. 00050 virtual int compare(const Projection& p) const; 00051 00052 00053 protected: 00054 00055 /// The final-state particles. 00056 ParticleVector _theParticles; 00057 00058 }; 00059 00060 } 00061 00062 00063 #endif