file analyses/Analysis_CMS_13TeV_Photon_GMSB_137invfb.cpp

[No description available]

Namespaces

Name
Gambit
TODO: see if we can use this one:
Gambit::ColliderBit

Classes

Name
classGambit::ColliderBit::Analysis_CMS_13TeV_Photon_GMSB_137invfb

Defines

Name
LOG_ALL_CUTS()

Macros Documentation

define LOG_ALL_CUTS

#define LOG_ALL_CUTS(
    
)
  LOG_CUT("SR2", "SR3", "SR4", "SR5", "SR6", "SR7", "SR9", "SR10", "SR11", "SR12");        \
  LOG_CUT("SR13", "SR15", "SR16", "SR17", "SR18", "SR20", "SR21", "SR22", "SR23","SR25");  \
  LOG_CUT("SR26", "SR27", "SR28", "SR30", "SR31", "SR32", "SR33", "SR35", "SR36", "SR37"); \
  LOG_CUT("SR38", "SR39", "SR41", "SR42", "SR43", "SR44", "SR45");

Author: Vinay Hegde

Date: 2023 Nov


Source code

///
///  \author Vinay Hegde
///  \date 2023 Nov
///
///  *********************************************
// Based on https://cms-results.web.cern.ch/cms-results/public-results/publications/SUS-21-009/index.html
// Search for new physics in multijet events with at least one photon and large missing transverse momentum in proton-proton collisions at 13 TeV

/*
Objects:
 Photons:
  - pT > 100 GeV, |eta| < 2.4
 AK4 jets:
  - pT > 30 GeV, |eta| < 2.4
  - Not matching with photon
Event selections:
 - MET > 300 GeV
 - Njets_AK4 >= 2
 - Nphotons >=1
 - ST = scalar sum pT of AK4 jets + photon pT
 - dphi(AK4 jet1, MET) > 0.3
 - dphi(AK4 jet2, MET) > 0.3
 - No. of electrons = 0
 - No. of muons = 0
 - No. of isolated tracks = 0

To be checked:
- Photon efficiency: https://arxiv.org/pdf/2012.06888.pdf or keep the old one?
- jet->mom().deltaR_eta(photon->mom()) < 0.5 . Should this be < 0.5 or something else?
*/

#include <vector>
#include <cmath>
#include <memory>
#include <iomanip>
#include <fstream>

#include "gambit/ColliderBit/analyses/Analysis.hpp"
#include "gambit/ColliderBit/analyses/AnalysisMacros.hpp"
#include "gambit/ColliderBit/CMSEfficiencies.hpp"
#include "gambit/ColliderBit/mt2_bisect.h"
#include "gambit/ColliderBit/analyses/Cutflow.hpp"
#include "fastjet/contrib/SoftDrop.hh"

// #define CHECK_CUTFLOW

// Shortcut for logging all cuts at once
#define LOG_ALL_CUTS()                                                                     \
  LOG_CUT("SR2", "SR3", "SR4", "SR5", "SR6", "SR7", "SR9", "SR10", "SR11", "SR12");        \
  LOG_CUT("SR13", "SR15", "SR16", "SR17", "SR18", "SR20", "SR21", "SR22", "SR23","SR25");  \
  LOG_CUT("SR26", "SR27", "SR28", "SR30", "SR31", "SR32", "SR33", "SR35", "SR36", "SR37"); \
  LOG_CUT("SR38", "SR39", "SR41", "SR42", "SR43", "SR44", "SR45");

using namespace std;
using namespace HEPUtils;

namespace Gambit {
  namespace ColliderBit {


    class Analysis_CMS_13TeV_Photon_GMSB_137invfb : public Analysis {
    public:

      static constexpr const char* detector = "CMS";

      Cutflow _cutflow;

      Analysis_CMS_13TeV_Photon_GMSB_137invfb()
      {
        set_analysis_name("CMS_13TeV_Photon_GMSB_137invfb");
        set_detector_name(detector);
        set_luminosity(137.0);

        // Counters for the number of accepted events for each signal region
        //defineSignalRegion("SR1", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR2", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR3", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR4", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR5", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR6", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR7", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        //defineSignalRegion("SR8", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR9", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR10", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR11", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR12", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR13", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        //defineSignalRegion("SR14", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR15", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR16", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR17", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR18", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        //defineSignalRegion("SR19", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR20", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR21", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR22", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR23", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        //defineSignalRegion("SR24", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR25", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR26", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR27", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR28", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        //defineSignalRegion("SR29", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR30", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR31", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR32", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR33", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        //defineSignalRegion("SR34", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR35", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR36", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR37", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR38", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR39", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        //defineSignalRegion("SR40", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR41", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR42", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR43", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR44", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
        defineSignalRegion("SR45", "LepVeto", "IsoTrkVeto", "PhotonSel", "MET>300GeV", "NJets>=2", "S_T>300GeV", "TriggerEff", "dPhiJ1J2MET");
      }

