rivet is hosted by Hepforge, IPPP Durham
PromptFinalState.hh
Go to the documentation of this file.
00001 // -*- C++ -*-
00002 #ifndef RIVET_PromptFinalState_HH
00003 #define RIVET_PromptFinalState_HH
00004 
00005 #include "Rivet/Projections/FinalState.hh"
00006 
00007 namespace Rivet {
00008 
00009 
00010   /// @brief Find final state particles directly connected to the hard process.
00011   ///
00012   /// The definition of "prompt" used in Rivet is that from high-scale physics, i.e.
00013   /// particles directly connected to the hard process in an interaction, regardless
00014   /// of realistic reconstructibility of displaced vertices, etc. By construction
00015   /// hadrons cannot be considered prompt as they will be colour connected to other
00016   /// parts of the event through non-perturbative effects: this projection can
00017   /// return electrons, muons, photons, and exotic particles which do not have a
00018   /// hadron in their post-hadronization ancestor chain. Flags exist to choose
00019   /// whether intermediate tau or muon decays invalidate a particle's promptness.
00020   ///
00021   /// @todo Decide how to treat brem photons off prompt leptons -- are they also prompt? "Decay" does not change the lepton PID...
00022   class PromptFinalState : public FinalState {
00023   public:
00024 
00025     /// @name Constructors
00026     //@{
00027     // Final State
00028     PromptFinalState(const FinalState& fsp);
00029 
00030     /// Cut constructor.
00031     PromptFinalState(const Cut & c);
00032 
00033     /// Clone on the heap.
00034     virtual const Projection* clone() const {
00035       return new PromptFinalState(*this);
00036     }
00037     //@}
00038 
00039     /// Accept particles from decays of prompt muons as themselves being prompt?
00040     void acceptMuonDecays(bool acc=true) { _acceptMuDecays = acc; }
00041     /// Accept particles from decays of prompt taus as themselves being prompt?
00042     void acceptTauDecays(bool acc=true) { _acceptTauDecays = acc; }
00043 
00044     /// Decide if a given particle is prompt based on set definition flags
00045     /// @todo Move into ParticleUtils / MCUtils
00046     /// @note This one doesn't make any judgements about final-stateness
00047     bool isPrompt(const Particle& p) const;
00048 
00049   protected:
00050 
00051     /// Apply the projection on the supplied event.
00052     void project(const Event& e);
00053 
00054     /// Compare projections.
00055     int compare(const Projection& p) const;
00056 
00057   private:
00058 
00059     bool _acceptMuDecays, _acceptTauDecays;
00060 
00061   };
00062 
00063 }
00064 
00065 
00066 #endif