rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2023_I2663256

Semivisible jets t-channel search
Experiment: ATLAS (ATLAS)
Inspire ID: 2663256
Status: VALIDATED
Authors:
  • Deepak Kar
References: Beams: p+ p+
Beam energies: (6500.0, 6500.0) GeV
Run details:
  • BSM Search

Semi-visible jets, with a significant contribution to the missing transverse momentum of the event, can arise in strongly interacting dark sectors. This results in an event topology where one of the jets can be aligned with the direction of the missing transverse momentum. A search for semi-visible jets produced via a t-channel mediator exchange is presented. The analysis uses pp collisions with an integrated luminosity of 139 fb$^{−1}$ and a centre-of-mass energy of 13 TeV, collected with the ATLAS detector during Run 2 of the LHC. No excess over Standard Model predictions is observed. Assuming a coupling strength of unity between the mediator, a Standard Model quark and a dark quark, mediator masses up to 2.7 TeV can be excluded at the 95\% confidence level. Upper limits on the coupling strength are also derived.

Source code: ATLAS_2023_I2663256.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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/SmearedJets.hh"
#include "Rivet/Projections/VetoedFinalState.hh"
#include "Rivet/Projections/ChargedLeptons.hh"

namespace Rivet {


  /// @brief Semivisible jets t-channel search
  class ATLAS_2023_I2663256 : public Analysis {
  public:

  RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2023_I2663256)


  private:

    /// @name Analysis methods
    //@{

    void init() {

      // Leptons
      ChargedLeptons lfs(FinalState(Cuts::abseta < 2.5 && Cuts::pT > 7*GeV));
      declare(lfs, "LFS");

      FinalState fs(Cuts::abseta < 4.5 && Cuts::pT > 0.0*GeV);
      VetoedFinalState vfs(fs);
      vfs.vetoNeutrinos();
      vfs.addVetoPairId(PID::MUON);

      FastJets j04(vfs, FastJets::ANTIKT, 0.4);
      declare(j04, "Jets");

      SmearedJets sj04(j04, JET_SMEAR_ATLAS_RUN2, [](const Jet& j){ return j.bTagged() ? 0.7*(1 - exp(-j.pT()/(10*GeV))) : 0.01; } );
      declare(sj04, "SJets");

      // Book histograms
      book(_h["ninebin"], 1,1,8);
      book(_h["ht"], 2,1,8);
      book(_h["met"], 3,1,8);
      book(_h["ptbal"], 4,1,8 );
      book(_h["difphi"], 5,1,8);

    }



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

      const ChargedLeptons& lfs = apply<ChargedLeptons>(event, "LFS");
      if (lfs.chargedLeptons().size() > 0) vetoEvent;

      const Jets j04 = apply<JetAlg>(event, "Jets").jetsByPt(Cuts::abseta < 2.8 && Cuts::pT > 30*GeV);
      const Jets sj04 = apply<JetAlg>(event, "SJets").jetsByPt(Cuts::pT > 30*GeV);
      if (sj04.size() < 2) vetoEvent;
      const Jets sj04b = filter_select(sj04, [&](const Jet& j) { return j.bTagged(); });
      if (sj04b.size() > 1) vetoEvent;
      if ( sj04[0].pT() < 250) vetoEvent;

      FourMomentum pTmiss;
      for (const Jet& j : sj04) {
        pTmiss -= j.momentum();
      }


      double met = pTmiss.perp();
      if (met < 600) vetoEvent;


      double sumpt = 0;
      double minphi = 99;
      double maxphi = -99;

      Jet svj;
      Jet antisvj;


      for (const Jet& jet : sj04) {
        sumpt += jet.pT();
        if (deltaPhi(jet, pTmiss) < minphi) {
          minphi = deltaPhi(jet, pTmiss);
          svj=jet;
        }

        if (deltaPhi(jet, pTmiss) > maxphi) {
          maxphi = deltaPhi(jet, pTmiss);
          antisvj=jet;
        }
      }


      if (sumpt < 600) vetoEvent;
      if (minphi > 2) vetoEvent;
      double difphi = deltaPhi(svj, antisvj);
      double delta_jets = (svj.momentum() + antisvj.momentum()).pT();
      double total_pt = svj.momentum().pT() + antisvj.momentum().pT();
      double delta_jets_n = delta_jets/ total_pt;

      _h["met"]->fill(met);
      _h["ht"]->fill(sumpt);
      _h["difphi"]->fill(difphi);
      _h["ptbal"]->fill(delta_jets_n);

      int i=0;
      int j=0;
      if (inRange(delta_jets_n, 0.0, 0.6)) i=0;
      if (inRange(delta_jets_n, 0.6, 0.9)) i=1;
      if (inRange(delta_jets_n, 0.9, 1.0)) i=2;
      if (inRange(difphi, 0.0, 2.0)) j=0;
      if (inRange(difphi, 2.0, 2.7)) j=1;
      if (inRange(difphi, 2.7, 3.2)) j=2;
      int binindex = 3*i + j + 1;
      _h["ninebin"]->fill(binindex);
    }


    /// Normalise histograms etc., after the run
    void finalize() {

      for (auto& hist : _h) {
        for (size_t i=0; i < hist.second->numBins(); ++i) {
          double bW = hist.second->bin(i).xWidth();
          hist.second->bin(i).scaleW(bW);
        }
      }

      double norm = 139*crossSection()/femtobarn/sumOfWeights();
      scale(_h, norm);
    }


  private:

    /// @name Histograms
    ///@{

     map<string, Histo1DPtr> _h;

    ///@}

  };


  // The hook for the plugin system
  RIVET_DECLARE_PLUGIN(ATLAS_2023_I2663256);

}