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 } Generated on Fri Dec 21 2012 15:03:39 for The Rivet MC analysis system by ![]() |