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/Projections/FinalState.hh" 00006 #include "Rivet/Projections/MissingMomentum.hh" 00007 #include "Rivet/Projections/VetoedFinalState.hh" 00008 00009 namespace Rivet { 00010 00011 00012 /// @brief Convenience finder of leptonically decaying W 00013 /// 00014 /// Chain together different projections as convenience for finding one W 00015 /// from one lepton and the missing E 4-vector in the final state, including photon clustering. 00016 /// 00017 /// @todo Inherit directly from ParticleFinder, not FinalState 00018 class WFinder : public FinalState { 00019 public: 00020 00021 enum ClusterPhotons { NOCLUSTER=0, CLUSTERNODECAY=1, CLUSTERALL }; 00022 enum PhotonTracking { NOTRACK=0, TRACK=1 }; 00023 enum MassWindow { MASS=0, TRANSMASS=1 }; 00024 00025 /// @name Constructors 00026 //@{ 00027 00028 /// Constructor taking cuts object 00029 /// @param inputfs Input final state 00030 /// @param leptoncuts Charged lepton cuts 00031 /// @param pid Type of the charged lepton 00032 /// @param minmass,maxmass (Transverse) mass window 00033 /// @param missingET Minimal amount of missing ET (neutrinos) required 00034 /// @param dRmax Maximum dR of photons around charged lepton to take into account 00035 /// for W reconstruction (only relevant if one of the following are true) 00036 /// @param clusterPhotons Whether such photons are supposed to be 00037 /// clustered to the lepton object and thus W mom 00038 /// @param trackPhotons Whether such photons should be added to _theParticles 00039 /// @param masstype Whether mass window should be applied using m or mT 00040 WFinder(const FinalState& inputfs, 00041 const Cut& leptoncuts, 00042 PdgId pid, 00043 double minmass, double maxmass, 00044 double missingET, 00045 double dRmax=0.1, 00046 ClusterPhotons clusterPhotons=CLUSTERNODECAY, 00047 PhotonTracking trackPhotons=NOTRACK, 00048 MassWindow masstype=MASS, 00049 double masstarget=80.4*GeV); 00050 00051 /// Clone on the heap. 00052 virtual const Projection* clone() const { 00053 return new WFinder(*this); 00054 } 00055 00056 //@} 00057 00058 00059 /// Access to the found bosons 00060 /// 00061 /// @note Currently either 0 or 1 boson can be found. 00062 const Particles& bosons() const { return _bosons; } 00063 00064 /// Access to the found boson (assuming it exists) 00065 const Particle& boson() const { return _bosons[0]; } 00066 00067 00068 /// Access to the Ws' constituent clustered leptons 00069 /// 00070 /// @note Either size 0 if no boson was found or 1 if one boson was found 00071 const Particles& constituentLeptons() const { return _constituentLeptons; } 00072 00073 /// Access to the W's constituent clustered lepton (assuming it exists) 00074 const Particle& constituentLepton() const { return _constituentLeptons[0]; } 00075 00076 00077 /// Access to the Ws' constituent neutrinos 00078 /// 00079 /// @note Either size 0 if no boson was found or 1 if one boson was found 00080 /// @note The neutrino can't be perfecly reconstructed -- this is a pseudo-nu from the MET. 00081 const Particles& constituentNeutrinos() const { return _constituentNeutrinos; } 00082 00083 /// Access to the W's constituent neutrino (assuming it exists) 00084 /// @note The neutrino can't be perfecly reconstructed -- this is a pseudo-nu from the MET. 00085 const Particle& constituentNeutrino() const { return _constituentNeutrinos[0]; } 00086 00087 00088 /// Access to the particles other than the W leptons and clustered photons 00089 /// 00090 /// Useful for e.g. input to a jet finder 00091 const VetoedFinalState& remainingFinalState() const; 00092 00093 /// Access to the missing momentum projection used to find the "neutrino" 00094 const MissingMomentum& missingMom() const; 00095 00096 /// @brief Calculate the transverse mass of the W, from the charged lepton and neutrino 00097 /// 00098 /// Defined as sqrt(2 pT_l pT_nu (1.0 - cos(dphi_lnu))). Return -1 if no boson found. 00099 double mT() const { 00100 if (bosons().empty()) return -1; 00101 const FourMomentum& l = constituentLeptons()[0].momentum(); 00102 const FourMomentum& nu = constituentNeutrinos()[0].momentum(); 00103 return sqrt( 2 * l.pT() * nu.pT() * (1 - cos(deltaPhi(l, nu))) ); 00104 } 00105 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 private: 00127 00128 /// Transverse mass cuts 00129 double _minmass, _maxmass, _masstarget; 00130 bool _useTransverseMass; 00131 00132 /// Missing ET cut 00133 double _etMiss; 00134 00135 /// Switch for tracking of photons (whether to add them to _theParticles) 00136 /// This is relevant when the ZFinder::_theParticles are to be excluded 00137 /// from e.g. the input to a jet finder, to specify whether the clustered 00138 /// photons are to be excluded as well. 00139 /// (Yes, some experiments make a difference between clusterPhotons and 00140 /// trackPhotons!) 00141 PhotonTracking _trackPhotons; 00142 00143 /// Lepton flavour 00144 PdgId _pid; 00145 00146 /// Neutrino flavour 00147 PdgId _nu_pid; 00148 00149 /// list of found bosons (currently either 0 or 1) 00150 Particles _bosons; 00151 00152 /// Constituent leptons (currently either 0 or 1) 00153 Particles _constituentLeptons; 00154 00155 /// Constituent neutrinos (currently either 0 or 1) 00156 Particles _constituentNeutrinos; 00157 00158 }; 00159 00160 00161 } 00162 00163 00164 #endif Generated on Wed Oct 7 2015 12:09:15 for The Rivet MC analysis system by ![]() |