00001 // -*- C++ -*- 00002 #ifndef RIVET_DISLepton_HH 00003 #define RIVET_DISLepton_HH 00004 00005 #include "Rivet/Projections/Beam.hh" 00006 #include "Rivet/Projections/FinalState.hh" 00007 #include "Rivet/Particle.hh" 00008 #include "Rivet/Event.hh" 00009 00010 namespace Rivet { 00011 00012 00013 /// This class projects out the incoming and outgoing leptons in a DIS 00014 /// event. 00015 class DISLepton : public Projection { 00016 00017 public: 00018 00019 /// @name Constructors. 00020 //@{ 00021 00022 DISLepton(){ 00023 setName("DISLepton"); 00024 addProjection(Beam(), "Beam"); 00025 addProjection(FinalState(), "FS"); 00026 } 00027 00028 /// Clone on the heap. 00029 virtual const Projection* clone() const { 00030 return new DISLepton(*this); 00031 } 00032 //@} 00033 00034 00035 protected: 00036 00037 /// Perform the projection operation on the supplied event. 00038 virtual void project(const Event& e); 00039 00040 /// Compare with other projections. 00041 virtual int compare(const Projection& p) const; 00042 00043 public: 00044 00045 /// The incoming lepton. 00046 const Particle& in() const { return _incoming; } 00047 00048 /// The outgoing lepton. 00049 const Particle& out() const { return _outgoing; } 00050 00051 const double &pzSign() const { return _sign; } 00052 00053 private: 00054 00055 /// The incoming lepton. 00056 Particle _incoming; 00057 00058 /// The outgoing lepton. 00059 Particle _outgoing; 00060 00061 /// The sign of the PZ of the incoming lepton 00062 double _sign; 00063 00064 }; 00065 00066 } 00067 00068 00069 #endif