      void run(const HEPUtils::Event* event)
      {
        // Baseline objects
        HEPUtils::P4 metVec = event->missingmom();
        double met = event->met();

        vector<const Jet*> jets_ak4;
        for (const HEPUtils::Jet* jet : event->jets("antikt_R04"))
        {
          if (jet->pT() < 30) continue;
          if (jet->abseta() < 2.4) jets_ak4.push_back(jet);
        }

        // Get baseline electrons and apply efficiency
        vector<const Particle*> baseelecs;
        for (const Particle* electron : event->electrons())
        {
          if (electron->pT() > 10. && electron->abseta() < 2.5)
          {
            baseelecs.push_back(electron);
          }
        }
        // CMS::applyElectronEff(baseelecs);

        // Get baseline muons and apply efficiency
        vector<const Particle*> basemuons;
        for (const Particle* muon : event->muons())
        {
          if (muon->pT() > 10. && muon->abseta() < 2.4)
          {
            basemuons.push_back(muon);
          }
        }
        // CMS::applyMuonEff(basemuons);

        // Electron isolation
        /// @todo Sum should actually be over all non-e/mu calo particles
        vector<const Particle*> elecs;
        for (const Particle* e : baseelecs)
        {
          const double R = max(0.05, min(0.2, 10/e->pT()));
          double sumpt = -e->pT();
          for (const Jet* j : jets_ak4)
          {
            if (e->mom().deltaR_eta(j->mom()) < R) sumpt += j->pT();
          }
          if (sumpt/e->pT() < 0.1) elecs.push_back(e);
        }

        // Muon isolation
        /// @todo Sum should actually be over all non-e/mu calo particles
        vector<const Particle*> muons;
        for (const Particle* m : basemuons)
        {
          const double R = max(0.05, min(0.2, 10/m->pT()));
          double sumpt = -m->pT();
          for (const Jet* j : jets_ak4)
          {
            if (m->mom().deltaR_eta(j->mom()) < R) sumpt += j->pT();
          }
          if (sumpt/m->pT() < 0.2) muons.push_back(m);
        }

        // Perform all pre-selection cuts (No cuts put in preselection)
        BEGIN_PRESELECTION
        END_PRESELECTION

        // Veto the event if there are any remaining baseline leptons
        if (!muons.empty()) return;
        if (!elecs.empty()) return;
        LOG_ALL_CUTS()
        LOG_ALL_CUTS() //IsoTrack veto is not implemented.


        // Apply photon efficiency and collect baseline photon
        //@note Numbers digitized from https://twiki.cern.ch/twiki/pub/CMSPublic/SUSMoriond2017ObjectsEfficiency/PhotonEfficiencies_ForPublic_Moriond2017_LoosePixelVeto.pdf
        //@note The efficiency map has been extended to cover the low-pT region, using the efficiencies from BuckFast (CMSEfficiencies.hpp)
        const vector<double> aPhoton={0., 0.8, 1.4442, 1.566, 2.0, 2.5, DBL_MAX};   // Bin edges in eta
        const vector<double> bPhoton={0., 20., 35., 50., 90., DBL_MAX};  // Bin edges in pT. Assume flat efficiency above 200, where the CMS map stops.
        const vector<double> cPhoton={
                           // pT:   (0,20),  (20,35),  (35,50),  (50,90),  (90,inf)
                                     0.0,    0.735,    0.779,    0.805,    0.848,   // eta: (0, 0.8)
                                     0.0,    0.726,    0.746,    0.768,    0.809,   // eta: (0.8, 1.4442)
                                     0.0,    0.0,      0.0,      0.0,      0.0,     // eta: (1.4442, 1.566)
                                     0.0,    0.669,    0.687,    0.704,    0.723,   // eta: (1.566, 2.0)
                                     0.0,    0.564,    0.585,    0.592,    0.612,   // eta: (2.0, 2.5)
                                     0.0,    0.0,      0.0,      0.0,      0.0   }; // eta > 2.5

        HEPUtils::BinnedFn2D<double> _eff2dPhoton(aPhoton,bPhoton,cPhoton);
        vector<const HEPUtils::Particle*> Photons;
        for (const HEPUtils::Particle* photon : event->photons())
        {
          bool isPhoton=has_tag(_eff2dPhoton, photon->abseta(), photon->pT());
          if (isPhoton && photon->pT()>100.) Photons.push_back(photon);
        }

        // Photon cleaning
        // Remove jets that overlap with photons within dR < 0.3
        removeOverlap(jets_ak4, Photons, 0.3);

        // Count b-jets
        size_t nbjets = 0;
        for (const Jet* j : jets_ak4)
        {
          if (random_bool(j->btag() ? 0.65 : j->ctag() ? 0.13 : 0.016)) nbjets += 1;
        }

        bool high_pT_photon = false;  // At least one high-pT photon;
        bool delta_R_g_j = false;     // Photons are required to have delta_R>0.5 to the nearest jet;
        for (const HEPUtils::Particle* photon  : Photons)
        {
          if (photon->pT()>100. && fabs(photon->eta()) < 2.4)
          {
            high_pT_photon = true;
            for (const HEPUtils::Jet* jet : jets_ak4)
            {
              if ( jet->mom().deltaR_eta(photon->mom()) < 0.5 ) delta_R_g_j=true;
            }
          }
        }
        if (not high_pT_photon) return;
        if (delta_R_g_j) return;
        LOG_ALL_CUTS()

        // MET > 300 GeV
        if (met<300) return;
        LOG_ALL_CUTS()

        // At least 2 AK4 jets
        const size_t njets_ak4 = jets_ak4.size();
        if (njets_ak4 < 2) return;
        LOG_ALL_CUTS()

        // ST = jets_ak4_pt + photon_pt
        double ST = 0.0;
        for (const Jet* j : jets_ak4)
        {
          ST = ST + j->pT();
        }
        for (const Particle* photon : Photons)
        {
          ST = ST + photon->pT();
        }
        if (ST < 300) return;
        LOG_ALL_CUTS()

        // Downweight for event quality inefficiency
        // Trigger efficiencies for events with reconstructed pmissT
        // of at least 200 (300) GeV are found to be 70, 60, and 60%
        // (95, 95, and 97%) for data collected in 2016, 2017, and 2018, respectively.
        // Efficiency for 2016+2017+2018 = lumi*eff/total_lumi = (63.67*0.97+44.99*0.95+35.25*0.95)/143.91 = 0.96.
        // Lumi ref = https://twiki.cern.ch/twiki/bin/view/CMSPublic/LumiPublicResults
        if (!random_bool(0.96)) return;
        LOG_ALL_CUTS()

        // AK4 jets must fulfill delta_phi(MET,jet)>0.3 for leading two
        if (jets_ak4.size() >= 2 && fabs(jets_ak4[0]->mom().deltaPhi(metVec)) < 0.3) return;
        if (jets_ak4.size() >= 2 && fabs(jets_ak4[1]->mom().deltaPhi(metVec)) < 0.3) return;
        LOG_ALL_CUTS()

        vector<const Jet*> jets_ak8;
        for (const HEPUtils::Jet* jet : event->jets("antikt_R08"))
        {
          if (jet->pT() < 200) continue;
          if (jet->abseta() < 2.4) jets_ak8.push_back(jet);
        }

        double beta = 0.0;
        double z_cut = 0.1;
        double RSD  = 0.8;
        FJNS::contrib::SoftDrop sd(beta, z_cut, RSD);

        bool isVtag = false, isHtag = false;
        if (jets_ak8.size() > 0 && njets_ak4 <= 6)
        {
          // double leadMass = jets_ak8[0]->mass(); //Replace it with SD mass
          FJNS::PseudoJet pj = jets_ak8[0]->pseudojet();
          FJNS::PseudoJet groomed_jet = sd(pj);
          double leadMass = groomed_jet.m();

          if (leadMass > 65 && leadMass < 105) isVtag = true;
          else if (leadMass > 105 && leadMass < 140) isHtag = true;
        }
        // Signal regions
        if (isVtag)
        {
          if (met < 370) { FILL_SIGNAL_REGION("SR35"); }
          else if (met < 450) { FILL_SIGNAL_REGION("SR36"); }
          else if (met < 600) { FILL_SIGNAL_REGION("SR37"); }
          else if (met < 750) { FILL_SIGNAL_REGION("SR38"); }
          else                { FILL_SIGNAL_REGION("SR39"); }
        }
        else if (isHtag)
        {
          if (met < 370) { FILL_SIGNAL_REGION("SR41"); }
          else if (met < 450) { FILL_SIGNAL_REGION("SR42"); }
          else if (met < 600) { FILL_SIGNAL_REGION("SR43"); }
          else if (met < 750) { FILL_SIGNAL_REGION("SR44"); }
          else                { FILL_SIGNAL_REGION("SR45"); }
        }
        else
        {
          if (nbjets == 0 && njets_ak4 >=2 && njets_ak4 <=4 && met < 370) { FILL_SIGNAL_REGION("SR2"); }
          else if (nbjets == 0 && njets_ak4 >=2 && njets_ak4 <=4 && met < 450) { FILL_SIGNAL_REGION("SR3"); }
          else if (nbjets == 0 && njets_ak4 >=2 && njets_ak4 <=4 && met < 600) { FILL_SIGNAL_REGION("SR4"); }
          else if (nbjets == 0 && njets_ak4 >=2 && njets_ak4 <=4 && met < 750) { FILL_SIGNAL_REGION("SR5"); }
          else if (nbjets == 0 && njets_ak4 >=2 && njets_ak4 <=4 && met < 900) { FILL_SIGNAL_REGION("SR6"); }
          else if (nbjets == 0 && njets_ak4 >=2 && njets_ak4 <=4 && met >=900) { FILL_SIGNAL_REGION("SR7"); }

          else if (nbjets == 0 && njets_ak4 >=5 && njets_ak4 <=6 && met < 370) { FILL_SIGNAL_REGION("SR9"); }
          else if (nbjets == 0 && njets_ak4 >=5 && njets_ak4 <=6 && met < 450) { FILL_SIGNAL_REGION("SR10"); }
          else if (nbjets == 0 && njets_ak4 >=5 && njets_ak4 <=6 && met < 600) { FILL_SIGNAL_REGION("SR11"); }
          else if (nbjets == 0 && njets_ak4 >=5 && njets_ak4 <=6 && met < 750) { FILL_SIGNAL_REGION("SR12"); }
          else if (nbjets == 0 && njets_ak4 >=5 && njets_ak4 <=6 && met >=750) { FILL_SIGNAL_REGION("SR13"); }

          else if (nbjets == 0 && njets_ak4 >=7 && met < 370) { FILL_SIGNAL_REGION("SR15"); }
          else if (nbjets == 0 && njets_ak4 >=7 && met < 450) { FILL_SIGNAL_REGION("SR16"); }
          else if (nbjets == 0 && njets_ak4 >=7 && met < 600) { FILL_SIGNAL_REGION("SR17"); }
          else if (nbjets == 0 && njets_ak4 >=7 && met >=600) { FILL_SIGNAL_REGION("SR18"); }

          else if (nbjets >= 1 && njets_ak4 >=2 && njets_ak4 <=4 && met < 370) { FILL_SIGNAL_REGION("SR20"); }
          else if (nbjets >= 1 && njets_ak4 >=2 && njets_ak4 <=4 && met < 450) { FILL_SIGNAL_REGION("SR21"); }
          else if (nbjets >= 1 && njets_ak4 >=2 && njets_ak4 <=4 && met < 600) { FILL_SIGNAL_REGION("SR22"); }
          else if (nbjets >= 1 && njets_ak4 >=2 && njets_ak4 <=4 && met >=600) { FILL_SIGNAL_REGION("SR23"); }

          else if (nbjets >= 1 && njets_ak4 >=5 && njets_ak4 <=6 && met < 370) { FILL_SIGNAL_REGION("SR25"); }
          else if (nbjets >= 1 && njets_ak4 >=5 && njets_ak4 <=6 && met < 450) { FILL_SIGNAL_REGION("SR26"); }
          else if (nbjets >= 1 && njets_ak4 >=5 && njets_ak4 <=6 && met < 600) { FILL_SIGNAL_REGION("SR27"); }
          else if (nbjets >= 1 && njets_ak4 >=5 && njets_ak4 <=6 && met >=600) { FILL_SIGNAL_REGION("SR28"); }

          else if (nbjets >= 1 && njets_ak4 >=7 && met < 370) { FILL_SIGNAL_REGION("SR30"); }
          else if (nbjets >= 1 && njets_ak4 >=7 && met < 450) { FILL_SIGNAL_REGION("SR31"); }
          else if (nbjets >= 1 && njets_ak4 >=7 && met < 600) { FILL_SIGNAL_REGION("SR32"); }
          else if (nbjets >= 1 && njets_ak4 >=7 && met >=600) { FILL_SIGNAL_REGION("SR33"); }
        }

      }

