rivet is hosted by Hepforge, IPPP Durham
WFinder.hh
Go to the documentation of this file.
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 
00016   /// @brief Convenience finder of leptonically decaying Ws
00017   ///
00018   /// Chain together different projections as convenience for finding W's
00019   /// from two leptons in the final state, including photon clustering.
00020   class WFinder : public FinalState {
00021   public:
00022 
00023     /// @name Constructors
00024     //@{
00025 
00026     /// Constructor taking single eta/pT bounds
00027     /// @param inputfs Input final state
00028     /// @param etaMin,etaMax,pTmin charged lepton cuts
00029     /// @param pid type of the charged lepton
00030     /// @param minmass,maxmass (transverse) mass window
00031     /// @param missingET minimal amount of missing ET (neutrinos) required
00032     /// @param dRmax maximum dR of photons around charged lepton to take into account
00033     ///  for W reconstruction (only relevant if one of the following are true)
00034     /// @param clusterPhotons whether such photons are supposed to be
00035     ///  clustered to the lepton object and thus W mom
00036     /// @param trackPhotons whether such photons should be added to _theParticles
00037     ///  (cf. _trackPhotons)
00038     /// @param useTransverseMass whether mass window should be applied using mT
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 
00050     /// Constructor taking multiple eta/pT bounds
00051     /// @param inputfs Input final state
00052     /// @param etaRanges,pTmin charged lepton cuts
00053     /// @param pid type of the charged lepton
00054     /// @param minmass,maxmass (transverse) mass window
00055     /// @param missingET minimal amount of missing ET (neutrinos) required
00056     /// @param dRmax maximum dR of photons around charged lepton to take into account
00057     ///  for W reconstruction (only relevant if one of the following are true)
00058     /// @param clusterPhotons whether such photons are supposed to be
00059     ///  clustered to the lepton object and thus W mom
00060     /// @param trackPhotons whether such photons should be added to _theParticles
00061     ///  (cf. _trackPhotons)
00062     /// @param useTransverseMass whether mass window should be applied using mT
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 
00074     /// @deprecated Constructors without inputfs -- only for backwards compatibility
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);
00078     /// @deprecated Constructors without inputfs -- only for backwards compatibility
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 
00084     /// Clone on the heap.
00085     virtual const Projection* clone() const {
00086       return new WFinder(*this);
00087     }
00088     //@}
00089 
00090 
00091     /// Access to the found bosons (currently either 0 or 1)
00092     const Particles& bosons() const { return _bosons; }
00093 
00094     /// Access to the W constituent clustered leptons (currently either of
00095     /// size 0 if no boson was found or 1 if one boson was found)
00096     const vector<Particle>& constituentLeptons() const { return _constituentLeptons; }
00097 
00098     /// Access to the W constituent neutrinos (currently either of size 0 if no
00099     /// boson was found or 1 if one boson was found)
00100     const vector<Particle>& constituentNeutrinos() const { return _constituentNeutrinos; }
00101 
00102     /// Access to the remaining particles, after the W and clustered photons
00103     /// have been removed from the full final state
00104     /// (e.g. for running a jet finder on it)
00105     const FinalState& remainingFinalState() const;
00106 
00107   protected:
00108 
00109     /// Apply the projection on the supplied event.
00110     void project(const Event& e);
00111 
00112     /// Compare projections.
00113     int compare(const Projection& p) const;
00114 
00115 
00116   public:
00117 
00118     /// Clear the projection
00119     void clear() {
00120       _theParticles.clear();
00121       _bosons.clear();
00122       _constituentLeptons.clear();
00123       _constituentNeutrinos.clear();
00124     }
00125 
00126 
00127   private:
00128 
00129     /// Common implementation of constructor operation, taking FS params.
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 
00142     /// Transverse mass cuts
00143     double _minmass, _maxmass, _masstarget;
00144     bool _useTransverseMass;
00145 
00146     /// Missing ET cut
00147     double _etMiss;
00148 
00149     /// Switch for tracking of photons (whether to add them to _theParticles)
00150     /// This is relevant when the ZFinder::_theParticles are to be excluded
00151     /// from e.g. the input to a jet finder, to specify whether the clustered
00152     /// photons are to be excluded as well.
00153     /// (Yes, some experiments make a difference between clusterPhotons and
00154     /// trackPhotons!)
00155     bool _trackPhotons;
00156 
00157     /// Lepton flavour
00158     PdgId _pid;
00159 
00160     /// Neutrino flavour
00161     PdgId _nu_pid;
00162 
00163     /// list of found bosons (currently either 0 or 1)
00164     Particles _bosons;
00165 
00166     /// Constituent leptons (currently either 0 or 1)
00167     Particles _constituentLeptons;
00168 
00169     /// Constituent neutrinos (currently either 0 or 1)
00170     Particles _constituentNeutrinos;
00171 
00172   };
00173 
00174 
00175 }
00176 
00177 
00178 #endif