ATLAS_2011_S9212353.cc
Go to the documentation of this file.
00001 // -*- C++ -*- 00002 #include "Rivet/Analysis.hh" 00003 #include "Rivet/Tools/BinnedHistogram.hh" 00004 #include "Rivet/Projections/FinalState.hh" 00005 #include "Rivet/Projections/ChargedFinalState.hh" 00006 #include "Rivet/Projections/VisibleFinalState.hh" 00007 #include "Rivet/Projections/IdentifiedFinalState.hh" 00008 #include "Rivet/Projections/VetoedFinalState.hh" 00009 #include "Rivet/Projections/FastJets.hh" 00010 00011 namespace Rivet { 00012 00013 00014 class ATLAS_2011_S9212353 : public Analysis { 00015 public: 00016 00017 /// Constructor 00018 ATLAS_2011_S9212353() 00019 : Analysis("ATLAS_2011_S9212353") 00020 { } 00021 00022 00023 /// @name Analysis methods 00024 //@{ 00025 00026 /// Book histograms and initialize projections before the run 00027 void init() { 00028 00029 // projection to find the electrons 00030 IdentifiedFinalState elecs(Cuts::abseta < 2.47 && Cuts::pT > 20*GeV); 00031 elecs.acceptIdPair(PID::ELECTRON); 00032 addProjection(elecs, "elecs"); 00033 00034 00035 // veto region electrons (from 2010 arXiv:1102.2357v2) 00036 Cut vetocut = Cuts::absetaIn(1.37, 1.52); 00037 IdentifiedFinalState veto_elecs(vetocut && Cuts::pT > 10*GeV); 00038 veto_elecs.acceptIdPair(PID::ELECTRON); 00039 addProjection(veto_elecs, "veto_elecs"); 00040 00041 00042 // projection to find the muons 00043 IdentifiedFinalState muons(Cuts::abseta < 2.4 && Cuts::pT > 10*GeV); 00044 muons.acceptIdPair(PID::MUON); 00045 addProjection(muons, "muons"); 00046 00047 00048 // Jet finder 00049 VetoedFinalState vfs; 00050 vfs.addVetoPairId(PID::MUON); 00051 addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); 00052 00053 00054 // all tracks (to do deltaR with leptons) 00055 addProjection(ChargedFinalState(Cuts::abseta < 3 && Cuts::pT > 0.5*GeV), "cfs"); 00056 00057 00058 // for pTmiss 00059 addProjection(VisibleFinalState(Cuts::abseta < 4.5),"vfs"); 00060 00061 00062 /// Book histograms 00063 _3jl_count_mu_channel = bookHisto1D("3jl_count_muon_channel", 1, 0., 1.); 00064 _3jl_count_e_channel = bookHisto1D("3jl_count_electron_channel", 1, 0., 1.); 00065 _3jt_count_mu_channel = bookHisto1D("3jt_count_muon_channel", 1, 0., 1.); 00066 _3jt_count_e_channel = bookHisto1D("3jt_count_electron_channel", 1, 0., 1.); 00067 _3j_hist_eTmiss_e = bookHisto1D("3j_Et_miss_e", 65, 0., 650.); 00068 _3j_hist_eTmiss_mu = bookHisto1D("3j_Et_miss_mu", 65, 0., 650.); 00069 _3j_hist_mT_e = bookHisto1D("3j_mT_e", 58, 0., 580.); 00070 _3j_hist_mT_mu = bookHisto1D("3j_mT_mu", 58, 0., 580.); 00071 _3j_hist_m_eff_e = bookHisto1D("3j_m_eff_e", 46, 0., 2300.); 00072 _3j_hist_m_eff_mu = bookHisto1D("3j_m_eff_mu", 46, 0., 2300.); 00073 _3jl_hist_m_eff_e_final = bookHisto1D("3jl_m_eff_e_final", 15, 0., 1500.); 00074 _3jl_hist_m_eff_mu_final = bookHisto1D("3jl_m_eff_mu_final", 15, 0., 1500.); 00075 _3jt_hist_m_eff_e_final = bookHisto1D("3jt_m_eff_e_final", 15, 0., 1500.); 00076 _3jt_hist_m_eff_mu_final = bookHisto1D("3jt_m_eff_mu_final", 15, 0., 1500.); 00077 00078 00079 _4jl_count_mu_channel = bookHisto1D("4jl_count_muon_channel", 1, 0., 1.); 00080 _4jl_count_e_channel = bookHisto1D("4jl_count_electron_channel", 1, 0., 1.); 00081 _4jt_count_mu_channel = bookHisto1D("4jt_count_muon_channel", 1, 0., 1.); 00082 _4jt_count_e_channel = bookHisto1D("4jt_count_electron_channel", 1, 0., 1.); 00083 _4j_hist_eTmiss_e = bookHisto1D("4j_Et_miss_e", 65, 0., 650.); 00084 _4j_hist_eTmiss_mu = bookHisto1D("4j_Et_miss_mu", 65, 0., 650.); 00085 _4j_hist_mT_e = bookHisto1D("4j_mT_e", 58, 0., 580.); 00086 _4j_hist_mT_mu = bookHisto1D("4j_mT_mu", 58, 0., 580.); 00087 _4j_hist_m_eff_e = bookHisto1D("4j_m_eff_e", 46, 0., 2300.); 00088 _4j_hist_m_eff_mu = bookHisto1D("4j_m_eff_mu", 46, 0., 2300.); 00089 _4jl_hist_m_eff_e_final = bookHisto1D("4jl_m_eff_e_final", 15, 0., 1500.); 00090 _4jl_hist_m_eff_mu_final = bookHisto1D("4jl_m_eff_mu_final", 15, 0., 1500.); 00091 _4jt_hist_m_eff_e_final = bookHisto1D("4jt_m_eff_e_final", 15, 0., 1500.); 00092 _4jt_hist_m_eff_mu_final = bookHisto1D("4jt_m_eff_mu_final", 15, 0., 1500.); 00093 00094 00095 } 00096 00097 00098 00099 /// Perform the per-event analysis 00100 void analyze(const Event& event) { 00101 const double weight = event.weight(); 00102 Particles veto_e 00103 = applyProjection<IdentifiedFinalState>(event, "veto_elecs").particles(); 00104 if ( ! veto_e.empty() ) { 00105 MSG_DEBUG("electrons in veto region"); 00106 vetoEvent; 00107 } 00108 00109 Jets cand_jets; 00110 foreach ( const Jet& jet, 00111 applyProjection<FastJets>(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { 00112 if ( fabs( jet.eta() ) < 2.8 ) { 00113 cand_jets.push_back(jet); 00114 } 00115 } 00116 00117 Particles candtemp_e = 00118 applyProjection<IdentifiedFinalState>(event, "elecs").particlesByPt(); 00119 Particles candtemp_mu = 00120 applyProjection<IdentifiedFinalState>(event,"muons").particlesByPt(); 00121 Particles chg_tracks = 00122 applyProjection<ChargedFinalState>(event, "cfs").particles(); 00123 Particles cand_mu; 00124 Particles cand_e; 00125 00126 00127 // pTcone around muon track 00128 foreach ( const Particle & mu, candtemp_mu ) { 00129 double pTinCone = -mu.pT(); 00130 foreach ( const Particle & track, chg_tracks ) { 00131 if ( deltaR(mu.momentum(),track.momentum()) < 0.2 ) 00132 pTinCone += track.pT(); 00133 } 00134 if ( pTinCone < 1.8*GeV ) 00135 cand_mu.push_back(mu); 00136 } 00137 00138 // pTcone around electron 00139 foreach ( const Particle e, candtemp_e ) { 00140 double pTinCone = -e.pT(); 00141 foreach ( const Particle & track, chg_tracks ) { 00142 if ( deltaR(e.momentum(),track.momentum()) < 0.2 ) 00143 pTinCone += track.pT(); 00144 } 00145 if ( pTinCone < 0.1 * e.pT() ) 00146 cand_e.push_back(e); 00147 } 00148 00149 // discard jets that overlap with electrons 00150 Jets recon_jets; 00151 foreach ( const Jet& jet, cand_jets ) { 00152 bool away_from_e = true; 00153 foreach ( const Particle & e, cand_e ) { 00154 if ( deltaR(e.momentum(),jet.momentum()) < 0.2 ) { 00155 away_from_e = false; 00156 break; 00157 } 00158 } 00159 if ( away_from_e ) 00160 recon_jets.push_back( jet ); 00161 } 00162 00163 // only consider leptons far from jet 00164 Particles recon_e, recon_mu; 00165 foreach ( const Particle & e, cand_e ) { 00166 bool e_near_jet = false; 00167 foreach ( const Jet& jet, recon_jets ) { 00168 if ( deltaR(e.momentum(),jet.momentum()) < 0.4 && 00169 deltaR(e.momentum(),jet.momentum()) > 0.2 ) 00170 e_near_jet = true; 00171 } 00172 if ( ! e_near_jet ) 00173 recon_e.push_back( e ); 00174 } 00175 00176 foreach ( const Particle & mu, cand_mu ) { 00177 bool mu_near_jet = false; 00178 foreach ( const Jet& jet, recon_jets ) { 00179 if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) 00180 mu_near_jet = true; 00181 } 00182 if ( ! mu_near_jet ) 00183 recon_mu.push_back( mu ); 00184 } 00185 00186 // pTmiss 00187 Particles vfs_particles 00188 = applyProjection<VisibleFinalState>(event, "vfs").particles(); 00189 FourMomentum pTmiss; 00190 foreach ( const Particle & p, vfs_particles ) { 00191 pTmiss -= p.momentum(); 00192 } 00193 double eTmiss = pTmiss.pT(); 00194 00195 00196 // ==================== observables ==================== 00197 00198 00199 // Njets 00200 int Njets = 0; 00201 double pTmiss_phi = pTmiss.phi(); 00202 foreach ( const Jet& jet, recon_jets ) { 00203 if ( jet.abseta() < 2.8 ) 00204 Njets+=1; 00205 } 00206 if ( Njets < 3 ) { 00207 MSG_DEBUG("Only " << Njets << " jets w/ eta<2.8 left"); 00208 vetoEvent; 00209 } 00210 00211 Particles lepton; 00212 if ( recon_mu.empty() && recon_e.empty() ) { 00213 MSG_DEBUG("No leptons"); 00214 vetoEvent; 00215 } 00216 else { 00217 foreach ( const Particle & mu, recon_mu ) 00218 lepton.push_back(mu); 00219 foreach ( const Particle & e, recon_e ) 00220 lepton.push_back(e); 00221 } 00222 00223 00224 std::sort(lepton.begin(), lepton.end(), cmpMomByPt); 00225 00226 double e_id = 11; 00227 double mu_id = 13; 00228 00229 // one hard leading lepton cut 00230 if ( lepton[0].abspid() == e_id && 00231 lepton[0].pT() <= 25*GeV ) { 00232 vetoEvent; 00233 } 00234 else if ( lepton[0].abspid() == mu_id && 00235 lepton[0].pT() <= 20*GeV ) { 00236 vetoEvent; 00237 } 00238 00239 // exactly one hard leading lepton cut 00240 if(lepton.size()>1) { 00241 if ( lepton[1].abspid() == e_id && 00242 lepton[1].pT() > 20*GeV ) { 00243 vetoEvent; 00244 } 00245 else if ( lepton[1].abspid() == mu_id && 00246 lepton[1].pT() > 10*GeV ) { 00247 vetoEvent; 00248 } 00249 } 00250 00251 // 3JL 00252 if ( recon_jets[0].pT() > 60.0*GeV && 00253 recon_jets[1].pT() > 25.0*GeV && 00254 recon_jets[2].pT() > 25.0*GeV && 00255 deltaPhi( pTmiss_phi, recon_jets[0].phi() ) > 0.2 && 00256 deltaPhi( pTmiss_phi, recon_jets[1].phi() ) > 0.2 && 00257 deltaPhi( pTmiss_phi, recon_jets[2].phi() ) > 0.2 ) { 00258 00259 FourMomentum pT_l = lepton[0].momentum(); 00260 double dPhi = deltaPhi( pT_l.phi(), pTmiss_phi); 00261 double mT = sqrt( 2 * pT_l.pT() * eTmiss * (1 - cos(dPhi)) ); 00262 double m_eff = eTmiss + pT_l.pT() 00263 + recon_jets[0].pT() 00264 + recon_jets[1].pT() 00265 + recon_jets[2].pT(); 00266 00267 if ( lepton[0].abspid() == e_id ) { 00268 _3j_hist_mT_e->fill(mT, weight); 00269 _3j_hist_eTmiss_e->fill(eTmiss, weight); 00270 _3j_hist_m_eff_e->fill(m_eff, weight); 00271 if ( mT > 100*GeV && eTmiss > 125*GeV ) { 00272 _3jl_hist_m_eff_e_final->fill(m_eff, weight); 00273 if ( m_eff > 500*GeV && eTmiss > 0.25*m_eff ) { 00274 _3jl_count_e_channel->fill(0.5,weight); 00275 } 00276 } 00277 } 00278 00279 else if ( lepton[0].abspid() == mu_id ) { 00280 _3j_hist_mT_mu->fill(mT, weight); 00281 _3j_hist_eTmiss_mu->fill(eTmiss, weight); 00282 _3j_hist_m_eff_mu->fill(m_eff, weight); 00283 if ( mT > 100*GeV && eTmiss > 125*GeV ) { 00284 _3jl_hist_m_eff_mu_final->fill(m_eff, weight); 00285 if ( m_eff > 500*GeV && eTmiss > 0.25*m_eff ) { 00286 _3jl_count_mu_channel->fill(0.5,weight); 00287 } 00288 } 00289 } 00290 00291 } 00292 00293 // 3JT 00294 if ( recon_jets[0].pT() > 80.0*GeV && 00295 recon_jets[1].pT() > 25.0*GeV && 00296 recon_jets[2].pT() > 25.0*GeV && 00297 deltaPhi( pTmiss_phi, recon_jets[0].phi() ) > 0.2 && 00298 deltaPhi( pTmiss_phi, recon_jets[1].phi() ) > 0.2 && 00299 deltaPhi( pTmiss_phi, recon_jets[2].phi() ) > 0.2 ) { 00300 00301 FourMomentum pT_l = lepton[0].momentum(); 00302 double dPhi = deltaPhi( pT_l.phi(), pTmiss_phi); 00303 double mT = sqrt( 2 * pT_l.pT() * eTmiss * (1 - cos(dPhi)) ); 00304 double m_eff = eTmiss + pT_l.pT() 00305 + recon_jets[0].pT() 00306 + recon_jets[1].pT() 00307 + recon_jets[2].pT(); 00308 00309 00310 if ( lepton[0].abspid() == e_id ) { 00311 if ( mT > 100*GeV && eTmiss > 240*GeV ) { 00312 _3jt_hist_m_eff_e_final->fill(m_eff, weight); 00313 if ( m_eff > 600*GeV && eTmiss > 0.15*m_eff ) { 00314 _3jt_count_e_channel->fill(0.5,weight); 00315 } 00316 } 00317 } 00318 00319 else if ( lepton[0].abspid() == mu_id ) { 00320 if ( mT > 100*GeV && eTmiss > 240*GeV ) { 00321 _3jt_hist_m_eff_mu_final->fill(m_eff, weight); 00322 if ( m_eff > 600*GeV && eTmiss > 0.15*m_eff ) { 00323 _3jt_count_mu_channel->fill(0.5,weight); 00324 } 00325 } 00326 } 00327 00328 } 00329 00330 if ( Njets < 4 ) { 00331 MSG_DEBUG("Only " << Njets << " jets w/ eta<2.8 left"); 00332 vetoEvent; 00333 } 00334 00335 00336 00337 // 4JL 00338 if ( recon_jets[0].pT() > 60.0*GeV && 00339 recon_jets[1].pT() > 25.0*GeV && 00340 recon_jets[2].pT() > 25.0*GeV && 00341 recon_jets[3].pT() > 25.0*GeV && 00342 deltaPhi( pTmiss_phi, recon_jets[0].phi() ) > 0.2 && 00343 deltaPhi( pTmiss_phi, recon_jets[1].phi() ) > 0.2 && 00344 deltaPhi( pTmiss_phi, recon_jets[2].phi() ) > 0.2 && 00345 deltaPhi( pTmiss_phi, recon_jets[3].phi() ) > 0.2 ) { 00346 00347 FourMomentum pT_l = lepton[0].momentum(); 00348 double dPhi = deltaPhi( pT_l.phi(), pTmiss_phi); 00349 double mT = sqrt( 2 * pT_l.pT() * eTmiss * (1 - cos(dPhi)) ); 00350 double m_eff = eTmiss + pT_l.pT() 00351 + recon_jets[0].pT() 00352 + recon_jets[1].pT() 00353 + recon_jets[2].pT() 00354 + recon_jets[3].pT(); 00355 00356 00357 if ( lepton[0].abspid() == e_id ) { 00358 _4j_hist_mT_e->fill(mT, weight); 00359 _4j_hist_eTmiss_e->fill(eTmiss, weight); 00360 _4j_hist_m_eff_e->fill(m_eff, weight); 00361 if ( mT > 100*GeV && eTmiss > 140*GeV ) { 00362 _4jl_hist_m_eff_e_final->fill(m_eff, weight); 00363 if ( m_eff > 300*GeV && eTmiss > 0.3*m_eff ) { 00364 _4jl_count_e_channel->fill(0.5,weight); 00365 } 00366 } 00367 } 00368 00369 // Muon channel signal region 00370 else if ( lepton[0].abspid() == mu_id ) { 00371 _4j_hist_mT_mu->fill(mT, weight); 00372 _4j_hist_eTmiss_mu->fill(eTmiss, weight); 00373 _4j_hist_m_eff_mu->fill(m_eff, weight); 00374 if ( mT > 100*GeV && eTmiss > 140*GeV ) { 00375 _4jl_hist_m_eff_mu_final->fill(m_eff, weight); 00376 if ( m_eff > 300*GeV && eTmiss > 0.3*m_eff ) { 00377 _4jl_count_mu_channel->fill(0.5,weight); 00378 } 00379 } 00380 } 00381 00382 } 00383 00384 // 4JT 00385 if ( recon_jets[0].pT() > 60.0*GeV && 00386 recon_jets[1].pT() > 40.0*GeV && 00387 recon_jets[2].pT() > 40.0*GeV && 00388 recon_jets[3].pT() > 40.0*GeV && 00389 deltaPhi( pTmiss_phi, recon_jets[0].phi() ) > 0.2 && 00390 deltaPhi( pTmiss_phi, recon_jets[1].phi() ) > 0.2 && 00391 deltaPhi( pTmiss_phi, recon_jets[2].phi() ) > 0.2 && 00392 deltaPhi( pTmiss_phi, recon_jets[3].phi() ) > 0.2 ) { 00393 00394 FourMomentum pT_l = lepton[0].momentum(); 00395 00396 double m_eff = eTmiss + pT_l.pT() 00397 + recon_jets[0].pT() 00398 + recon_jets[1].pT() 00399 + recon_jets[2].pT() 00400 + recon_jets[3].pT(); 00401 00402 00403 if ( lepton[0].abspid() == e_id ) { 00404 if ( eTmiss > 200*GeV ) { 00405 _4jt_hist_m_eff_e_final->fill(m_eff, weight); 00406 if ( m_eff > 500*GeV && eTmiss > 0.15*m_eff ) { 00407 _4jt_count_e_channel->fill(0.5,weight); 00408 } 00409 } 00410 } 00411 00412 // Muon channel signal region 00413 else if ( lepton[0].abspid() == mu_id ) { 00414 if ( eTmiss > 200*GeV ) { 00415 _4jt_hist_m_eff_mu_final->fill(m_eff, weight); 00416 if ( m_eff > 500*GeV && eTmiss > 0.15*m_eff ) { 00417 _4jt_count_mu_channel->fill(0.5,weight); 00418 } 00419 } 00420 } 00421 00422 } 00423 } 00424 00425 //@} 00426 00427 00428 void finalize() { 00429 00430 scale( _3j_hist_eTmiss_e, 10. * 1.04e3 * crossSection()/sumOfWeights() ); 00431 scale( _3j_hist_eTmiss_mu, 10. * 1.04e3 * crossSection()/sumOfWeights() ); 00432 scale( _3j_hist_m_eff_e, 50. * 1.04e3 * crossSection()/sumOfWeights() ); 00433 scale( _3j_hist_m_eff_mu, 50. * 1.04e3 * crossSection()/sumOfWeights() ); 00434 scale( _3j_hist_mT_e, 10. * 1.04e3 * crossSection()/sumOfWeights() ); 00435 scale( _3j_hist_mT_mu, 10. * 1.04e3 * crossSection()/sumOfWeights() ); 00436 scale( _3jl_hist_m_eff_e_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); 00437 scale( _3jl_hist_m_eff_mu_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); 00438 scale( _3jt_hist_m_eff_e_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); 00439 scale( _3jt_hist_m_eff_mu_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); 00440 00441 scale( _4j_hist_eTmiss_e, 10. * 1.04e3 * crossSection()/sumOfWeights() ); 00442 scale( _4j_hist_eTmiss_mu, 10. * 1.04e3 * crossSection()/sumOfWeights() ); 00443 scale( _4j_hist_m_eff_e, 50. * 1.04e3 * crossSection()/sumOfWeights() ); 00444 scale( _4j_hist_m_eff_mu, 50. * 1.04e3 * crossSection()/sumOfWeights() ); 00445 scale( _4j_hist_mT_e, 10. * 1.04e3 * crossSection()/sumOfWeights() ); 00446 scale( _4j_hist_mT_mu, 10. * 1.04e3 * crossSection()/sumOfWeights() ); 00447 scale( _4jl_hist_m_eff_e_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); 00448 scale( _4jl_hist_m_eff_mu_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); 00449 scale( _4jt_hist_m_eff_e_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); 00450 scale( _4jt_hist_m_eff_mu_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); 00451 00452 00453 } 00454 00455 private: 00456 00457 /// @name Histograms 00458 //@{ 00459 Histo1DPtr _3jl_count_e_channel; 00460 Histo1DPtr _3jl_count_mu_channel; 00461 Histo1DPtr _3jt_count_e_channel; 00462 Histo1DPtr _3jt_count_mu_channel; 00463 Histo1DPtr _3j_hist_eTmiss_e; 00464 Histo1DPtr _3j_hist_eTmiss_mu; 00465 Histo1DPtr _3j_hist_m_eff_e; 00466 Histo1DPtr _3j_hist_m_eff_mu; 00467 Histo1DPtr _3j_hist_mT_e; 00468 Histo1DPtr _3j_hist_mT_mu; 00469 Histo1DPtr _3jl_hist_m_eff_e_final; 00470 Histo1DPtr _3jl_hist_m_eff_mu_final; 00471 Histo1DPtr _3jt_hist_m_eff_e_final; 00472 Histo1DPtr _3jt_hist_m_eff_mu_final; 00473 00474 00475 00476 Histo1DPtr _4jl_count_e_channel; 00477 Histo1DPtr _4jl_count_mu_channel; 00478 Histo1DPtr _4jt_count_e_channel; 00479 Histo1DPtr _4jt_count_mu_channel; 00480 Histo1DPtr _4j_hist_eTmiss_e; 00481 Histo1DPtr _4j_hist_eTmiss_mu; 00482 Histo1DPtr _4j_hist_m_eff_e; 00483 Histo1DPtr _4j_hist_m_eff_mu; 00484 Histo1DPtr _4j_hist_mT_e; 00485 Histo1DPtr _4j_hist_mT_mu; 00486 Histo1DPtr _4jl_hist_m_eff_e_final; 00487 Histo1DPtr _4jl_hist_m_eff_mu_final; 00488 Histo1DPtr _4jt_hist_m_eff_e_final; 00489 Histo1DPtr _4jt_hist_m_eff_mu_final; 00490 00491 00492 //@} 00493 00494 00495 }; 00496 00497 00498 00499 // The hook for the plugin system 00500 DECLARE_RIVET_PLUGIN(ATLAS_2011_S9212353); 00501 00502 } Generated on Thu Mar 10 2016 08:29:46 for The Rivet MC analysis system by ![]() |