rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CMS_2018_I1686000

Fiducial single-top + photon cross-section measurement at 13 TeV
Experiment: CMS (LHC)
Inspire ID: 1682495
Status: VALIDATED
Authors:
  • cms-pag-conveners-smp@cern.ch
  • Andy Buckley
References:
  • Public 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 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 \pm 17 \text{ (stat)} \pm 30 \text{ (syst)} \mathrm{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
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/LeptonFinder.hh"
  4#include "Rivet/Projections/FastJets.hh"
  5#include "Rivet/Projections/MergedFinalState.hh"
  6#include "Rivet/Projections/IdentifiedFinalState.hh"
  7#include "Rivet/Projections/MissingMomentum.hh"
  8#include "Rivet/Projections/PartonicTops.hh"
  9#include "Rivet/Projections/PromptFinalState.hh"
 10
 11namespace Rivet {
 12
 13
 14  /// Fiducial single-top + photon cross-section measurement at 13 TeV
 15  class CMS_2018_I1686000 : public Analysis {
 16  public:
 17
 18    /// Constructor
 19    RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2018_I1686000);
 20
 21
 22    /// @name Analysis methods
 23    /// @{
 24
 25    /// Book histograms and initialise projections before the run
 26    void init() {
 27
 28      // Leptons
 29      declare(LeptonFinder(Cuts::abseta < 2.4 && Cuts::pT > 26*GeV, 0.1), "Leptons");
 30
 31      // Jets
 32      declare(FastJets(FinalState(Cuts::abseta < 5), JetAlg::ANTIKT, 0.4), "Jets");
 33
 34      // Photons
 35      declare(PromptFinalState(Cuts::pid == PID::PHOTON && Cuts::pT > 25*GeV && Cuts::abseta < 1.44), "Photons");
 36
 37      // MET
 38      declare(MissingMomentum(FinalState(Cuts::abseta < 5)), "MET");
 39
 40
 41      // Book xsec counter
 42      book(_c_xsec_fid, "xsec");
 43    }
 44
 45
 46    /// Perform the per-event analysis
 47    void analyze(const Event& event) {
 48
 49      // // Find at least 2 jets, one b-tagged
 50      // const Jets jets = apply<JetFinder>(event, "Jets").jetsByPt(Cuts::abseta < 4.7 && Cuts::pT > 40*GeV);
 51      // Jets bjets, ljets;
 52      // for (const Jet& j : jets)
 53      //   ((j.abseta() < 2.5 && j.bTagged()) ? bjets : ljets) += j;
 54      // if (bjets.empty() || ljets.empty()) vetoEvent;
 55      // const Jet& bjet = bjets[0];
 56      // const Jet& ljet = ljets[0];
 57
 58      // // Require exactly one isolated lepton, and it has to be a muon
 59      // const Particles& leps = apply<FinalState>(event, "Leptons").particlesByPt();
 60      // const Particles isoleps = discardIfAnyDeltaRLess(leps, jets, 0.3);
 61      // if (isoleps.size() != 1 || isoleps[0].abspid() != PID::MUON) vetoEvent;
 62      // const Particle& muon = isoleps[0];
 63
 64      // // Require exactly one isolated photon
 65      // const Particles& photons = apply<FinalState>(event, "Photons").particlesByPt();
 66      // const Particles muisophotons = discard(photons, deltaRLess(muon,0.5));
 67      // const Particles isophotons = discardIfAnyDeltaRLess(muisophotons, Jets{bjet,ljet}, 0.5);
 68      // if (isophotons.size() != 1) vetoEvent;
 69
 70      // // Require 30 GeV of missing ET
 71      // const double met = apply<MissingMomentum>(event, "MET").met();
 72      // if (met < 30*GeV) vetoEvent;
 73
 74
 75      // Find light jets
 76      const Jets jets = apply<JetFinder>(event, "Jets").jetsByPt();
 77      const Jets ljets = discard(jets, [](const Jet& j){ return j.abseta() < 2.5 && j.bTagged(); } );
 78
 79      // Require a photon, isolated from the light jet
 80      Particles photons = apply<FinalState>(event, "Photons").particlesByPt();
 81      if (!ljets.empty()) idiscard(photons, deltaRLess(ljets[0], 0.5));
 82      if (photons.empty()) vetoEvent;
 83
 84      // Fill counter
 85      _c_xsec_fid->fill();
 86    }
 87
 88
 89    /// Normalise histograms etc., after the run
 90    void finalize() {
 91      const double BRmu = 0.13 + 0.13*0.17; //< decay BR direct to a muon, and to a muon via a tau
 92      scale(_c_xsec_fid, BRmu*crossSection()/femtobarn/sumOfWeights());
 93    }
 94
 95    /// @}
 96
 97
 98    /// Counter
 99    CounterPtr _c_xsec_fid;
100
101
102  };
103
104
105  RIVET_DECLARE_PLUGIN(CMS_2018_I1686000);
106
107}