Rivet analyses
Fiducial single-top + photon cross-section measurement at 13 TeV
Experiment: CMS (LHC)
Inspire ID: 1686000
Status: VALIDATED
Authors: - cms-pag-conveners-smp@cern.ch - Andy Buckley
References: - Expt page: CMS-TOP-17-016, CERN-EP-2018-206 - Phys.Rev.Lett. 121 (2018) - DOI 10.1103/PhysRevLett.121.221802 - arXiv: 1808.02913 - http://cms-results.web.cern.ch/cms-results/public-results/publications/TOP-17-016/index.html
Beams: p+ p+
Beam energies: (6500.0, 6500.0)GeV
Run details: - pp single-top + photon production at $\sqrt{s} = 13$ TeV
The first evidence of events consistent with the production of a single top quark in association with a photon is reported. The analysis is based on proton-proton collisions at $\sqrt{s}$=13 TeV and recorded by the CMS experiment in 2016, corresponding to an integrated luminosity of 35.9 fb−1. Events are selected by requiring the presence of a muon, a photon, an imbalance in transverse momentum from an undetected neutrino, and at least two jets of which exactly one is identified as associated with the hadronization of a b quark. A multivariate discriminant based on topological and kinematic event properties is employed to separate signal from background processes. An excess above the background-only hypothesis is observed, with a significance of 4.4 standard deviations. A fiducial cross section is measured for isolated photons with transverse momentum greater than 25 GeV in the central region of the detector. The measured product of the cross section and branching fraction is 115 ± 17 (stat) ±30 (syst) fb, consistent with the Standard Model prediction. Warning: the fiducial definition in this analysis relies on generation-level cuts and cannot be exactly reproduced.
Source
code:CMS_2018_I1686000.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/LeptonFinder.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/MergedFinalState.hh"
#include "Rivet/Projections/IdentifiedFinalState.hh"
#include "Rivet/Projections/MissingMomentum.hh"
#include "Rivet/Projections/PartonicTops.hh"
#include "Rivet/Projections/PromptFinalState.hh"
namespace Rivet {
/// Fiducial single-top + photon cross-section measurement at 13 TeV
class CMS_2018_I1686000 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2018_I1686000);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// Leptons
declare(LeptonFinder(Cuts::abseta < 2.4 && Cuts::pT > 26*GeV, 0.1), "Leptons");
// Jets
declare(FastJets(FinalState(Cuts::abseta < 5), JetAlg::ANTIKT, 0.4), "Jets");
// Photons
declare(PromptFinalState(Cuts::pid == PID::PHOTON && Cuts::pT > 25*GeV && Cuts::abseta < 1.44), "Photons");
// MET
declare(MissingMomentum(FinalState(Cuts::abseta < 5)), "MET");
// Book xsec counter
book(_c_xsec_fid, "xsec");
}
/// Perform the per-event analysis
void analyze(const Event& event) {
// // Find at least 2 jets, one b-tagged
// const Jets jets = apply<JetFinder>(event, "Jets").jetsByPt(Cuts::abseta < 4.7 && Cuts::pT > 40*GeV);
// Jets bjets, ljets;
// for (const Jet& j : jets)
// ((j.abseta() < 2.5 && j.bTagged()) ? bjets : ljets) += j;
// if (bjets.empty() || ljets.empty()) vetoEvent;
// const Jet& bjet = bjets[0];
// const Jet& ljet = ljets[0];
// // Require exactly one isolated lepton, and it has to be a muon
// const Particles& leps = apply<FinalState>(event, "Leptons").particlesByPt();
// const Particles isoleps = discardIfAnyDeltaRLess(leps, jets, 0.3);
// if (isoleps.size() != 1 || isoleps[0].abspid() != PID::MUON) vetoEvent;
// const Particle& muon = isoleps[0];
// // Require exactly one isolated photon
// const Particles& photons = apply<FinalState>(event, "Photons").particlesByPt();
// const Particles muisophotons = discard(photons, deltaRLess(muon,0.5));
// const Particles isophotons = discardIfAnyDeltaRLess(muisophotons, Jets{bjet,ljet}, 0.5);
// if (isophotons.size() != 1) vetoEvent;
// // Require 30 GeV of missing ET
// const double met = apply<MissingMomentum>(event, "MET").met();
// if (met < 30*GeV) vetoEvent;
// Find light jets
const Jets jets = apply<JetFinder>(event, "Jets").jetsByPt();
const Jets ljets = discard(jets, [](const Jet& j){ return j.abseta() < 2.5 && j.bTagged(); } );
// Require a photon, isolated from the light jet
Particles photons = apply<FinalState>(event, "Photons").particlesByPt();
if (!ljets.empty()) idiscard(photons, deltaRLess(ljets[0], 0.5));
if (photons.empty()) vetoEvent;
// Fill counter
_c_xsec_fid->fill();
}
/// Normalise histograms etc., after the run
void finalize() {
const double BRmu = 0.13 + 0.13*0.17; //< decay BR direct to a muon, and to a muon via a tau
scale(_c_xsec_fid, BRmu*crossSection()/femtobarn/sumOfWeights());
}
/// @}
/// Counter
CounterPtr _c_xsec_fid;
};
RIVET_DECLARE_PLUGIN(CMS_2018_I1686000);
}