rivet is hosted by Hepforge, IPPP Durham
ATLAS_2011_I925932.cc
Go to the documentation of this file.
00001 // -*- C++ -*-
00002 // ATLAS W pT analysis
00003 
00004 #include "Rivet/Analysis.hh"
00005 #include "Rivet/RivetYODA.hh"
00006 #include "Rivet/Tools/Logging.hh"
00007 #include "Rivet/Projections/WFinder.hh"
00008 
00009 namespace Rivet {
00010 
00011 
00012   namespace {
00013     inline double calcMT(const FourMomentum& a, const FourMomentum& b) {
00014       return sqrt(2.0 * a.pT() * b.pT() * (1.0 - cos(a.phi() - b.phi())) );
00015     }
00016   }
00017 
00018 
00019   class ATLAS_2011_I925932 : public Analysis {
00020   public:
00021 
00022     /// Constructor
00023     ATLAS_2011_I925932() : Analysis("ATLAS_2011_I925932") {  }
00024 
00025 
00026     /// @name Analysis methods
00027     //@{
00028 
00029     void init() {
00030       // Set up projections
00031       FinalState fs;
00032       WFinder wfinder_dressed_el(fs, -2.4, 2.4, 20.0*GeV, ELECTRON, 0.0*GeV, 1000.0*GeV, 25.0*GeV, 0.2,true,false);
00033       addProjection(wfinder_dressed_el, "WFinder_dressed_el");
00034       WFinder wfinder_bare_el(fs, -2.4, 2.4, 20.0*GeV, ELECTRON, 0.0*GeV, 1000.0*GeV, 25.0*GeV, 0.0,true,false);
00035       addProjection(wfinder_bare_el, "WFinder_bare_el");
00036       WFinder wfinder_dressed_mu(fs, -2.4, 2.4, 20.0*GeV, MUON, 0.0*GeV, 1000.0*GeV, 25.0*GeV, 0.2,true,false);
00037       addProjection(wfinder_dressed_mu, "WFinder_dressed_mu");
00038       WFinder wfinder_bare_mu(fs, -2.4, 2.4, 20.0*GeV, MUON, 0.0*GeV, 1000.0*GeV, 25.0*GeV, 0.0,true,false);
00039       addProjection(wfinder_bare_mu, "WFinder_bare_mu");
00040 
00041       // Book histograms
00042       _hist_wpt_dressed_el  = bookHisto1D(1, 1, 1);
00043       _hist_wpt_bare_el     = bookHisto1D(1, 1, 2);
00044       _hist_wpt_dressed_mu  = bookHisto1D(2, 1, 1);
00045       _hist_wpt_bare_mu     = bookHisto1D(2, 1, 2);
00046     }
00047 
00048 
00049     /// Do the analysis
00050     void analyze(const Event& event) {
00051 
00052       const WFinder& wfinder_dressed_el = applyProjection<WFinder>(event, "WFinder_dressed_el");
00053       const WFinder& wfinder_bare_el    = applyProjection<WFinder>(event, "WFinder_bare_el");
00054       const WFinder& wfinder_dressed_mu = applyProjection<WFinder>(event, "WFinder_dressed_mu");
00055       const WFinder& wfinder_bare_mu    = applyProjection<WFinder>(event, "WFinder_bare_mu");
00056 
00057       if (wfinder_dressed_el.particles().empty() && wfinder_bare_el.particles().empty() &&
00058           wfinder_dressed_mu.particles().empty() && wfinder_bare_mu.particles().empty()) {
00059         MSG_DEBUG("No W bosons found");
00060         vetoEvent;
00061       }
00062 
00063       // "Dressed" electron
00064       if (!wfinder_dressed_el.particles().empty()) {
00065         const FourMomentum el = wfinder_dressed_el.constituentLeptons()[0].momentum();
00066         const FourMomentum nu = wfinder_dressed_el.constituentNeutrinos()[0].momentum();
00067         if (calcMT(el, nu) > 40.0*GeV && nu.pT() > 25.0*GeV) {
00068           _hist_wpt_dressed_el->fill(wfinder_dressed_el.bosons()[0].momentum().pT()/GeV, event.weight());
00069         }
00070       }
00071 
00072       // "Bare" electron
00073       if (!wfinder_bare_el.particles().empty()) {
00074         const FourMomentum el = wfinder_bare_el.constituentLeptons()[0].momentum();
00075         const FourMomentum nu = wfinder_bare_el.constituentNeutrinos()[0].momentum();
00076         if (calcMT(el, nu) > 40.0*GeV && nu.pT() > 25.0*GeV) {
00077           _hist_wpt_bare_el->fill(wfinder_bare_el.bosons()[0].momentum().pT()/GeV, event.weight());
00078         }
00079       }
00080 
00081       // "Dressed" muon
00082       if (!wfinder_dressed_mu.particles().empty()) {
00083         const FourMomentum mu = wfinder_dressed_mu.constituentLeptons()[0].momentum();
00084         const FourMomentum nu = wfinder_dressed_mu.constituentNeutrinos()[0].momentum();
00085         if (calcMT(mu, nu) > 40.0*GeV && nu.pT() > 25.0*GeV) {
00086           _hist_wpt_dressed_mu->fill(wfinder_dressed_mu.bosons()[0].momentum().pT()/GeV, event.weight());
00087         }
00088       }
00089 
00090       // "Bare" muon
00091       if (!wfinder_bare_mu.particles().empty()) {
00092         const FourMomentum mu = wfinder_bare_mu.constituentLeptons()[0].momentum();
00093         const FourMomentum nu = wfinder_bare_mu.constituentNeutrinos()[0].momentum();
00094         if (calcMT(mu, nu) > 40.0*GeV && nu.pT() > 25.0*GeV) {
00095           _hist_wpt_bare_mu->fill(wfinder_bare_mu.bosons()[0].momentum().pT()/GeV, event.weight());
00096         }
00097       }
00098 
00099     }
00100 
00101 
00102     // Normalize histos
00103     void finalize() {
00104       normalize(_hist_wpt_dressed_el);
00105       normalize(_hist_wpt_bare_el);
00106       normalize(_hist_wpt_dressed_mu);
00107       normalize(_hist_wpt_bare_mu);
00108     }
00109 
00110     //@}
00111 
00112 
00113   private:
00114 
00115     Histo1DPtr _hist_wpt_dressed_el;
00116     Histo1DPtr _hist_wpt_bare_el;
00117     Histo1DPtr _hist_wpt_dressed_mu;
00118     Histo1DPtr _hist_wpt_bare_mu;
00119 
00120   };
00121 
00122 
00123   // Hook for the plugin system
00124   DECLARE_RIVET_PLUGIN(ATLAS_2011_I925932);
00125 
00126 }