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