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       FinalState fs;
00028       Cut cuts = EtaIn(-2.5,2.5) & (Cuts::pT >= 15.0*GeV);
00029 
00030       ZFinder zfinder_e(fs, cuts, PID::ELECTRON, 81.1876*GeV, 101.1876*GeV, 0.1, ZFinder::CLUSTERNODECAY);
00031       addProjection(zfinder_e, "ZFinder_e");
00032       ZFinder zfinder_mu(fs, cuts, PID::MUON, 81.1876*GeV, 101.1876*GeV, 0.1, ZFinder::CLUSTERNODECAY);
00033       addProjection(zfinder_mu, "ZFinder_mu");
00034 
00035       VetoedFinalState weinput;
00036       weinput.addVetoOnThisFinalState(zfinder_e);
00037       WFinder wfinder_e(weinput, cuts, PID::ELECTRON, 0*GeV, 1000*GeV, 25*GeV, 0.1, WFinder::CLUSTERNODECAY);
00038       addProjection(wfinder_e, "WFinder_e");
00039 
00040       VetoedFinalState wminput;
00041       wminput.addVetoOnThisFinalState(zfinder_mu);
00042       WFinder wfinder_mu(wminput,cuts, PID::MUON, 0*GeV, 1000*GeV, 25*GeV, 0.1, WFinder::CLUSTERNODECAY);
00043       addProjection(wfinder_mu, "WFinder_mu");
00044 
00045       // Histograms
00046       _h_fiducial = bookHisto1D(1,1,1);
00047     }
00048 
00049 
00050     /// Do the analysis
00051     void analyze(const Event& e) {
00052       const ZFinder& zfinder_e = applyProjection<ZFinder>(e, "ZFinder_e");
00053       const ZFinder& zfinder_mu = applyProjection<ZFinder>(e, "ZFinder_mu");
00054       const WFinder& wfinder_e = applyProjection<WFinder>(e, "WFinder_e");
00055       const WFinder& wfinder_mu = applyProjection<WFinder>(e, "WFinder_mu");
00056 
00057       // Looking for a Z, exit if not found
00058       if (zfinder_e.bosons().size() != 1 && zfinder_mu.bosons().size() != 1) {
00059         MSG_DEBUG("No Z boson found, vetoing event");
00060         vetoEvent;
00061       }
00062 
00063       // Looking for a W, exit if not found
00064       if (wfinder_e.bosons().size()!= 1 && wfinder_mu.bosons().size() != 1) {
00065         MSG_DEBUG("No W boson found, vetoing event");
00066         vetoEvent;
00067       }
00068 
00069       // If we find a W, make fiducial acceptance cuts and exit if not found
00070       if (wfinder_e.bosons().size() == 1) {
00071         const FourMomentum& We = wfinder_e.constituentLeptons()[0].momentum();
00072         const FourMomentum& Wenu = wfinder_e.constituentNeutrinos()[0].momentum();
00073         const double mT = wfinder_e.mT();
00074         if (Wenu.pT() < 25*GeV || We.pT() < 20*GeV || mT < 20*GeV) {
00075           MSG_DEBUG("Wnu pT = " << Wenu.pT()/GeV << " GeV, Wl pT = " << We.pT()/GeV << " GeV, mT = " << mT/GeV << " GeV");
00076           vetoEvent;
00077         }
00078       } else if (wfinder_mu.bosons().size() == 1) {
00079         const FourMomentum& Wmu = wfinder_mu.constituentLeptons()[0].momentum();
00080         const FourMomentum& Wmunu = wfinder_mu.constituentNeutrinos()[0].momentum();
00081         const double mT = wfinder_mu.mT();
00082         if (Wmunu.pT() < 25*GeV || Wmu.pT() < 20*GeV || mT < 20*GeV) {
00083           MSG_DEBUG("Wnu pT = " << Wmunu.pT()/GeV << ", Wl pT = " << Wmu.pT()/GeV << " GeV, mT = " << mT/GeV << " GeV");
00084           vetoEvent;
00085         }
00086       } else {
00087         MSG_DEBUG("No W boson found: vetoing event");
00088         vetoEvent;
00089       }
00090 
00091       // Update the fiducial cross-section histogram
00092       _h_fiducial->fill(7000, e.weight());
00093     }
00094 
00095 
00096     /// Finalize
00097     void finalize() {
00098       normalize(_h_fiducial, crossSection()/femtobarn);
00099     }
00100 
00101     //@}
00102 
00103 
00104   private:
00105 
00106     /// @name Histograms
00107     //@{
00108     Histo1DPtr _h_fiducial;
00109     //@}
00110 
00111   };
00112 
00113 
00114   //// The hook for the plugin system
00115   DECLARE_RIVET_PLUGIN(ATLAS_2011_I954993);
00116 
00117 }