      virtual void collect_results()
      {

        COMMIT_SIGNAL_REGION("SR2", 641., 626., 72.)
        COMMIT_SIGNAL_REGION("SR3", 325., 303., 40.)
        COMMIT_SIGNAL_REGION("SR4", 157., 186., 36.)
        COMMIT_SIGNAL_REGION("SR5", 32., 48.,  8.8)
        COMMIT_SIGNAL_REGION("SR6", 19., 19.2, 6.4)
        COMMIT_SIGNAL_REGION("SR7", 11., 7.79, 2.16)

        COMMIT_SIGNAL_REGION("SR9", 41., 39.0, 4.7)
        COMMIT_SIGNAL_REGION("SR10", 21., 22.7, 3.3)
        COMMIT_SIGNAL_REGION("SR11", 22., 17.7, 3.1)
        COMMIT_SIGNAL_REGION("SR12", 4., 5.00, 1.61)
        COMMIT_SIGNAL_REGION("SR13", 0., 4.87, 1.61)

        COMMIT_SIGNAL_REGION("SR15", 5., 7.19, 1.70)
        COMMIT_SIGNAL_REGION("SR16", 1., 3.68, 0.97)
        COMMIT_SIGNAL_REGION("SR17", 2., 3.14, 0.86)
        COMMIT_SIGNAL_REGION("SR18", 1., 1.66, 0.81)

        COMMIT_SIGNAL_REGION("SR20", 114., 118., 14.)
        COMMIT_SIGNAL_REGION("SR21", 58., 46.0, 6.4)
        COMMIT_SIGNAL_REGION("SR22", 35., 30.1, 5.5)
        COMMIT_SIGNAL_REGION("SR23", 6., 9.02, 2.73)

        COMMIT_SIGNAL_REGION("SR25", 48., 42.7, 5.9)
        COMMIT_SIGNAL_REGION("SR26", 23., 17.8, 3.1)
        COMMIT_SIGNAL_REGION("SR27", 8., 6.39, 1.46)
        COMMIT_SIGNAL_REGION("SR28", 3., 4.81, 1.22)

        COMMIT_SIGNAL_REGION("SR30", 8., 15.2, 2.9)
        COMMIT_SIGNAL_REGION("SR31", 9., 8.07, 1.76)
        COMMIT_SIGNAL_REGION("SR32", 3., 5.36, 1.48)
        COMMIT_SIGNAL_REGION("SR33", 1., 1.80, 0.83)

        COMMIT_SIGNAL_REGION("SR35", 97., 103., 13.)
        COMMIT_SIGNAL_REGION("SR36", 52., 46.2, 7.2)
        COMMIT_SIGNAL_REGION("SR37", 36., 27.9, 5.2)
        COMMIT_SIGNAL_REGION("SR38", 4., 11.9, 3.4)
        COMMIT_SIGNAL_REGION("SR39", 2., 4.54, 2.01)

        COMMIT_SIGNAL_REGION("SR41", 60., 60.7, 8.3)
        COMMIT_SIGNAL_REGION("SR42", 34., 25.6, 4.5)
        COMMIT_SIGNAL_REGION("SR43", 20., 17.7, 3.8)
        COMMIT_SIGNAL_REGION("SR44", 2., 7.30, 2.28)
        COMMIT_SIGNAL_REGION("SR45", 2., 3.72, 1.66)

        COMMIT_CUTFLOWS
      }


    protected:
      void analysis_specific_reset()
      {
        for (auto& pair : _counters) { pair.second.reset(); }
      }

    };

    // Factory fn
    DEFINE_ANALYSIS_FACTORY(CMS_13TeV_Photon_GMSB_137invfb)

  }
}

Updated on 2026-11-03 at 14:50:48 +0000