Rivet analyses
b-jets search for supersymmetry with 0-leptons
Experiment: ATLAS (LHC)
Inspire ID: 1204184
Status: OBSOLETE
Authors: - Angela Chen
References: - ATLAS_2011_CONF_2011_098
Beams: p+ p+
Beam energies: (3500.0, 3500.0)GeV
Run details: - BSM signal events at 7000 GeV.
Search for supersymmmetric particles by ATLAS at 7 TeV in events with b-jets, large missing energy, and no leptons. Event counts in four signal regions (1 b-jet, meff > 500,GeV; 1 b-jet, meff > 700,GeV; 2 b-jets, meff > 500,GeV; 2 b-jets, meff > 700,GeV) are implemented as one-bin histograms. Histograms for missing transverse energy, effective mass, and pT of the leading jet are implemented for the 1 b-tag and 2 b-tag signal regions.
Source
code:ATLAS_2011_CONF_2011_098.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/ChargedFinalState.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/IdentifiedFinalState.hh"
#include "Rivet/Projections/VisibleFinalState.hh"
#include "Rivet/Tools/Random.hh"
namespace Rivet {
class ATLAS_2011_CONF_2011_098 : public Analysis {
public:
/// Constructor
ATLAS_2011_CONF_2011_098()
: Analysis("ATLAS_2011_CONF_2011_098"),
//debug variables
threeJA(0),
threeJB(0),
threeJC(0),
threeJD(0),
bj(0),
jets(0),
zerolept(0),
eTmisscut(0) { }
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// projection to find the electrons
IdentifiedFinalState elecs(Cuts::abseta < 2.47 && Cuts::pT > 20 * GeV);
elecs.acceptIdPair(PID::ELECTRON);
declare(elecs, "elecs");
// projection to find the muons
IdentifiedFinalState muons(Cuts::abseta < 2.4 && Cuts::pT > 10 * GeV);
muons.acceptIdPair(PID::MUON);
declare(muons, "muons");
/// Jet finder
declare(FastJets(FinalState(), JetAlg::ANTIKT, 0.4), "AntiKtJets04");
// all tracks (to do deltaR with leptons)
declare(ChargedFinalState(Cuts::abseta < 3.0), "cfs");
// for pTmiss
declare(VisibleFinalState(Cuts::abseta < 4.9), "vfs");
/// Book histograms
book(_count_threeJA, "count_threeJA", 1, 0., 1.);
book(_count_threeJB, "count_threeJB", 1, 0., 1.);
book(_count_threeJC, "count_threeJC", 1, 0., 1.);
book(_count_threeJD, "count_threeJD", 1, 0., 1.);
book(_hist_meff_1bjet, "meff_1bjet", 32, 0., 1600.);
book(_hist_eTmiss_1bjet, "eTmiss_1bjet", 6, 0., 600.);
book(_hist_pTj_1bjet, "pTjet_1bjet", 20, 0., 800.);
book(_hist_meff_2bjet, "meff_2bjet", 32, 0., 1600.);
book(_hist_eTmiss_2bjet, "eTmiss_2bjet", 6, 0., 600.);
book(_hist_pTj_2bjet, "pTjet_2bjet", 20, 0., 800.);
}
/// Perform the per-event analysis
void analyze(const Event& event) {
// Temp: calorimeter module failure with 10% acceptance loss;
// region unknown ==> randomly choose 10% of events to be vetoed
if (rand01() < 0.1) vetoEvent;
Jets tmp_cand_jets = apply<FastJets>(event, "AntiKtJets04")
.jetsByPt(Cuts::pT > 20 * GeV && Cuts::abseta < 2.8);
Particles cand_e = apply<IdentifiedFinalState>(event, "elecs").particlesByPt();
Particles cand_mu = apply<IdentifiedFinalState>(event, "muons").particlesByPt();
Particles chg_tracks = apply<ChargedFinalState>(event, "cfs").particles();
//cerr << "cand_e.size(): " << cand_e.size() << " cand_mu.size(): " << cand_mu.size() << '\n';
Jets cand_jets;
for (const Jet& jet : tmp_cand_jets) {
if (fabs(jet.eta()) >= 2.8)
cand_jets.push_back(jet);
else {
bool away_from_e = true;
for (const Particle& e : cand_e) {
if (deltaR(e.momentum(), jet.momentum()) <= 0.2) {
away_from_e = false;
break;
}
}
if (away_from_e) cand_jets.push_back(jet);
}
}
Particles cand_lept;
bool isolated_e;
for (const Particle& e : cand_e) {
isolated_e = true;
for (const Jet& jet : cand_jets) {
if (deltaR(e.momentum(), jet.momentum()) < 0.4) isolated_e = false;
}
if (isolated_e == true) cand_lept.push_back(e);
}
bool isolated_mu;
for (const Particle& mu : cand_mu) {
isolated_mu = true;
for (const Jet& jet : cand_jets) {
if (deltaR(mu.momentum(), jet.momentum()) < 0.4) isolated_mu = false;
}
if (isolated_mu == true) cand_lept.push_back(mu);
}
// pTmiss
Particles vfs_particles = apply<VisibleFinalState>(event, "vfs").particles();
FourMomentum pTmiss;
for (const Particle& p : vfs_particles) {
pTmiss -= p.momentum();
}
double eTmiss = pTmiss.pT();
// bjets
Jets bjets, recon_jets;
for (const Jet& j : cand_jets) {
if (fabs(j.eta()) <= 2.8) {
recon_jets.push_back(j);
if (fabs(j.eta()) <= 2.5 && j.perp() > 50. && j.bTagged() && rand01() < 0.5) bjets.push_back(j);
}
}
if (bjets.empty()) {
MSG_DEBUG("No b-jet axes in acceptance");
vetoEvent;
}
++bj;
// Jets event selection
if (recon_jets.size() < 3) vetoEvent;
if (recon_jets[0].pT() <= 130 * GeV) vetoEvent;
if (recon_jets[1].pT() <= 50 * GeV || recon_jets[2].pT() <= 50 * GeV) vetoEvent;
++jets;
// eTmiss cut
if (eTmiss <= 130 * GeV) vetoEvent;
++eTmisscut;
// 0-lepton requirement
if (!cand_lept.empty()) vetoEvent;
++zerolept;
// m_eff cut
double m_eff = eTmiss + recon_jets[0].pT() + recon_jets[1].pT() + recon_jets[2].pT();
if (eTmiss / m_eff <= 0.25) vetoEvent;
// min_dPhi
double min_dPhi = 999.999;
for (int i = 0; i < 3; ++i) {
double dPhi = deltaPhi(pTmiss.phi(), recon_jets[i].phi());
min_dPhi = min(min_dPhi, dPhi);
}
if (min_dPhi <= 0.4) vetoEvent;
// ==================== FILL ====================
// 1 bjet
if (bjets.size() >= 1) {
_hist_meff_1bjet->fill(m_eff);
_hist_eTmiss_1bjet->fill(eTmiss);
_hist_pTj_1bjet->fill(recon_jets[0].pT());
// 3JA region
if (m_eff > 200 * GeV) {
++threeJA;
_count_threeJA->fill(0.5);
}
// 3JB region
if (m_eff > 700 * GeV) {
++threeJB;
_count_threeJB->fill(0.5);
}
}
// 2 bjets
if (bjets.size() >= 2) {
_hist_meff_2bjet->fill(m_eff);
_hist_eTmiss_2bjet->fill(eTmiss);
_hist_pTj_2bjet->fill(recon_jets[0].pT());
// 3JC region
if (m_eff > 500 * GeV) {
++threeJC;
_count_threeJC->fill(0.5);
}
// 3JD region
if (m_eff > 700 * GeV) {
++threeJD;
_count_threeJD->fill(0.5);
}
}
}
/// @}
void finalize() {
scale(_hist_meff_1bjet, 50. * 830. * crossSection() / picobarn / sumOfWeights());
scale(_hist_eTmiss_1bjet, 100. * 830. * crossSection() / picobarn / sumOfWeights());
scale(_hist_pTj_1bjet, 40. * 830. * crossSection() / picobarn / sumOfWeights());
scale(_hist_meff_2bjet, 50. * 830. * crossSection() / picobarn / sumOfWeights());
scale(_hist_eTmiss_2bjet, 100. * 830. * crossSection() / picobarn / sumOfWeights());
scale(_hist_pTj_2bjet, 40. * 830. * crossSection() / picobarn / sumOfWeights());
// cerr<< '\n'<<'\n'
// << "Saw "
// << bj << " events aft bjets cut, "
// << jets << " events aft jet cuts, "
// << eTmisscut << " events aft eTmiss cut, "
// << zerolept << " events after 0-lept cut. "
// << '\n'
// << threeJA << " 3JA events, "
// << threeJB << " 3JB events, "
// << threeJC << " 3JC events, "
// << threeJD << " 3JD events. "
// << '\n'
// ;
}
private:
/// @name Histograms
/// @{
Histo1DPtr _count_threeJA;
Histo1DPtr _count_threeJB;
Histo1DPtr _count_threeJC;
Histo1DPtr _count_threeJD;
Histo1DPtr _hist_meff_1bjet;
Histo1DPtr _hist_eTmiss_1bjet;
Histo1DPtr _hist_pTj_1bjet;
Histo1DPtr _hist_meff_2bjet;
Histo1DPtr _hist_eTmiss_2bjet;
Histo1DPtr _hist_pTj_2bjet;
/// @}
// debug variables
int threeJA;
int threeJB;
int threeJC;
int threeJD;
int bj;
int jets;
int zerolept;
int eTmisscut;
};
RIVET_DECLARE_PLUGIN(ATLAS_2011_CONF_2011_098);
}