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:
  • CMS-TOP-17-016, CERN-EP-2018-206
  • Phys.Rev.Lett. 121 (2018)
  • DOI 10.1103/PhysRevLett.121.221802
  • hep-ex 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=13TeV and recorded by the CMS experiment in 2016, corresponding to an integrated luminosity of 35.9fb-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
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/DressedLeptons.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
    DEFAULT_RIVET_ANALYSIS_CTOR(CMS_2018_I1686000);


    /// @name Analysis methods
    //@{

    /// Book histograms and initialise projections before the run
    void init() {

      // Leptons
      declare(DressedLeptons(PromptFinalState(), 0.1, Cuts::abseta < 2.4 && Cuts::pT > 26*GeV), "Leptons");

      // Jets
      declare(FastJets(FinalState(Cuts::abseta < 5), FastJets::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
      _c_xsec_fid = bookCounter("xsec");
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {

      // // Find at least 2 jets, one b-tagged
      // const Jets jets = apply<JetAlg>(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 = filter_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<JetAlg>(event, "Jets").jetsByPt();
      const Jets ljets = filter_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()) ifilter_discard(photons, deltaRLess(ljets[0], 0.5));
      if (photons.empty()) vetoEvent;

      // Fill counter
      _c_xsec_fid->fill(event.weight());
    }


    /// 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;


  };


  DECLARE_RIVET_PLUGIN(CMS_2018_I1686000);

}