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