rivet is hosted by Hepforge, IPPP Durham
ATLAS_2011_I954993.cc
Go to the documentation of this file.
00001 // -*- C++ -*-
00002 #include "Rivet/Analysis.hh"
00003 #include "Rivet/Projections/ZFinder.hh"
00004 #include "Rivet/Projections/WFinder.hh"
00005 #include "Rivet/Projections/VetoedFinalState.hh"
00006 
00007 namespace Rivet {
00008 
00009 
00010   /// @brief WZ fiducial cross-section measurement
00011   class ATLAS_2011_I954993 : public Analysis {
00012   public:
00013 
00014     /// Default constructor
00015     ATLAS_2011_I954993()
00016       : Analysis("ATLAS_2011_I954993")
00017     {
00018       setNeedsCrossSection(true);
00019     }
00020 
00021 
00022     /// @name Analysis methods
00023     //@{
00024 
00025     /// Projection and histogram setup
00026     void init() {
00027 
00028       ZFinder zfinder_e(-2.5, 2.5, 15*GeV, PID::ELECTRON, 81.1876*GeV, 101.1876*GeV, 0.1, ZFinder::CLUSTERNODECAY);
00029       addProjection(zfinder_e, "ZFinder_e");
00030       ZFinder zfinder_mu(-2.5, 2.5, 15*GeV, PID::MUON, 81.1876*GeV, 101.1876*GeV, 0.1, ZFinder::CLUSTERNODECAY);
00031       addProjection(zfinder_mu, "ZFinder_mu");
00032 
00033       VetoedFinalState weinput;
00034       weinput.addVetoOnThisFinalState(zfinder_e);
00035       WFinder wfinder_e(weinput, -2.5, 2.5, 15*GeV, PID::ELECTRON, 0*GeV, 1000*GeV, 25*GeV, 0.1, WFinder::CLUSTERNODECAY);
00036       addProjection(wfinder_e, "WFinder_e");
00037 
00038       VetoedFinalState wminput;
00039       wminput.addVetoOnThisFinalState(zfinder_mu);
00040       WFinder wfinder_mu(wminput,-2.5, 2.5, 15*GeV, PID::MUON, 0*GeV, 1000*GeV, 25*GeV, 0.1, WFinder::CLUSTERNODECAY);
00041       addProjection(wfinder_mu, "WFinder_mu");
00042 
00043       // Histograms
00044       _h_fiducial = bookHisto1D(1,1,1);
00045     }
00046 
00047 
00048     /// Do the analysis
00049     void analyze(const Event& e) {
00050       const ZFinder& zfinder_e = applyProjection<ZFinder>(e, "ZFinder_e");
00051       const ZFinder& zfinder_mu = applyProjection<ZFinder>(e, "ZFinder_mu");
00052       const WFinder& wfinder_e = applyProjection<WFinder>(e, "WFinder_e");
00053       const WFinder& wfinder_mu = applyProjection<WFinder>(e, "WFinder_mu");
00054 
00055       // Looking for a Z, exit if not found
00056       if (zfinder_e.bosons().size() != 1 && zfinder_mu.bosons().size() != 1) {
00057         MSG_DEBUG("No Z boson found, vetoing event");
00058         vetoEvent;
00059       }
00060 
00061       // Looking for a W, exit if not found
00062       if (wfinder_e.bosons().size()!= 1 && wfinder_mu.bosons().size() != 1) {
00063         MSG_DEBUG("No W boson found, vetoing event");
00064         vetoEvent;
00065       }
00066 
00067       // If we find a W, make fiducial acceptance cuts and exit if not found
00068       if (wfinder_e.bosons().size() == 1) {
00069         const FourMomentum& We = wfinder_e.constituentLeptons()[0].momentum();
00070         const FourMomentum& Wenu = wfinder_e.constituentNeutrinos()[0].momentum();
00071         const double mT = wfinder_e.mT();
00072         if (Wenu.pT() < 25*GeV || We.pT() < 20*GeV || mT < 20*GeV) {
00073           MSG_DEBUG("Wnu pT = " << Wenu.pT()/GeV << " GeV, Wl pT = " << We.pT()/GeV << " GeV, mT = " << mT/GeV << " GeV");
00074           vetoEvent;
00075         }
00076       } else if (wfinder_mu.bosons().size() == 1) {
00077         const FourMomentum& Wmu = wfinder_mu.constituentLeptons()[0].momentum();
00078         const FourMomentum& Wmunu = wfinder_mu.constituentNeutrinos()[0].momentum();
00079         const double mT = wfinder_mu.mT();
00080         if (Wmunu.pT() < 25*GeV || Wmu.pT() < 20*GeV || mT < 20*GeV) {
00081           MSG_DEBUG("Wnu pT = " << Wmunu.pT()/GeV << ", Wl pT = " << Wmu.pT()/GeV << " GeV, mT = " << mT/GeV << " GeV");
00082           vetoEvent;
00083         }
00084       } else {
00085         MSG_DEBUG("No W boson found: vetoing event");
00086         vetoEvent;
00087       }
00088 
00089       // Update the fiducial cross-section histogram
00090       _h_fiducial->fill(7000, e.weight());
00091     }
00092 
00093 
00094     /// Finalize
00095     void finalize() {
00096       normalize(_h_fiducial, crossSection()/femtobarn);
00097     }
00098 
00099     //@}
00100 
00101 
00102   private:
00103 
00104     /// @name Histograms
00105     //@{
00106     Histo1DPtr _h_fiducial;
00107     //@}
00108 
00109   };
00110 
00111 
00112   //// The hook for the plugin system
00113   DECLARE_RIVET_PLUGIN(ATLAS_2011_I954993);
00114 
00115 }