Rivet  1.8.0
ZFinder.hh
00001 // -*- C++ -*-
00002 #ifndef RIVET_ZFinder_HH
00003 #define RIVET_ZFinder_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 #include "Rivet/Projections/LeptonClusters.hh"
00012 
00013 namespace Rivet {
00014 
00015 
00020   class ZFinder : public FinalState {
00021 
00022   public:
00023 
00025 
00026 
00038     ZFinder(const FinalState& inputfs,
00039             double etaMin, double etaMax,
00040             double pTmin,
00041             PdgId pid,
00042             double minmass, double maxmass,
00043             double dRmax, bool clusterPhotons, bool trackPhotons,
00044             double masstarget=91.2*GeV);
00045 
00046 
00058     ZFinder(const FinalState& inputfs,
00059             const std::vector<std::pair<double, double> >& etaRanges,
00060             double pTmin,
00061             PdgId pid,
00062             double minmass, const double maxmass,
00063             double dRmax, bool clusterPhotons, bool trackPhotons,
00064             double masstarget=91.2*GeV);
00065 
00066 
00068     ZFinder(double, double, double, PdgId, double, double, double,
00069             bool, bool, double masstarget=91.2*GeV);
00071     ZFinder(const std::vector<std::pair<double, double> >&, double, PdgId,
00072             double, double, double, bool, bool, double masstarget=91.2*GeV);
00073 
00074 
00076     virtual const Projection* clone() const {
00077       return new ZFinder(*this);
00078     }
00080 
00081 
00083     const ParticleVector& bosons() const { return _bosons; }
00084 
00087     const vector<Particle>& constituents() const { return _constituents; }
00088 
00092     const FinalState& remainingFinalState() const;
00093 
00094 
00095   protected:
00096 
00098     void project(const Event& e);
00099 
00101     int compare(const Projection& p) const;
00102 
00103 
00104   public:
00105 
00107     void clear() {
00108       _theParticles.clear();
00109       _bosons.clear();
00110       _constituents.clear();
00111     }
00112 
00113 
00114   private:
00116     void _init(const FinalState& inputfs,
00117                const std::vector<std::pair<double, double> >& etaRanges,
00118                double pTmin,  PdgId pid,
00119                double minmass, double maxmass,
00120                double dRmax, bool clusterPhotons, bool trackPhotons,
00121                double masstarget);
00122 
00124     double _minmass, _maxmass, _masstarget;
00125 
00132     bool _trackPhotons;
00133 
00135     PdgId _pid;
00136 
00138     ParticleVector _bosons;
00139 
00141     vector<Particle> _constituents;
00142 
00143   };
00144 
00145 
00146 }
00147 
00148 
00149 
00150 #endif