rivet is hosted by Hepforge, IPPP Durham
ZFinder.hh
Go to the documentation of this file.
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 
00016   /// @brief Convenience finder of leptonically decaying Zs
00017   ///
00018   /// Chain together different projections as convenience for finding Z's
00019   /// from two leptons in the final state, including photon clustering.
00020   class ZFinder : public FinalState {
00021 
00022   public:
00023 
00024     /// @name Constructors
00025     //@{
00026 
00027     /// Constructor taking single eta/pT bounds
00028     /// @param inputfs Input final state
00029     /// @param etaMin,etaMax,pTmin lepton cuts
00030     /// @param pid type of the leptons
00031     /// @param minmass,maxmass mass window
00032     /// @param dRmax maximum dR of photons around leptons to take into account
00033     ///  for Z 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 objects and thus Z mom
00036     /// @param trackPhotons whether such photons should be added to _theParticles
00037     ///  (cf. _trackPhotons)
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 
00047     /// Constructor taking multiple eta/pT bounds
00048     /// @param inputfs Input final state
00049     /// @param etaRanges,pTmin lepton cuts
00050     /// @param pid type of the leptons
00051     /// @param minmass,maxmass mass window
00052     /// @param dRmax maximum dR of photons around leptons to take into account
00053     ///  for Z reconstruction (only relevant if one of the following are true)
00054     /// @param clusterPhotons whether such photons are supposed to be
00055     ///  clustered to the lepton objects and thus Z mom
00056     /// @param trackPhotons whether such photons should be added to _theParticles
00057     ///  (cf. _trackPhotons)
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 
00067     /// @deprecated Constructors without inputfs -- only for backwards compatibility
00068     ZFinder(double, double, double, PdgId, double, double, double,
00069             bool, bool, double masstarget=91.2*GeV);
00070     /// @deprecated Constructors without inputfs -- only for backwards compatibility
00071     ZFinder(const std::vector<std::pair<double, double> >&, double, PdgId,
00072             double, double, double, bool, bool, double masstarget=91.2*GeV);
00073 
00074 
00075     /// Clone on the heap.
00076     virtual const Projection* clone() const {
00077       return new ZFinder(*this);
00078     }
00079     //@}
00080 
00081 
00082     /// Access to the found bosons (currently either 0 or 1)
00083     const Particles& bosons() const { return _bosons; }
00084 
00085     /// Access to the Z constituent clustered leptons
00086     /// (e.g. for more fine-grained cuts on the clustered leptons)
00087     /// The order is going to be: positive charge constituent 1st, negative 2nd
00088     const vector<Particle>& constituents() const { return _constituents; }
00089 
00090     /// Access to the remaining particles, after the Z and clustered photons
00091     /// have been removed from the full final state
00092     /// (e.g. for running a jet finder on it)
00093     const FinalState& remainingFinalState() const;
00094 
00095 
00096   protected:
00097 
00098     /// Apply the projection on the supplied event.
00099     void project(const Event& e);
00100 
00101     /// Compare projections.
00102     int compare(const Projection& p) const;
00103 
00104 
00105   public:
00106 
00107     /// Clear the projection
00108     void clear() {
00109       _theParticles.clear();
00110       _bosons.clear();
00111       _constituents.clear();
00112     }
00113 
00114 
00115   private:
00116     /// Common implementation of constructor operation, taking FS params.
00117     void _init(const FinalState& inputfs,
00118                const std::vector<std::pair<double, double> >& etaRanges,
00119                double pTmin,  PdgId pid,
00120                double minmass, double maxmass,
00121                double dRmax, bool clusterPhotons, bool trackPhotons,
00122                double masstarget);
00123 
00124     /// Mass cuts to apply to clustered leptons (cf. InvMassFinalState)
00125     double _minmass, _maxmass, _masstarget;
00126 
00127     /// Switch for tracking of photons (whether to add them to _theParticles)
00128     /// This is relevant when the ZFinder::_theParticles are to be excluded
00129     /// from e.g. the input to a jet finder, to specify whether the clustered
00130     /// photons are to be excluded as well.
00131     /// (Yes, some experiments make a difference between clusterPhotons and
00132     /// trackPhotons!)
00133     bool _trackPhotons;
00134 
00135     /// Lepton flavour
00136     PdgId _pid;
00137 
00138     /// list of found bosons (currently either 0 or 1)
00139     Particles _bosons;
00140 
00141     /// Clustered leptons
00142     vector<Particle> _constituents;
00143 
00144   };
00145 
00146 
00147 }
00148 
00149 
00150 
00151 #endif