Rivet  1.8.0
WFinder.hh
00001 // -*- C++ -*-
00002 #ifndef RIVET_WFinder_HH
00003 #define RIVET_WFinder_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/ChargedFinalState.hh"
00011 #include "Rivet/Projections/LeptonClusters.hh"
00012 
00013 namespace Rivet {
00014 
00015 
00020   class WFinder : public FinalState {
00021   public:
00022 
00024 
00025 
00039     WFinder(const FinalState& inputfs,
00040             double etaMin, double etaMax,
00041             double pTmin,
00042             PdgId pid,
00043             double minmass, double maxmass,
00044             double missingET,
00045             double dRmax, bool clusterPhotons=true, bool trackPhotons=false,
00046             double masstarget=80.4,
00047             bool useTransverseMass=false);
00048 
00049 
00063     WFinder(const FinalState& inputfs,
00064             const std::vector<std::pair<double, double> >& etaRanges,
00065             double pTmin,
00066             PdgId pid,
00067             double minmass, const double maxmass,
00068             double missingET,
00069             double dRmax, bool clusterPhotons=true, bool trackPhotons=false,
00070             double masstarget=80.4,
00071             bool useTransverseMass=false);
00072 
00073 
00075     WFinder(double, double, double, PdgId, double, double, double, double,
00076             bool clusterPhotons=true, bool trackPhotons=false,
00077             double masstarget=80.4, bool useTransverseMass=false);
00079     WFinder(const std::vector<std::pair<double, double> >&, double,
00080             PdgId, double, double, double, double,
00081             bool clusterPhotons=true, bool trackPhotons=false,
00082             double masstarget=80.4, bool useTransverseMass=false);
00083 
00085     virtual const Projection* clone() const {
00086       return new WFinder(*this);
00087     }
00089 
00090 
00092     const ParticleVector& bosons() const { return _bosons; }
00093 
00096     const vector<Particle>& constituentLeptons() const { return _constituentLeptons; }
00097 
00100     const vector<Particle>& constituentNeutrinos() const { return _constituentNeutrinos; }
00101 
00105     const FinalState& remainingFinalState() const;
00106 
00107   protected:
00108 
00110     void project(const Event& e);
00111 
00113     int compare(const Projection& p) const;
00114 
00115 
00116   public:
00117 
00119     void clear() {
00120       _theParticles.clear();
00121       _bosons.clear();
00122       _constituentLeptons.clear();
00123       _constituentNeutrinos.clear();
00124     }
00125 
00126 
00127   private:
00128 
00130     void _init(const FinalState& inputfs,
00131                const std::vector<std::pair<double, double> >& etaRanges,
00132                double pTmin,  PdgId pid,
00133                double minmass, double maxmass,
00134                double missingET,
00135                double dRmax, bool clusterPhotons, bool trackPhotons,
00136                double masstarget,
00137                bool useTransverseMass);
00138 
00139 
00140   private:
00141 
00143     double _minmass, _maxmass, _masstarget;
00144     bool _useTransverseMass;
00145 
00147     double _etMiss;
00148 
00155     bool _trackPhotons;
00156 
00158     PdgId _pid;
00159 
00161     PdgId _nu_pid;
00162 
00164     ParticleVector _bosons;
00165 
00167     ParticleVector _constituentLeptons;
00168 
00170     ParticleVector _constituentNeutrinos;
00171 
00172   };
00173 
00174 
00175 }
00176 
00177 
00178 #endif