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