rivet is hosted by Hepforge, IPPP Durham
ATLAS_2010_S8919674.cc
Go to the documentation of this file.
00001 // -*- C++ -*-
00002 #include "Rivet/Analysis.hh"
00003 #include "Rivet/Projections/VetoedFinalState.hh"
00004 #include "Rivet/Projections/FastJets.hh"
00005 #include "Rivet/Projections/WFinder.hh"
00006 
00007 namespace Rivet {
00008 
00009 
00010   /// W + jets jet multiplicities and pT
00011   class ATLAS_2010_S8919674 : public Analysis {
00012   public:
00013 
00014     /// @name Constructors etc.
00015     //@{
00016 
00017     /// Constructor
00018     ATLAS_2010_S8919674()
00019       : Analysis("ATLAS_2010_S8919674")
00020     {    }
00021 
00022     //@}
00023 
00024 
00025   public:
00026 
00027     /// @name Analysis methods
00028     //@{
00029 
00030     /// Book histograms and initialise projections before the run
00031     void init() {
00032 
00033       // Set up projections to find the electron and muon Ws
00034       FinalState fs;
00035       Cut cuts = ( EtaIn(-2.47, -1.52)
00036            | EtaIn(-1.37,  1.37)
00037            | EtaIn( 1.52,  2.47) ) & (Cuts::pT >= 20.0*GeV);
00038       WFinder wfinder_e(fs, cuts, PID::ELECTRON, 0*GeV, 1000*GeV, 25*GeV);
00039       addProjection(wfinder_e, "W_e");
00040       WFinder wfinder_mu(fs, EtaIn(-2.4,2.4) & (Cuts::pT >= 20.0*GeV), PID::MUON, 0*GeV, 1000*GeV, 25*GeV);
00041       addProjection(wfinder_mu, "W_mu");
00042 
00043       // Input for the jets: no neutrinos, no muons, and no electron which passed the electron cuts
00044       VetoedFinalState veto;
00045       veto.addVetoOnThisFinalState(wfinder_e);
00046       veto.addVetoOnThisFinalState(wfinder_mu);
00047       veto.addVetoPairId(PID::MUON);
00048       veto.vetoNeutrinos();
00049       FastJets jets(veto, FastJets::ANTIKT, 0.4);
00050       addProjection(jets, "jets");
00051 
00052       /// Book histograms
00053       _h_el_njet_inclusive = bookHisto1D(1,1,1);
00054       _h_mu_njet_inclusive = bookHisto1D(2,1,1);
00055       _h_el_pT_jet1 = bookHisto1D(5,1,1);
00056       _h_mu_pT_jet1 = bookHisto1D(6,1,1);
00057       _h_el_pT_jet2 = bookHisto1D(7,1,1);
00058       _h_mu_pT_jet2 = bookHisto1D(8,1,1);
00059     }
00060 
00061 
00062     /// Perform the per-event analysis
00063     void analyze(const Event& event) {
00064       const double weight = event.weight();
00065 
00066       const Jets& jets = applyProjection<FastJets>(event, "jets").jetsByPt(20.0*GeV);
00067 
00068       const WFinder& We = applyProjection<WFinder>(event, "W_e");
00069       if (We.bosons().size() == 1) {
00070         const FourMomentum& p_miss = We.constituentNeutrinos()[0].momentum();
00071         const FourMomentum& p_lept = We.constituentLeptons()[0].momentum();
00072         if (p_miss.Et() > 25*GeV && We.mT() > 40*GeV) {
00073           Jets js;
00074           foreach (const Jet& j, jets) {
00075             if (fabs(j.eta()) < 2.8 && deltaR(p_lept, j.momentum()) > 0.5) 
00076               js.push_back(j);
00077           }
00078           _h_el_njet_inclusive->fill(0, weight);
00079           if (js.size() >= 1) {
00080             _h_el_njet_inclusive->fill(1, weight);
00081             _h_el_pT_jet1->fill(js[0].pT(), weight);
00082           }
00083           if (js.size() >= 2) {
00084             _h_el_njet_inclusive->fill(2, weight);
00085             _h_el_pT_jet2->fill(js[1].pT(), weight);
00086           }
00087           if (js.size() >= 3) {
00088             _h_el_njet_inclusive->fill(3, weight);
00089           }
00090         }
00091       }
00092 
00093       const WFinder& Wm = applyProjection<WFinder>(event, "W_mu");
00094       if (Wm.bosons().size() == 1) {
00095         const FourMomentum& p_miss = Wm.constituentNeutrinos()[0].momentum();
00096         const FourMomentum& p_lept = Wm.constituentLeptons()[0].momentum();
00097         if (p_miss.Et() > 25*GeV && Wm.mT() > 40*GeV) {
00098           Jets js;
00099           foreach (const Jet& j, jets) {
00100             if (fabs(j.eta()) < 2.8 && deltaR(p_lept, j.momentum()) > 0.5) 
00101               js.push_back(j);
00102           }
00103           _h_mu_njet_inclusive->fill(0, weight);
00104           if (js.size() >= 1) {
00105             _h_mu_njet_inclusive->fill(1, weight);
00106             _h_mu_pT_jet1->fill(js[0].pT(), weight);
00107           }
00108           if (js.size() >= 2) {
00109             _h_mu_njet_inclusive->fill(2, weight);
00110             _h_mu_pT_jet2->fill(js[1].pT(), weight);
00111           }
00112           if (js.size() >= 3) {
00113             _h_mu_njet_inclusive->fill(3, weight);
00114           }
00115           if (js.size() >= 4) {
00116             _h_mu_njet_inclusive->fill(4, weight);
00117           }
00118         }
00119       }
00120 
00121     }
00122 
00123 
00124     /// Normalise histograms etc., after the run
00125     void finalize() {
00126       double normfac = crossSection()/sumOfWeights();
00127       scale(_h_el_njet_inclusive, normfac);
00128       scale(_h_mu_njet_inclusive, normfac);
00129       scale(_h_el_pT_jet1, normfac);
00130       scale(_h_mu_pT_jet1, normfac);
00131       scale(_h_el_pT_jet2, normfac);
00132       scale(_h_mu_pT_jet2, normfac);
00133     }
00134 
00135     //@}
00136 
00137 
00138   private:
00139 
00140     /// @name Histograms
00141     //@{
00142 
00143     Histo1DPtr _h_el_njet_inclusive;
00144     Histo1DPtr _h_mu_njet_inclusive;
00145     Histo1DPtr _h_el_pT_jet1;
00146     Histo1DPtr _h_mu_pT_jet1;
00147     Histo1DPtr _h_el_pT_jet2;
00148     Histo1DPtr _h_mu_pT_jet2;
00149     //@}
00150 
00151   };
00152 
00153 
00154 
00155   // The hook for the plugin system
00156   DECLARE_RIVET_PLUGIN(ATLAS_2010_S8919674);
00157 
00158 }