rivet is hosted by Hepforge, IPPP Durham
ATLAS_2012_I1083318.cc
Go to the documentation of this file.
00001 // -*- C++ -*-
00002 #include "Rivet/Analysis.hh"
00003 #include "Rivet/Projections/IdentifiedFinalState.hh"
00004 #include "Rivet/Projections/VetoedFinalState.hh"
00005 #include "Rivet/Projections/MissingMomentum.hh"
00006 #include "Rivet/Projections/FastJets.hh"
00007 #include "Rivet/Projections/LeptonClusters.hh"
00008 #include "Rivet/Projections/LeadingParticlesFinalState.hh"
00009 
00010 namespace Rivet {
00011 
00012 
00013   /// ATLAS W + jets production at 7 TeV
00014   class ATLAS_2012_I1083318 : public Analysis {
00015   public:
00016 
00017     /// @name Constructors etc.
00018     //@{
00019 
00020     /// Constructor
00021     ATLAS_2012_I1083318()
00022       : Analysis("ATLAS_2012_I1083318")
00023     {    }
00024 
00025     //@}
00026 
00027 
00028   public:
00029 
00030     /// @name Analysis methods
00031     //@{
00032 
00033     /// Book histograms and initialise projections before the run
00034     void init() {
00035 
00036       FinalState fs;
00037       IdentifiedFinalState allleptons;
00038       allleptons.acceptIdPair(PID::ELECTRON);
00039       allleptons.acceptIdPair(PID::MUON);
00040       vector< pair<double, double> > etaRanges;
00041       etaRanges.push_back(make_pair(-2.5, 2.5));
00042       LeptonClusters leptons(fs, allleptons, 0.1, true, etaRanges, 20.0*GeV);
00043       addProjection(leptons, "leptons");
00044 
00045       // Leading neutrinos for Etmiss
00046       LeadingParticlesFinalState neutrinos(fs);
00047       neutrinos.addParticleIdPair(PID::NU_E);
00048       neutrinos.addParticleIdPair(PID::NU_MU);
00049       neutrinos.setLeadingOnly(true);
00050       addProjection(neutrinos, "neutrinos");
00051 
00052       // Input for the jets: "Neutrinos, electrons, and muons from decays of the
00053       // massive W boson were not used"
00054       VetoedFinalState veto;
00055       veto.addVetoOnThisFinalState(leptons);
00056       veto.addVetoOnThisFinalState(neutrinos);
00057       FastJets jets(veto, FastJets::ANTIKT, 0.4);
00058       jets.useInvisibles(true);
00059       addProjection(jets, "jets");
00060 
00061       for (size_t i = 0; i < 2; ++i) {
00062         _h_NjetIncl[i] = bookHisto1D(1, 1, i+1);
00063         _h_RatioNjetIncl[i] = bookScatter2D(2, 1, i+1);
00064         _h_FirstJetPt_1jet[i] = bookHisto1D(3, 1, i+1);
00065         _h_FirstJetPt_2jet[i] = bookHisto1D(4, 1, i+1);
00066         _h_FirstJetPt_3jet[i] = bookHisto1D(5, 1, i+1);
00067         _h_FirstJetPt_4jet[i] = bookHisto1D(6, 1, i+1);
00068         _h_SecondJetPt_2jet[i] = bookHisto1D(7, 1, i+1);
00069         _h_SecondJetPt_3jet[i] = bookHisto1D(8, 1, i+1);
00070         _h_SecondJetPt_4jet[i] = bookHisto1D(9, 1, i+1);
00071         _h_ThirdJetPt_3jet[i] = bookHisto1D(10, 1, i+1);
00072         _h_ThirdJetPt_4jet[i] = bookHisto1D(11, 1, i+1);
00073         _h_FourthJetPt_4jet[i] = bookHisto1D(12, 1, i+1);
00074         _h_Ht_1jet[i] = bookHisto1D(13, 1, i+1);
00075         _h_Ht_2jet[i] = bookHisto1D(14, 1, i+1);
00076         _h_Ht_3jet[i] = bookHisto1D(15, 1, i+1);
00077         _h_Ht_4jet[i] = bookHisto1D(16, 1, i+1);
00078         _h_Minv_2jet[i] = bookHisto1D(17, 1, i+1);
00079         _h_Minv_3jet[i] = bookHisto1D(18, 1, i+1);
00080         _h_Minv_4jet[i] = bookHisto1D(19, 1, i+1);
00081         _h_JetRapidity[i] = bookHisto1D(20, 1, i+1);
00082         _h_DeltaYElecJet[i] = bookHisto1D(21, 1, i+1);
00083         _h_SumYElecJet[i] = bookHisto1D(22, 1, i+1);
00084         _h_DeltaR_2jet[i] = bookHisto1D(23, 1, i+1);
00085         _h_DeltaY_2jet[i] = bookHisto1D(24, 1, i+1);
00086         _h_DeltaPhi_2jet[i] = bookHisto1D(25, 1, i+1);
00087       }
00088     }
00089 
00090 
00091     /// Perform the per-event analysis
00092     void analyze(const Event& event) {
00093       const double weight = event.weight();
00094 
00095       const vector<ClusteredLepton>& leptons = applyProjection<LeptonClusters>(event, "leptons").clusteredLeptons();
00096       Particles neutrinos = applyProjection<FinalState>(event, "neutrinos").particlesByPt();
00097 
00098       if (leptons.size() != 1 || (neutrinos.size() == 0)) {
00099         vetoEvent;
00100       }
00101 
00102       FourMomentum lepton = leptons[0].momentum();
00103       FourMomentum p_miss = neutrinos[0].momentum();
00104       if (p_miss.Et() < 25.0*GeV) {
00105         vetoEvent;
00106       }
00107 
00108       double mT = sqrt(2.0 * lepton.pT() * p_miss.Et() * (1.0 - cos( lepton.phi()-p_miss.phi()) ) );
00109       if (mT < 40.0*GeV) {
00110         vetoEvent;
00111       }
00112 
00113       double jetcuts[] = { 30.0*GeV, 20.0*GeV };
00114       const FastJets& jetpro = applyProjection<FastJets>(event, "jets");
00115 
00116       for (size_t i = 0; i < 2; ++i) {
00117         vector<FourMomentum> jets;
00118         double HT = lepton.pT() + p_miss.pT();
00119         foreach (const Jet& jet, jetpro.jetsByPt(jetcuts[i])) {
00120           if (fabs(jet.rapidity()) < 4.4 && deltaR(lepton, jet.momentum()) > 0.5) {
00121             jets.push_back(jet.momentum());
00122             HT += jet.pT();
00123           }
00124         }
00125 
00126         _h_NjetIncl[i]->fill(0.0, weight);
00127 
00128         // Njet>=1 observables
00129         if (jets.size() < 1) continue;
00130         _h_NjetIncl[i]->fill(1.0, weight);
00131         _h_FirstJetPt_1jet[i]->fill(jets[0].pT(), weight);
00132         _h_JetRapidity[i]->fill(jets[0].rapidity(), weight);
00133         _h_Ht_1jet[i]->fill(HT, weight);
00134         _h_DeltaYElecJet[i]->fill(lepton.rapidity()-jets[0].rapidity(), weight);
00135         _h_SumYElecJet[i]->fill(lepton.rapidity()+jets[0].rapidity(), weight);
00136 
00137         // Njet>=2 observables
00138         if (jets.size() < 2) continue;
00139         _h_NjetIncl[i]->fill(2.0, weight);
00140         _h_FirstJetPt_2jet[i]->fill(jets[0].pT(), weight);
00141         _h_SecondJetPt_2jet[i]->fill(jets[1].pT(), weight);
00142         _h_Ht_2jet[i]->fill(HT, weight);
00143         double m2_2jet = FourMomentum(jets[0]+jets[1]).mass2();
00144         _h_Minv_2jet[i]->fill(m2_2jet>0.0 ? sqrt(m2_2jet) : 0.0, weight);
00145         _h_DeltaR_2jet[i]->fill(deltaR(jets[0], jets[1]), weight);
00146         _h_DeltaY_2jet[i]->fill(jets[0].rapidity()-jets[1].rapidity(), weight);
00147         _h_DeltaPhi_2jet[i]->fill(deltaPhi(jets[0], jets[1]), weight);
00148 
00149         // Njet>=3 observables
00150         if (jets.size() < 3) continue;
00151         _h_NjetIncl[i]->fill(3.0, weight);
00152         _h_FirstJetPt_3jet[i]->fill(jets[0].pT(), weight);
00153         _h_SecondJetPt_3jet[i]->fill(jets[1].pT(), weight);
00154         _h_ThirdJetPt_3jet[i]->fill(jets[2].pT(), weight);
00155         _h_Ht_3jet[i]->fill(HT, weight);
00156         double m2_3jet = FourMomentum(jets[0]+jets[1]+jets[2]).mass2();
00157         _h_Minv_3jet[i]->fill(m2_3jet>0.0 ? sqrt(m2_3jet) : 0.0, weight);
00158 
00159         // Njet>=4 observables
00160         if (jets.size() < 4) continue;
00161         _h_NjetIncl[i]->fill(4.0, weight);
00162         _h_FirstJetPt_4jet[i]->fill(jets[0].pT(), weight);
00163         _h_SecondJetPt_4jet[i]->fill(jets[1].pT(), weight);
00164         _h_ThirdJetPt_4jet[i]->fill(jets[2].pT(), weight);
00165         _h_FourthJetPt_4jet[i]->fill(jets[3].pT(), weight);
00166         _h_Ht_4jet[i]->fill(HT, weight);
00167         double m2_4jet = FourMomentum(jets[0]+jets[1]+jets[2]+jets[3]).mass2();
00168         _h_Minv_4jet[i]->fill(m2_4jet>0.0 ? sqrt(m2_4jet) : 0.0, weight);
00169 
00170         // Njet>=5 observables
00171         if (jets.size() < 5) continue;
00172         _h_NjetIncl[i]->fill(5.0, weight);
00173       }
00174     }
00175 
00176 
00177     /// Normalise histograms etc., after the run
00178     void finalize() {
00179       for (size_t i = 0; i < 2; ++i) {
00180 
00181         // Construct jet multiplicity ratio
00182         for (size_t n = 1; n < _h_NjetIncl[i]->numBins(); ++n) {
00183           YODA::HistoBin1D& b0 = _h_NjetIncl[i]->bin(n-1);
00184           YODA::HistoBin1D& b1 = _h_NjetIncl[i]->bin(n);
00185           if (b0.height() == 0.0 || b1.height() == 0.0) continue;
00186           _h_RatioNjetIncl[i]->addPoint(n, b1.height()/b0.height(), 0,
00187                                         b1.height()/b0.height() * (b0.relErr() + b1.relErr()));
00188         }
00189 
00190         // Scale all histos to the cross section
00191         const double factor = crossSection()/sumOfWeights();
00192         scale(_h_DeltaPhi_2jet[i], factor);
00193         scale(_h_DeltaR_2jet[i], factor);
00194         scale(_h_DeltaY_2jet[i], factor);
00195         scale(_h_DeltaYElecJet[i], factor);
00196         scale(_h_FirstJetPt_1jet[i], factor);
00197         scale(_h_FirstJetPt_2jet[i], factor);
00198         scale(_h_FirstJetPt_3jet[i], factor);
00199         scale(_h_FirstJetPt_4jet[i], factor);
00200         scale(_h_FourthJetPt_4jet[i], factor);
00201         scale(_h_Ht_1jet[i], factor);
00202         scale(_h_Ht_2jet[i], factor);
00203         scale(_h_Ht_3jet[i], factor);
00204         scale(_h_Ht_4jet[i], factor);
00205         scale(_h_JetRapidity[i], factor);
00206         scale(_h_Minv_2jet[i], factor);
00207         scale(_h_Minv_3jet[i], factor);
00208         scale(_h_Minv_4jet[i], factor);
00209         scale(_h_NjetIncl[i], factor);
00210         scale(_h_SecondJetPt_2jet[i], factor);
00211         scale(_h_SecondJetPt_3jet[i], factor);
00212         scale(_h_SecondJetPt_4jet[i], factor);
00213         scale(_h_SumYElecJet[i], factor);
00214         scale(_h_ThirdJetPt_3jet[i], factor);
00215         scale(_h_ThirdJetPt_4jet[i], factor);
00216       }
00217     }
00218 
00219     //@}
00220 
00221 
00222   private:
00223 
00224     /// @name Histograms
00225     //@{
00226     Histo1DPtr _h_DeltaPhi_2jet[2];
00227     Histo1DPtr _h_DeltaR_2jet[2];
00228     Histo1DPtr _h_DeltaY_2jet[2];
00229     Histo1DPtr _h_DeltaYElecJet[2];
00230     Histo1DPtr _h_FirstJetPt_1jet[2];
00231     Histo1DPtr _h_FirstJetPt_2jet[2];
00232     Histo1DPtr _h_FirstJetPt_3jet[2];
00233     Histo1DPtr _h_FirstJetPt_4jet[2];
00234     Histo1DPtr _h_FourthJetPt_4jet[2];
00235     Histo1DPtr _h_Ht_1jet[2];
00236     Histo1DPtr _h_Ht_2jet[2];
00237     Histo1DPtr _h_Ht_3jet[2];
00238     Histo1DPtr _h_Ht_4jet[2];
00239     Histo1DPtr _h_JetRapidity[2];
00240     Histo1DPtr _h_Minv_2jet[2];
00241     Histo1DPtr _h_Minv_3jet[2];
00242     Histo1DPtr _h_Minv_4jet[2];
00243     Histo1DPtr _h_NjetIncl[2];
00244     Scatter2DPtr _h_RatioNjetIncl[2];
00245     Histo1DPtr _h_SecondJetPt_2jet[2];
00246     Histo1DPtr _h_SecondJetPt_3jet[2];
00247     Histo1DPtr _h_SecondJetPt_4jet[2];
00248     Histo1DPtr _h_SumYElecJet[2];
00249     Histo1DPtr _h_ThirdJetPt_3jet[2];
00250     Histo1DPtr _h_ThirdJetPt_4jet[2];
00251     //@}
00252 
00253 
00254   };
00255 
00256 
00257 
00258   // The hook for the plugin system
00259   DECLARE_RIVET_PLUGIN(ATLAS_2012_I1083318);
00260 
00261 }