file analyses/Analysis_CMS_13TeV_2SSLEP_Stop_36invfb.cpp

[No description available]

Namespaces

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

Classes

Name
classGambit::ColliderBit::Analysis_CMS_13TeV_2SSLEP_Stop_36invfb
structGambit::ColliderBit::Analysis_CMS_13TeV_2SSLEP_Stop_36invfb::ptComparison
classGambit::ColliderBit::Analysis_CMS_13TeV_2SSLEP_Stop_inclusive_36invfb
classGambit::ColliderBit::Analysis_CMS_13TeV_2SSLEP_Stop_exclusive_36invfb

Source code

///
///  \author Yang Zhang
///  \date 2019 July
///  *********************************************

// Based on http://cms-results.web.cern.ch/cms-results/public-results/publications/SUS-16-035/index.html
//          https://arxiv.org/abs/1704.07323

// Search for physics beyond the standard model in events with two leptons of same sign, missing transverse momentum, and jets in proton-proton collisions at sqrt(s) = 13 TeV

// Note:
// 1. Not fully validated.
// 2. Not sure how to deal with the case that there are more than one lepton pairs. Here just use the first one.
// 3. Apply ATLAS Jet-Lepton Overlap Removal

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

#include "gambit/ColliderBit/analyses/Analysis.hpp"
#include "gambit/ColliderBit/mt2_bisect.h"
#include "gambit/ColliderBit/CMSEfficiencies.hpp"
#include "gambit/ColliderBit/analyses/Cutflow.hpp"

// #define CHECK_CUTFLOW

using namespace std;

namespace Gambit {
  namespace ColliderBit {

    class Analysis_CMS_13TeV_2SSLEP_Stop_36invfb : public Analysis {
    protected:

        // Counters for the number of accepted events for each signal region
        std::map<string, EventCounter> _counters = {
            // HH
            {"SRHH-0", EventCounter("SRHH-0")},
            {"SRHH-1", EventCounter("SRHH-1")},
            {"SRHH-2", EventCounter("SRHH-2")},
            {"SRHH-3", EventCounter("SRHH-3")},
            {"SRHH-4", EventCounter("SRHH-4")},
            {"SRHH-5", EventCounter("SRHH-5")},
            {"SRHH-6", EventCounter("SRHH-6")},
            {"SRHH-7", EventCounter("SRHH-7")},
            {"SRHH-8", EventCounter("SRHH-8")},
            {"SRHH-9", EventCounter("SRHH-9")},
            {"SRHH-10", EventCounter("SRHH-10")},
            {"SRHH-11", EventCounter("SRHH-11")},
            {"SRHH-12", EventCounter("SRHH-12")},
            {"SRHH-13", EventCounter("SRHH-13")},
            {"SRHH-14", EventCounter("SRHH-14")},
            {"SRHH-15", EventCounter("SRHH-15")},
            {"SRHH-16", EventCounter("SRHH-16")},
            {"SRHH-17", EventCounter("SRHH-17")},
            {"SRHH-18", EventCounter("SRHH-18")},
            {"SRHH-19", EventCounter("SRHH-19")},
            {"SRHH-20", EventCounter("SRHH-20")},
            {"SRHH-21", EventCounter("SRHH-21")},
            {"SRHH-22", EventCounter("SRHH-22")},
            {"SRHH-23", EventCounter("SRHH-23")},
            {"SRHH-24", EventCounter("SRHH-24")},
            {"SRHH-25", EventCounter("SRHH-25")},
            {"SRHH-26", EventCounter("SRHH-26")},
            {"SRHH-27", EventCounter("SRHH-27")},
            {"SRHH-28", EventCounter("SRHH-28")},
            {"SRHH-29", EventCounter("SRHH-29")},
            {"SRHH-30", EventCounter("SRHH-30")},
            {"SRHH-31", EventCounter("SRHH-31")},
            {"SRHH-32", EventCounter("SRHH-32")},
            {"SRHH-33", EventCounter("SRHH-33")},
            {"SRHH-34", EventCounter("SRHH-34")},
            {"SRHH-35", EventCounter("SRHH-35")},
            {"SRHH-36", EventCounter("SRHH-36")},
            {"SRHH-37", EventCounter("SRHH-37")},
            {"SRHH-38", EventCounter("SRHH-38")},
            {"SRHH-39", EventCounter("SRHH-39")},
            {"SRHH-40", EventCounter("SRHH-40")},
            {"SRHH-41", EventCounter("SRHH-41")},
            {"SRHH-42", EventCounter("SRHH-42")},
            {"SRHH-43", EventCounter("SRHH-43")},
            {"SRHH-44", EventCounter("SRHH-44")},
            {"SRHH-45", EventCounter("SRHH-45")},
            {"SRHH-46", EventCounter("SRHH-46")},
            {"SRHH-47", EventCounter("SRHH-47")},
            {"SRHH-48", EventCounter("SRHH-48")},
            {"SRHH-49", EventCounter("SRHH-49")},
            {"SRHH-50", EventCounter("SRHH-50")},
            // HL
            {"SRHL-0", EventCounter("SRHL-0")},
            {"SRHL-1", EventCounter("SRHL-1")},
            {"SRHL-2", EventCounter("SRHL-2")},
            {"SRHL-3", EventCounter("SRHL-3")},
            {"SRHL-4", EventCounter("SRHL-4")},
            {"SRHL-5", EventCounter("SRHL-5")},
            {"SRHL-6", EventCounter("SRHL-6")},
            {"SRHL-7", EventCounter("SRHL-7")},
            {"SRHL-8", EventCounter("SRHL-8")},
            {"SRHL-9", EventCounter("SRHL-9")},
            {"SRHL-10", EventCounter("SRHL-10")},
            {"SRHL-11", EventCounter("SRHL-11")},
            {"SRHL-12", EventCounter("SRHL-12")},
            {"SRHL-13", EventCounter("SRHL-13")},
            {"SRHL-14", EventCounter("SRHL-14")},
            {"SRHL-15", EventCounter("SRHL-15")},
            {"SRHL-16", EventCounter("SRHL-16")},
            {"SRHL-17", EventCounter("SRHL-17")},
            {"SRHL-18", EventCounter("SRHL-18")},
            {"SRHL-19", EventCounter("SRHL-19")},
            {"SRHL-20", EventCounter("SRHL-20")},
            {"SRHL-21", EventCounter("SRHL-21")},
            {"SRHL-22", EventCounter("SRHL-22")},
            {"SRHL-23", EventCounter("SRHL-23")},
            {"SRHL-24", EventCounter("SRHL-24")},
            {"SRHL-25", EventCounter("SRHL-25")},
            {"SRHL-26", EventCounter("SRHL-26")},
            {"SRHL-27", EventCounter("SRHL-27")},
            {"SRHL-28", EventCounter("SRHL-28")},
            {"SRHL-29", EventCounter("SRHL-29")},
            {"SRHL-30", EventCounter("SRHL-30")},
            {"SRHL-31", EventCounter("SRHL-31")},
            {"SRHL-32", EventCounter("SRHL-32")},
            {"SRHL-33", EventCounter("SRHL-33")},
            {"SRHL-34", EventCounter("SRHL-34")},
            {"SRHL-35", EventCounter("SRHL-35")},
            {"SRHL-36", EventCounter("SRHL-36")},
            {"SRHL-37", EventCounter("SRHL-37")},
            {"SRHL-38", EventCounter("SRHL-38")},
            {"SRHL-39", EventCounter("SRHL-39")},
            {"SRHL-40", EventCounter("SRHL-40")},
            // LL
            {"SRLL-0", EventCounter("SRLL-0")},
            {"SRLL-1", EventCounter("SRLL-1")},
            {"SRLL-2", EventCounter("SRLL-2")},
            {"SRLL-3", EventCounter("SRLL-3")},
            {"SRLL-4", EventCounter("SRLL-4")},
            {"SRLL-5", EventCounter("SRLL-5")},
            {"SRLL-6", EventCounter("SRLL-6")},
            {"SRLL-7", EventCounter("SRLL-7")},
            // inc
            {"SRinc-0", EventCounter("SRinc-0")},
            {"SRinc-1", EventCounter("SRinc-1")},
            {"SRinc-2", EventCounter("SRinc-2")},
            {"SRinc-3", EventCounter("SRinc-3")},
            {"SRinc-4", EventCounter("SRinc-4")},
            {"SRinc-5", EventCounter("SRinc-5")},
            {"SRinc-6", EventCounter("SRinc-6")},
            {"SRinc-7", EventCounter("SRinc-7")},
            {"SRinc-8", EventCounter("SRinc-8")},
            {"SRinc-9", EventCounter("SRinc-9")},
            {"SRinc-10", EventCounter("SRinc-10")},
            {"SRinc-11", EventCounter("SRinc-11")},
            {"SRinc-12", EventCounter("SRinc-12")},
            {"SRinc-13", EventCounter("SRinc-13")},
            {"SRinc-14", EventCounter("SRinc-14")},
            // exc
            {"SRexc-0", EventCounter("SRexc-0")},
            {"SRexc-1", EventCounter("SRexc-1")},
            {"SRexc-2", EventCounter("SRexc-2")},
            {"SRexc-3", EventCounter("SRexc-3")},
            {"SRexc-4", EventCounter("SRexc-4")},
            {"SRexc-5", EventCounter("SRexc-5")},
            {"SRexc-6", EventCounter("SRexc-6")},
            {"SRexc-7", EventCounter("SRexc-7")},
            {"SRexc-8", EventCounter("SRexc-8")},
            {"SRexc-9", EventCounter("SRexc-9")},
            {"SRexc-10", EventCounter("SRexc-10")},
            {"SRexc-11", EventCounter("SRexc-11")},
            {"SRexc-12", EventCounter("SRexc-12")},
            {"SRexc-13", EventCounter("SRexc-13")},
            {"SRexc-14", EventCounter("SRexc-14")},
        };

        Cutflow _cutflow;

      // The following section copied from Analysis_ATLAS_1LEPStop_20invfb.cpp
      void JetLeptonOverlapRemoval(vector<const HEPUtils::Jet*> &jetvec, vector<const HEPUtils::Particle*> &lepvec, double DeltaRMax) {
        //Routine to do jet-lepton check
        //Discards jets if they are within DeltaRMax of a lepton

        vector<const HEPUtils::Jet*> Survivors;

        for(unsigned int itjet = 0; itjet < jetvec.size(); itjet++) {
        bool overlap = false;
          HEPUtils::P4 jetmom=jetvec.at(itjet)->mom();
          for(unsigned int itlep = 0; itlep < lepvec.size(); itlep++) {
            HEPUtils::P4 lepmom=lepvec.at(itlep)->mom();
            double dR;

            dR=jetmom.deltaR_eta(lepmom);

            if(fabs(dR) <= DeltaRMax) overlap=true;
          }
          if(overlap) continue;
          Survivors.push_back(jetvec.at(itjet));
        }
        jetvec=Survivors;

        return;
      }

      void LeptonJetOverlapRemoval(vector<const HEPUtils::Particle*> &lepvec, vector<const HEPUtils::Jet*> &jetvec) {
        //Routine to do lepton-jet check
        //Discards leptons if they are within dR of a jet as defined in analysis paper

        vector<const HEPUtils::Particle*> Survivors;

        for(unsigned int itlep = 0; itlep < lepvec.size(); itlep++) {
          bool overlap = false;
          HEPUtils::P4 lepmom=lepvec.at(itlep)->mom();
          for(unsigned int itjet= 0; itjet < jetvec.size(); itjet++) {
            HEPUtils::P4 jetmom=jetvec.at(itjet)->mom();
            double dR;
            double DeltaRMax = std::min(0.4, 0.04 + 10 / lepmom.pT());
            dR=jetmom.deltaR_eta(lepmom);

            if(fabs(dR) <= DeltaRMax) overlap=true;
          }
          if(overlap) continue;
          Survivors.push_back(lepvec.at(itlep));
        }
        lepvec=Survivors;

        return;
      }


    public:

        // Required detector sim
        static constexpr const char* detector = "CMS";

        Analysis_CMS_13TeV_2SSLEP_Stop_36invfb():
        _cutflow("CMS_13TeV_2SSLEP_Stop_36invfb", {"Trigger_and_2leptons", "At_least_one_SS_lepton_pair", "Baseline"})
        {
            set_analysis_name("CMS_13TeV_2SSLEP_Stop_36invfb");
            set_luminosity(36);
        }

        struct ptComparison {
            bool operator() (const HEPUtils::Particle* i,const HEPUtils::Particle* j) {return (i->pT()>j->pT());}
        } comparePt;

        void run(const HEPUtils::Event* event) {
            _cutflow.fillinit();

            // Missing energy
            double met = event->met();
            HEPUtils::P4 ptot = event->missingmom();

            // Electrons
            //@note Numbers digitized from https://twiki.cern.ch/twiki/pub/CMSPublic/SUSMoriond2017ObjectsEfficiency/2d_full_pteta_el_035_ttbar.pdf
            const vector<double> aEl={0., 0.8, 1.442, 1.556, 2., 2.5, DBL_MAX};   // Bin edges in eta
            const vector<double> bEl={0., 15., 20., 25., 30., 40., 50, DBL_MAX}; // Bin edges in pT. Assume flat efficiency above 200, where the CMS map stops.
            const vector<double> cEl={
                          // pT:  (0,15), (15,20), (20,25), (25,30), (30,40), (40,50), (50,inf)
                                   0.0,   0.398,   0.501,   0.556,   0.619,   0.669,   0.720,// eta: (0, 0.8)
                                   0.0,   0.344,   0.433,   0.498,   0.579,   0.600,   0.671,// eta: (0.8, 1.4429)
                                   0.0,   0.201,   0.156,   0.206,   0.222,   0.255,   0.307,// eta: (1.442, 1.556)
                                   0.0,   0.210,   0.302,   0.338,   0.428,   0.484,   0.561,// eta: (1.556, 2)
                                   0.0,   0.162,   0.172,   0.250,   0.339,   0.396,   0.444,// eta: (2, 2.5)
                                   0.0,   0.0,     0.0,     0.0,     0.0,     0.0,     0.0// eta > 2.5
                                  };
            HEPUtils::BinnedFn2D<double> _eff2dEl(aEl,bEl,cEl);
            vector<const HEPUtils::Particle*> electrons;
            for (const HEPUtils::Particle* electron : event->electrons()) {
                bool isEl=has_tag(_eff2dEl, fabs(electron->eta()), electron->pT());
                if (electron->pT() > 15. && fabs(electron->eta()) < 2.5 && isEl)
                    electrons.push_back(electron);
            }

            // Muons
            //@note Numbers digitized from https://twiki.cern.ch/twiki/pub/CMSPublic/SUSMoriond2017ObjectsEfficiency/2d_full_pteta_mu_035_ttbar.pdf
            const vector<double> aMu={0., 0.9, 1.2, 2.1, 2.4, DBL_MAX};   // Bin edges in eta
            const vector<double> bMu={0., 10, 15., 20., 25, 30, 40, 50, DBL_MAX};  // Bin edges in pT. Assume flat efficiency above 200, where the CMS map stops.
            const vector<double> cMu={
                          // pT:  (0,10), (10,15), (15,20), (20,25), (25,30), (30,40), (40,50), (50,inf)
                                   0.0,   0.564,   0.645,    0.739,  0.803,   0.860,   0.894,   0.907, // eta: (0, 0.9)
                                   0.0,   0.525,   0.616,    0.700,  0.773,   0.825,   0.891,   0.898, // eta: (0.9, 1.2)
                                   0.0,   0.514,   0.572,    0.697,  0.748,   0.789,   0.837,   0.870, // eta: (1.2, 2.1)
                                   0.0,   0.440,   0.575,    0.604,  0.663,   0.696,   0.784,   0.794,// eta: (2.1, 2.4)
                                   0.0,   0.0,     0.0,      0.0,    0.0,     0.0,     0.0,     0.0// eta > 2.4
                                  };
            HEPUtils::BinnedFn2D<double> _eff2dMu(aMu,bMu,cMu);
            vector<const HEPUtils::Particle*> muons;
            for (const HEPUtils::Particle* muon : event->muons()) {
                bool isMu=has_tag(_eff2dMu, fabs(muon->eta()), muon->pT());
                if (muon->pT() > 10.&& fabs(muon->eta()) < 2.4 && isMu)
                    muons.push_back(muon);
            }

            // Jets
            double HT = 0.;
            vector<const HEPUtils::Jet*> candJets;
            for (const HEPUtils::Jet* jet : event->jets("antikt_R04")) {
                if (jet->pT() > 25. && fabs(jet->eta()) < 2.4){
                    HT += jet->pT();
                    candJets.push_back(jet);
                }
            }

            // Overlap removal
            JetLeptonOverlapRemoval(candJets,electrons,0.2);
            LeptonJetOverlapRemoval(electrons,candJets);
            JetLeptonOverlapRemoval(candJets,muons,0.4);
            LeptonJetOverlapRemoval(muons,candJets);

            // Jets
            vector<const HEPUtils::Jet*> bJets;
            vector<const HEPUtils::Jet*> nonbJets;


            // Find b-jets
            // Copied from ATLAS_13TeV_3b_24invfb
            double btag = 0.85; double cmisstag = 1/12.; double misstag = 1./381.;
            for (const HEPUtils::Jet* jet : candJets) {
                // Tag
                if( jet->btag() && random_bool(btag) ) bJets.push_back(jet);
                // Misstag c-jet
                else if( jet->ctag() && random_bool(cmisstag) ) bJets.push_back(jet);
                // Misstag light jet
                else if( random_bool(misstag) ) bJets.push_back(jet);
                // Non b-jet
                else if( jet->pT() > 40. ) {
                    nonbJets.push_back(jet);
                }
            }

            size_t Nb=bJets.size();
            size_t Nj=nonbJets.size();

            // Leptons = electrons + muons
            vector<const HEPUtils::Particle*> leptons;
            leptons=electrons;
            leptons.insert(leptons.end(),muons.begin(),muons.end());
            sort(leptons.begin(),leptons.end(),comparePt);

            // At least two light leptons
            if (leptons.size()<2) return;

            // Triggers
            bool pure_dilepton_trigger=false;
            // Leading electron (muon) PT > 23 (17) GeV
            // Subleading electron (muon) PT > 12 (8) GeV
            if (leptons[0]->pT() > ( abs(leptons[0]->pid()) == 11 ? 23 : 17 ) \
            and leptons[1]->pT() > ( abs(leptons[1]->pid()) == 11 ? 12 : 8 ) ){
                pure_dilepton_trigger = true;
            }
            if ( not pure_dilepton_trigger and HT<300 ) return;
            _cutflow.fill(1); // Trigger and >=2 leptons

            // Find pair same sign (SS) leptons
            vector<size_t> SS_1,SS_2;
            for (size_t i=0; i<leptons.size(); ++i) {
                for (size_t j=i+1; j<leptons.size(); ++j) {
                    if (leptons[i]->pid()*leptons[j]->pid()>0 and (leptons[i]->mom()+leptons[j]->mom()).m()>8){
                        SS_1.push_back(i);
                        SS_2.push_back(j);
                    }
                }
            }

            // At least one SS lepton pair ( with an invari-ant mass above 8 GeV )
            if (SS_1.size()==0) return;
            _cutflow.fill(2); // At least one SS lepton pair

            // An additional loose lepton forms an opposite-sign same-flavor pair
            // withone of the two SS leptons, with an invariant mass less than 12 GeV
            // or between 76 and 106 GeV
            if (leptons.size()>2){
                for (size_t i=0; i<SS_1.size(); ++i) {
                    for (size_t j=0; j<leptons.size(); ++j) {
                        if ( j != SS_1[i] and j != SS_2[i]) {
                            if (leptons[j]->pid()+leptons[SS_1[i]]->pid()==0){
                                double mll_additional = (leptons[j]->mom()+leptons[SS_1[i]]->mom()).m();
                                if ( mll_additional < 12 or (mll_additional>76 and mll_additional<106)) return;
                            }
                            if (leptons[j]->pid()+leptons[SS_2[i]]->pid()==0){
                                double mll_additional = (leptons[j]->mom()+leptons[SS_2[i]]->mom()).m();
                                if ( mll_additional < 12 or (mll_additional>76 and mll_additional<106)) return;
                            }
                        }
                    }
                }
            }


            // At least two jets and MET>50
            if ( nonbJets.size()<2 or  met<50) return;
            _cutflow.fill(3); // Baseline (two jets and MET>50 GeV)

            // M_T^{miss}
            // The smallest of the transverse masses constructed between p^miss_T and each of the leptons.
            double MTmiss = 9999;
            for (const HEPUtils::Particle* lep : leptons) {
                double MTmiss_temp = sqrt(2.*lep->pT()*met*(1. - cos(lep->mom().deltaPhi(ptot))));
                if (MTmiss_temp<MTmiss) {
                    MTmiss = MTmiss_temp;
                }
            }

            bool pp = leptons[SS_1[0]]->pid()>0; // TODO: Not sure which lepton pair.
            bool met_50_200 = met>50 and met<200;
            bool met_200_300 = met>200 and met<300;
            bool met_300_500 = met>300 and met<500;
            bool met_500 = met>500;
            bool MTmiss_l_120 = MTmiss<120;
            bool MTmiss_g_120 = MTmiss>120;
            bool Nj_2_4 = Nj>=2 and Nj<=4;
            bool Nj_5 = Nj>=5;
            bool HT_300 = HT<300;
            bool HT_300_1125 = HT>300 and HT<1125;
            bool HT_1125_1300 = HT>1125 and HT<1300;
            bool HT_1300_1600 = HT>1300 and HT<1600;
            bool HT_1300 = HT>1300;
            bool HT_1600 = HT>1600;
            bool SSHH_combine = (MTmiss_l_120 and met_50_200   and Nj_5 and HT_300) or \
                                (MTmiss_l_120 and met_200_300           and HT_300) or \
                                (MTmiss_g_120 and met<300               and HT_300);

            // SR HH
            if ( leptons[SS_1[0]]->pT() > 25. and leptons[SS_2[0]]->pT() > 25.) {
                if (Nb==0) {
                    if (MTmiss_l_120 and met_50_200  and Nj_2_4 and HT_300)               _counters.at("SRHH-0").add_event(event);
                    if (MTmiss_l_120 and met_50_200  and Nj_2_4 and HT_300_1125)          _counters.at("SRHH-1").add_event(event);
                    if (SSHH_combine)                                                     _counters.at("SRHH-2").add_event(event);
                    if (MTmiss_l_120 and met_50_200  and Nj_5   and HT_300_1125)          _counters.at("SRHH-3").add_event(event);
                    if (MTmiss_l_120 and met_200_300 and Nj_2_4 and HT_300_1125 and pp)   _counters.at("SRHH-4").add_event(event);
                    if (MTmiss_l_120 and met_200_300 and Nj_2_4 and HT_300_1125 and !pp)  _counters.at("SRHH-5").add_event(event);
                    if (MTmiss_l_120 and met_200_300 and Nj_5   and HT_300_1125)          _counters.at("SRHH-6").add_event(event);
                    if (MTmiss_g_120 and met_50_200  and Nj_2_4 and HT_300_1125 and pp)   _counters.at("SRHH-7").add_event(event);
                    if (MTmiss_g_120 and met_50_200  and Nj_2_4 and HT_300_1125 and !pp)  _counters.at("SRHH-8").add_event(event);
                    if (MTmiss_g_120 and((met_50_200&&Nj_5)||met_200_300)and HT_300_1125) _counters.at("SRHH-9").add_event(event);
                } else if (Nb==1) {
                    if (MTmiss_l_120 and met_50_200  and Nj_2_4 and HT_300)              _counters.at("SRHH-10").add_event(event);
                    if (MTmiss_l_120 and met_50_200  and Nj_2_4 and HT_300_1125)         _counters.at("SRHH-11").add_event(event);
                    if (SSHH_combine and pp)                                             _counters.at("SRHH-12").add_event(event);
                    if (SSHH_combine and !pp)                                            _counters.at("SRHH-13").add_event(event);
                    if (MTmiss_l_120 and met_50_200  and Nj_5   and HT_300_1125 and pp)  _counters.at("SRHH-14").add_event(event);
                    if (MTmiss_l_120 and met_50_200  and Nj_5   and HT_300_1125 and !pp) _counters.at("SRHH-15").add_event(event);
                    if (MTmiss_l_120 and met_200_300 and Nj_2_4 and HT_300_1125 and pp)  _counters.at("SRHH-16").add_event(event);
                    if (MTmiss_l_120 and met_200_300 and Nj_2_4 and HT_300_1125 and !pp) _counters.at("SRHH-17").add_event(event);
                    if (MTmiss_l_120 and met_200_300 and Nj_5   and HT_300_1125)         _counters.at("SRHH-18").add_event(event);
                    if (MTmiss_g_120 and met_50_200  and Nj_2_4 and HT_300_1125 and pp)  _counters.at("SRHH-19").add_event(event);
                    if (MTmiss_g_120 and met_50_200  and Nj_2_4 and HT_300_1125 and !pp) _counters.at("SRHH-20").add_event(event);
                    if (MTmiss_g_120 and((met_50_200&&Nj_5)||met_200_300)and HT_300_1125) _counters.at("SRHH-21").add_event(event);
                } else if (Nb==2){
                    if (MTmiss_l_120 and met_50_200  and Nj_2_4 and HT_300)              _counters.at("SRHH-22").add_event(event);
                    if (MTmiss_l_120 and met_50_200  and Nj_2_4 and HT_300_1125)         _counters.at("SRHH-23").add_event(event);
                    if (SSHH_combine and pp)                                             _counters.at("SRHH-24").add_event(event);
                    if (SSHH_combine and !pp)                                            _counters.at("SRHH-25").add_event(event);
                    if (MTmiss_l_120 and met_50_200  and Nj_5   and HT_300_1125 and pp)  _counters.at("SRHH-26").add_event(event);
                    if (MTmiss_l_120 and met_50_200  and Nj_5   and HT_300_1125 and !pp) _counters.at("SRHH-27").add_event(event);
                    if (MTmiss_l_120 and met_200_300 and Nj_2_4 and HT_300_1125 and pp)  _counters.at("SRHH-28").add_event(event);
                    if (MTmiss_l_120 and met_200_300 and Nj_2_4 and HT_300_1125 and !pp) _counters.at("SRHH-29").add_event(event);
                    if (MTmiss_l_120 and met_200_300 and Nj_5   and HT_300_1125)         _counters.at("SRHH-30").add_event(event);
                    if (MTmiss_g_120 and met_50_200  and Nj_2_4 and HT_300_1125 and pp)  _counters.at("SRHH-31").add_event(event);
                    if (MTmiss_g_120 and met_50_200  and Nj_2_4 and HT_300_1125 and !pp) _counters.at("SRHH-32").add_event(event);
                    if (MTmiss_g_120 and((met_50_200&&Nj_5)||met_200_300)and HT_300_1125) _counters.at("SRHH-33").add_event(event);
                } else if (Nb>=3){
                    if (MTmiss_l_120 and met<300                and HT_300 and pp)       _counters.at("SRHH-34").add_event(event);
                    if (MTmiss_l_120 and met<300                and HT_300 and !pp)      _counters.at("SRHH-35").add_event(event);
                    if (MTmiss_l_120 and met_50_200             and HT_300_1125 and pp)  _counters.at("SRHH-36").add_event(event);
                    if (MTmiss_l_120 and met_50_200             and HT_300_1125 and !pp) _counters.at("SRHH-37").add_event(event);
                    if (MTmiss_l_120 and met_200_300            and HT_300_1125)         _counters.at("SRHH-38").add_event(event);
                    if (MTmiss_g_120 and met<300                and HT_300)              _counters.at("SRHH-39").add_event(event);
                    if (MTmiss_g_120 and met<300                and HT_300_1125)         _counters.at("SRHH-40").add_event(event);
                }

                if (met_300_500 and HT>300       and pp)  _counters.at("SRHH-41").add_event(event);
                if (met_300_500 and HT>300       and !pp) _counters.at("SRHH-42").add_event(event);
                if (met_500     and HT>300       and pp)  _counters.at("SRHH-43").add_event(event);
                if (met_500     and HT>300       and !pp) _counters.at("SRHH-44").add_event(event);

                if (met<300     and HT_1125_1300 and pp)  _counters.at("SRHH-45").add_event(event);
                if (met<300     and HT_1125_1300 and !pp) _counters.at("SRHH-46").add_event(event);
                if (met<300     and HT_1300_1600 and pp)  _counters.at("SRHH-47").add_event(event);
                if (met<300     and HT_1300_1600 and !pp) _counters.at("SRHH-48").add_event(event);
                if (met<300     and HT_1600 and pp)  _counters.at("SRHH-48").add_event(event);
                if (met<300     and HT_1600 and !pp) _counters.at("SRHH-50").add_event(event);

            }

            bool SSHL_combine = MTmiss_l_120&&( (met_50_200&&Nj_5) or met_200_300 )&&HT_300 ;

            // SR HL
            if ( leptons[SS_1[0]]->pT() > 25. and leptons[SS_2[0]]->pT() < 25.) {
                if (Nb==0 and MTmiss_l_120) {
                    if ( met_50_200  and Nj_2_4 and HT_300)              _counters.at("SRHL-0").add_event(event);
                    if ( met_50_200  and Nj_2_4 and HT_300_1125)         _counters.at("SRHL-1").add_event(event);
                    if ( SSHL_combine)                                   _counters.at("SRHL-2").add_event(event);
                    if ( met_50_200  and Nj_5 and HT_300_1125)           _counters.at("SRHL-3").add_event(event);
                    if ( met_200_300 and Nj_2_4 and HT_300_1125 and pp)  _counters.at("SRHL-4").add_event(event);
                    if ( met_200_300 and Nj_2_4 and HT_300_1125 and !pp) _counters.at("SRHL-5").add_event(event);
                    if ( met_200_300 and Nj_5 and HT_300_1125)           _counters.at("SRHL-6").add_event(event);
                } else if(Nb==1 and MTmiss_l_120) {
                    if ( met_50_200  and Nj_2_4 and HT_300)              _counters.at("SRHL-7").add_event(event);
                    if ( met_50_200  and Nj_2_4 and HT_300_1125)         _counters.at("SRHL-8").add_event(event);
                    if ( SSHL_combine and pp)                            _counters.at("SRHL-9").add_event(event);
                    if ( SSHL_combine and !pp)                           _counters.at("SRHL-10").add_event(event);
                    if ( met_50_200  and Nj_5 and HT_300_1125 and pp)    _counters.at("SRHL-11").add_event(event);
                    if ( met_50_200  and Nj_5 and HT_300_1125 and !pp)   _counters.at("SRHL-12").add_event(event);
                    if ( met_200_300 and Nj_2_4 and HT_300_1125 and pp)  _counters.at("SRHL-13").add_event(event);
                    if ( met_200_300 and Nj_2_4 and HT_300_1125 and !pp) _counters.at("SRHL-14").add_event(event);

                    if ( met_200_300 and Nj_5 and HT_300_1125 and pp)    _counters.at("SRHL-15").add_event(event);
                    if ( met_200_300 and Nj_5 and HT_300_1125 and !pp)   _counters.at("SRHL-16").add_event(event);
                } else if(Nb==2 and MTmiss_l_120) {
                    if ( met_50_200  and Nj_2_4 and HT_300)              _counters.at("SRHL-17").add_event(event);
                    if ( met_50_200  and Nj_2_4 and HT_300_1125)         _counters.at("SRHL-18").add_event(event);
                    if ( SSHL_combine and pp)                            _counters.at("SRHL-19").add_event(event);
                    if ( SSHL_combine and !pp)                           _counters.at("SRHL-20").add_event(event);
                    if ( met_50_200  and Nj_5 and HT_300_1125 and pp)    _counters.at("SRHL-21").add_event(event);
                    if ( met_50_200  and Nj_5 and HT_300_1125 and !pp)   _counters.at("SRHL-22").add_event(event);
                    if ( met_200_300 and Nj_2_4 and HT_300_1125 and pp)  _counters.at("SRHL-23").add_event(event);
                    if ( met_200_300 and Nj_2_4 and HT_300_1125 and !pp) _counters.at("SRHL-24").add_event(event);
                    if ( met_200_300 and Nj_5 and HT_300_1125)           _counters.at("SRHL-25").add_event(event);
                }else if(Nb==3 and MTmiss_l_120) {
                    if ( met_50_200 and HT_300 and pp)                   _counters.at("SRHL-26").add_event(event);
                    if ( met_50_200 and HT_300 and !pp)                  _counters.at("SRHL-27").add_event(event);
                    if ( met_50_200 and HT_300_1125 and pp)              _counters.at("SRHL-28").add_event(event);
                    if ( met_50_200 and HT_300_1125 and !pp)             _counters.at("SRHL-29").add_event(event);
                    if ( met_200_300 and HT_300_1125)                    _counters.at("SRHL-30").add_event(event);
                }
                if (MTmiss_g_120 and met<300 and HT_300)       _counters.at("SRHL-31").add_event(event);
                if (MTmiss_g_120 and met<300 and HT_300_1125)  _counters.at("SRHL-32").add_event(event);

                if (met_300_500  and HT>300 and pp)  _counters.at("SRHL-33").add_event(event);
                if (met_300_500  and HT>300 and !pp) _counters.at("SRHL-34").add_event(event);
                if (met_500      and HT>300 and pp)  _counters.at("SRHL-35").add_event(event);
                if (met_500      and HT>300 and !pp) _counters.at("SRHL-36").add_event(event);

                if (met<300      and HT_1125_1300 and pp)  _counters.at("SRHL-37").add_event(event);
                if (met<300      and HT_1125_1300 and !pp) _counters.at("SRHL-38").add_event(event);
                if (met<300      and HT_1300 and pp)       _counters.at("SRHL-39").add_event(event);
                if (met<300      and HT_1300 and !pp)      _counters.at("SRHL-40").add_event(event);
            }

            // SR LL
            if (leptons[SS_1[0]]->pT() < 25. and leptons[SS_2[0]]->pT() < 25.) {
                if (HT>300) {
                    if (MTmiss_l_120) {
                        if (Nb==0) {
                            if (met_50_200) _counters.at("SRLL-0").add_event(event);
                            else            _counters.at("SRLL-1").add_event(event);
                        } else if (Nb==1) {
                            if (met_50_200) _counters.at("SRLL-2").add_event(event);
                            else            _counters.at("SRLL-3").add_event(event);
                        } else if (Nb==2) {
                            if (met_50_200) _counters.at("SRLL-4").add_event(event);
                            else            _counters.at("SRLL-5").add_event(event);
                        } else if (Nb>=3)   _counters.at("SRLL-6").add_event(event);
                    } else                  _counters.at("SRLL-7").add_event(event);
                }
            }

            // Inclusive SR
            if (  leptons[SS_1[0]]->pT() > 25. and leptons[SS_2[0]]->pT() > 25. ) {
                // Nj>=2 and met>50 have been applied
                if ( Nb==0 and HT>=1200)               _counters.at("SRinc-0").add_event(event);
                if ( Nb>=2 and HT>=1100)               _counters.at("SRinc-1").add_event(event);
                if ( Nb==0 and met>450)                _counters.at("SRinc-2").add_event(event);
                if ( Nb>=2 and met>300)                _counters.at("SRinc-3").add_event(event);
                if ( Nb==0 and met>250 and MTmiss>120) _counters.at("SRinc-4").add_event(event);
                if ( Nb>=2 and met>150 and MTmiss>120) _counters.at("SRinc-5").add_event(event);
                if ( Nb==0 and HT>900 and met>200)     _counters.at("SRinc-6").add_event(event);
                if ( Nb>=2 and HT>900 and met>200)     _counters.at("SRinc-7").add_event(event);
                if ( Nj>=7)                            _counters.at("SRinc-8").add_event(event);
                if ( Nj>=4 and MTmiss>120)             _counters.at("SRinc-9").add_event(event);
                if ( Nb>=3)                            _counters.at("SRinc-10").add_event(event);
                if ( HT>700)                           _counters.at("SRinc-11").add_event(event);
            }

            if (  leptons[SS_1[0]]->pT() < 25. and leptons[SS_2[0]]->pT() < 25. ) {
                // Nj>=2 and met>50 have been applied
                if (met>200) _counters.at("SRinc-12").add_event(event);
                if (Nj>=5)   _counters.at("SRinc-13").add_event(event);
                if (Nb>=3)   _counters.at("SRinc-14").add_event(event);
            }

            // Exclusive SR
            if (  leptons[SS_1[0]]->pT() > 25. and leptons[SS_2[0]]->pT() > 25. ) {
                // Nj>=2 and met>50 have been applied
                if (Nb==0 and met<300 and HT<1125 and (HT<300 or MTmiss<120)) _counters.at("SRexc-0").add_event(event);
                if (Nb==0 and met<300 and HT<1125 and HT>300 and MTmiss>120)  _counters.at("SRexc-1").add_event(event);
                if (Nb==1 and met<300 and HT<1125 and (HT<300 or MTmiss<120)) _counters.at("SRexc-2").add_event(event);
                if (Nb==1 and met<300 and HT<1125 and HT>300 and MTmiss>120)  _counters.at("SRexc-3").add_event(event);
                if (Nb==2 and met<300 and HT<1125 and (HT<300 or MTmiss<120)) _counters.at("SRexc-4").add_event(event);
                if (Nb==2 and met<300 and HT<1125 and HT>300 and MTmiss>120)  _counters.at("SRexc-5").add_event(event);
                if (Nb>=3 and met<300 and HT<1125 and (HT<300 or MTmiss<120)) _counters.at("SRexc-6").add_event(event);
                if (Nb>=3 and met<300 and HT<1125 and HT>300 and MTmiss>120)  _counters.at("SRexc-7").add_event(event);
                if (          met>300 and             HT>300)                 _counters.at("SRexc-8").add_event(event);
                if (          met<300 and HT>1125)                            _counters.at("SRexc-9").add_event(event);
            }

            if (  leptons[SS_1[0]]->pT() > 25. and leptons[SS_2[0]]->pT() < 25. ) {
                // Nj>=2 and met>50 have been applied
                if (met<300 and HT<1125 and MTmiss<120) _counters.at("SRexc-10").add_event(event);
                if (met<300 and HT<1125 and MTmiss>120) _counters.at("SRexc-11").add_event(event);
                if (met>300 and HT>300)                 _counters.at("SRexc-12").add_event(event);
                if (met<300 and HT>1125)                _counters.at("SRexc-13").add_event(event);
            }
            if (  leptons[SS_1[0]]->pT() < 25. and leptons[SS_2[0]]->pT() < 25. ) {
                // Nj>=2 and met>50 have been applied
                if (HT>300) _counters.at("SRexc-14").add_event(event);
            }

            return;
        }

        /// Combine the variables of another copy of this analysis (typically on another thread) into this one.
        void combine(const Analysis* other)
        {
            const Analysis_CMS_13TeV_2SSLEP_Stop_36invfb* specificOther
                = dynamic_cast<const Analysis_CMS_13TeV_2SSLEP_Stop_36invfb*>(other);
            for (auto& pair : _counters) { pair.second += specificOther->_counters.at(pair.first); }
        }


        void collect_results() {

            #ifdef CHECK_CUTFLOW
            cout << _cutflow << endl;
            #endif

            // HH
            add_result(SignalRegionData(_counters.at("SRHH-0"), 435, {468, 98}));
            add_result(SignalRegionData(_counters.at("SRHH-1"), 166, {162, 25}));
            add_result(SignalRegionData(_counters.at("SRHH-2"), 30, {24.4, 5.4}));
            add_result(SignalRegionData(_counters.at("SRHH-3"), 24, {17.6, 3.0}));
            add_result(SignalRegionData(_counters.at("SRHH-4"), 22, {17.8, 3.9}));
            add_result(SignalRegionData(_counters.at("SRHH-5"), 6, {7.8, 1.5}));
            add_result(SignalRegionData(_counters.at("SRHH-6"), 2, {1.96, 0.47}));
            add_result(SignalRegionData(_counters.at("SRHH-7"), 5, {4.58, 0.81}));
            add_result(SignalRegionData(_counters.at("SRHH-8"), 3, {3.63, 0.75}));
            add_result(SignalRegionData(_counters.at("SRHH-9"), 3, {2.82, 0.56}));
            add_result(SignalRegionData(_counters.at("SRHH-10"), 304, {313, 87}));
            add_result(SignalRegionData(_counters.at("SRHH-11"), 111, {104, 20}));
            add_result(SignalRegionData(_counters.at("SRHH-12"), 13, {9.5, 1.9}));
            add_result(SignalRegionData(_counters.at("SRHH-13"), 11, {8.7, 2.0}));
            add_result(SignalRegionData(_counters.at("SRHH-14"), 17, {14.4, 2.9}));
            add_result(SignalRegionData(_counters.at("SRHH-15"), 10, {12.7, 2.6}));
            add_result(SignalRegionData(_counters.at("SRHH-16"), 11, {7.3, 1.2}));
            add_result(SignalRegionData(_counters.at("SRHH-17"), 2, {3.92, 0.79}));
            add_result(SignalRegionData(_counters.at("SRHH-18"), 3, {3.26, 0.74}));
            add_result(SignalRegionData(_counters.at("SRHH-19"), 4, {2.6, 2.7}));
            add_result(SignalRegionData(_counters.at("SRHH-20"), 3, {3.02, 0.75}));
            add_result(SignalRegionData(_counters.at("SRHH-21"), 1, {2.8, 0.57}));
            add_result(SignalRegionData(_counters.at("SRHH-22"), 90, {70, 12}));
            add_result(SignalRegionData(_counters.at("SRHH-23"), 40, {35.7, 5.9}));
            add_result(SignalRegionData(_counters.at("SRHH-24"), 2, {3.99, 0.73}));
            add_result(SignalRegionData(_counters.at("SRHH-25"), 0, {2.68, 0.8}));
            add_result(SignalRegionData(_counters.at("SRHH-26"), 9, {9.7, 1.8}));
            add_result(SignalRegionData(_counters.at("SRHH-27"), 8, {7.9, 2.5}));
            add_result(SignalRegionData(_counters.at("SRHH-28"), 1, {2.78, 0.58}));
            add_result(SignalRegionData(_counters.at("SRHH-29"), 1, {1.86, 0.38}));
            add_result(SignalRegionData(_counters.at("SRHH-30"), 1, {2.2, 0.54}));
            add_result(SignalRegionData(_counters.at("SRHH-31"), 5, {1.85, 0.39}));
            add_result(SignalRegionData(_counters.at("SRHH-32"), 0, {1.2, 0.32}));
            add_result(SignalRegionData(_counters.at("SRHH-33"), 3, {1.81, 0.42}));
            add_result(SignalRegionData(_counters.at("SRHH-34"), 1, {1.98, 0.61}));
            add_result(SignalRegionData(_counters.at("SRHH-35"), 2, {1.43, 0.37}));
            add_result(SignalRegionData(_counters.at("SRHH-36"), 2, {4.2, 1.3}));
            add_result(SignalRegionData(_counters.at("SRHH-37"), 4, {3.04, 0.68}));
            add_result(SignalRegionData(_counters.at("SRHH-38"), 1, {0.63, 0.17}));
            add_result(SignalRegionData(_counters.at("SRHH-39"), 0, {0.29, 0.34}));
            add_result(SignalRegionData(_counters.at("SRHH-40"), 3, {0.8, 0.22}));
            add_result(SignalRegionData(_counters.at("SRHH-41"), 19, {13.4, 1.9}));
            add_result(SignalRegionData(_counters.at("SRHH-42"), 8, {8.0, 3.0}));
            add_result(SignalRegionData(_counters.at("SRHH-43"), 3, {3.33, 0.74}));
            add_result(SignalRegionData(_counters.at("SRHH-44"), 1, {0.94, 0.26}));
            add_result(SignalRegionData(_counters.at("SRHH-45"), 3, {2.92, 0.5}));
            add_result(SignalRegionData(_counters.at("SRHH-46"), 3, {1.78, 0.42}));
            add_result(SignalRegionData(_counters.at("SRHH-47"), 5, {1.95, 0.39}));
            add_result(SignalRegionData(_counters.at("SRHH-48"), 3, {1.23, 0.3}));
            add_result(SignalRegionData(_counters.at("SRHH-49"), 0, {1.46, 0.31}));
            add_result(SignalRegionData(_counters.at("SRHH-50"), 0, {0.74, 0.18}));

            // HL
            add_result(SignalRegionData(_counters.at("SRHL-0"), 442, {419, 100}));
            add_result(SignalRegionData(_counters.at("SRHL-1"), 101, {100, 20}));
            add_result(SignalRegionData(_counters.at("SRHL-2"), 6, {9.2, 2.4}));
            add_result(SignalRegionData(_counters.at("SRHL-3"), 13, {15.0, 4.5}));
            add_result(SignalRegionData(_counters.at("SRHL-4"), 14, {7.3, 1.5}));
            add_result(SignalRegionData(_counters.at("SRHL-5"), 5, {4.1, 1.2}));
            add_result(SignalRegionData(_counters.at("SRHL-6"), 0, {1.01, 0.28}));
            add_result(SignalRegionData(_counters.at("SRHL-7"), 346, {300, 82}));
            add_result(SignalRegionData(_counters.at("SRHL-8"), 95, {73, 17}));
            add_result(SignalRegionData(_counters.at("SRHL-9"), 1, {2.3, 0.61}));
            add_result(SignalRegionData(_counters.at("SRHL-10"), 1, {2.24, 0.87}));
            add_result(SignalRegionData(_counters.at("SRHL-11"), 12, {12.8, 3.3}));
            add_result(SignalRegionData(_counters.at("SRHL-12"), 8, {8.9, 2.3}));
            add_result(SignalRegionData(_counters.at("SRHL-13"), 5, {4.5, 1.3}));
            add_result(SignalRegionData(_counters.at("SRHL-14"), 4, {4.7, 1.6}));
            add_result(SignalRegionData(_counters.at("SRHL-15"), 1, {2.3, 1.1}));
            add_result(SignalRegionData(_counters.at("SRHL-16"), 1, {0.73, 0.29}));
            add_result(SignalRegionData(_counters.at("SRHL-17"), 62, {54, 12}));
            add_result(SignalRegionData(_counters.at("SRHL-18"), 24, {23.7, 4.9}));
            add_result(SignalRegionData(_counters.at("SRHL-19"), 2, {0.59, 0.17}));
            add_result(SignalRegionData(_counters.at("SRHL-20"), 1, {0.34, 0.2}));
            add_result(SignalRegionData(_counters.at("SRHL-21"), 9, {5.2, 1.2}));
            add_result(SignalRegionData(_counters.at("SRHL-22"), 6, {4.9, 1.4}));
            add_result(SignalRegionData(_counters.at("SRHL-23"), 0, {0.97, 0.27}));
            add_result(SignalRegionData(_counters.at("SRHL-24"), 0, {1.79, 0.74}));
            add_result(SignalRegionData(_counters.at("SRHL-25"), 1, {1.01, 0.27}));
            add_result(SignalRegionData(_counters.at("SRHL-26"), 1, {1.03, 0.44}));
            add_result(SignalRegionData(_counters.at("SRHL-27"), 0, {1.33, 0.61}));
            add_result(SignalRegionData(_counters.at("SRHL-28"), 3, {2.89, 0.99}));
            add_result(SignalRegionData(_counters.at("SRHL-29"), 2, {2.24, 0.79}));
            add_result(SignalRegionData(_counters.at("SRHL-30"), 1, {0.27, 0.3}));
            add_result(SignalRegionData(_counters.at("SRHL-31"), 1, {0.79, 0.33}));
            add_result(SignalRegionData(_counters.at("SRHL-32"), 0, {0.53, 0.13}));
            add_result(SignalRegionData(_counters.at("SRHL-33"), 6, {6.3, 1.3}));
            add_result(SignalRegionData(_counters.at("SRHL-34"), 3, {2.92, 0.87}));
            add_result(SignalRegionData(_counters.at("SRHL-35"), 3, {0.51, 0.15}));
            add_result(SignalRegionData(_counters.at("SRHL-36"), 0, {0.15, 0.07}));
            add_result(SignalRegionData(_counters.at("SRHL-37"), 3, {1.07, 0.33}));
            add_result(SignalRegionData(_counters.at("SRHL-38"), 0, {0.81, 0.47}));
            add_result(SignalRegionData(_counters.at("SRHL-39"), 4, {1.54, 0.5}));
            add_result(SignalRegionData(_counters.at("SRHL-40"), 1, {1.23, 0.53}));

            // LL
            add_result(SignalRegionData(_counters.at("SRLL-0"), 12, {12.0, 3.9}));
            add_result(SignalRegionData(_counters.at("SRLL-1"), 3, {1.88, 0.62}));
            add_result(SignalRegionData(_counters.at("SRLL-2"), 17, {15.5, 4.7}));
            add_result(SignalRegionData(_counters.at("SRLL-3"), 4, {1.42, 0.69}));
            add_result(SignalRegionData(_counters.at("SRLL-4"), 5, {4.2, 1.4}));
            add_result(SignalRegionData(_counters.at("SRLL-5"), 2, {0.84, 0.48}));
            add_result(SignalRegionData(_counters.at("SRLL-6"), 0, {0.95, 0.52}));
            add_result(SignalRegionData(_counters.at("SRLL-7"), 0, {0.09, 0.07}));

            return;
        }

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

    };


    DEFINE_ANALYSIS_FACTORY(CMS_13TeV_2SSLEP_Stop_36invfb)

    //
    // Derived analysis class for the 2Lep0Jets SRs
    //
    class Analysis_CMS_13TeV_2SSLEP_Stop_inclusive_36invfb : public Analysis_CMS_13TeV_2SSLEP_Stop_36invfb {

    public:
      Analysis_CMS_13TeV_2SSLEP_Stop_inclusive_36invfb() {
        set_analysis_name("CMS_13TeV_2SSLEP_Stop_inclusive_36invfb");
      }

        virtual void collect_results() {

            // inc
            add_result(SignalRegionData(_counters.at("SRinc-0"), 10, {4.0, 0.79}));
            add_result(SignalRegionData(_counters.at("SRinc-1"), 4, {3.63, 0.71}));
            add_result(SignalRegionData(_counters.at("SRinc-2"), 4, {3.72, 0.83}));
            add_result(SignalRegionData(_counters.at("SRinc-3"), 6, {3.32, 0.81}));
            add_result(SignalRegionData(_counters.at("SRinc-4"), 2, {1.68, 0.44}));
            add_result(SignalRegionData(_counters.at("SRinc-5"), 7, {3.82, 0.76}));
            add_result(SignalRegionData(_counters.at("SRinc-6"), 10, {5.6, 1.1}));
            add_result(SignalRegionData(_counters.at("SRinc-7"), 9, {5.8, 1.3}));
            add_result(SignalRegionData(_counters.at("SRinc-8"), 9, {10.1, 2.7}));
            add_result(SignalRegionData(_counters.at("SRinc-9"), 22, {15.2, 3.5}));
            add_result(SignalRegionData(_counters.at("SRinc-10"), 17, {13.3, 3.4}));
            add_result(SignalRegionData(_counters.at("SRinc-11"), 3, {3.6, 2.5}));
            add_result(SignalRegionData(_counters.at("SRinc-12"), 10, {4.9, 2.9}));
            add_result(SignalRegionData(_counters.at("SRinc-13"), 6, {7.3, 5.5}));
            add_result(SignalRegionData(_counters.at("SRinc-14"), 0, {1.06, 0.99}));

        }

    };

    // Factory fn
    DEFINE_ANALYSIS_FACTORY(CMS_13TeV_2SSLEP_Stop_inclusive_36invfb)

    //
    // Derived analysis class for the 2Lep0Jets SRs
    //
    class Analysis_CMS_13TeV_2SSLEP_Stop_exclusive_36invfb : public Analysis_CMS_13TeV_2SSLEP_Stop_36invfb {

    public:
      Analysis_CMS_13TeV_2SSLEP_Stop_exclusive_36invfb() {
        set_analysis_name("CMS_13TeV_2SSLEP_Stop_exclusive_36invfb");
      }

        virtual void collect_results() {

            // exc
            add_result(SignalRegionData(_counters.at("SRexc-0"), 685, {700, 130}));
            add_result(SignalRegionData(_counters.at("SRexc-1"), 11, {11.0, 2.2}));
            add_result(SignalRegionData(_counters.at("SRexc-2"), 482, {477, 120}));
            add_result(SignalRegionData(_counters.at("SRexc-3"), 8, {8.4, 3.5}));
            add_result(SignalRegionData(_counters.at("SRexc-4"), 152, {137, 25}));
            add_result(SignalRegionData(_counters.at("SRexc-5"), 8, {4.9, 1.2}));
            add_result(SignalRegionData(_counters.at("SRexc-6"), 10, {11.6, 3.1}));
            add_result(SignalRegionData(_counters.at("SRexc-7"), 3, {0.8, 0.24}));
            add_result(SignalRegionData(_counters.at("SRexc-8"), 31, {25.7, 5.4}));
            add_result(SignalRegionData(_counters.at("SRexc-9"), 14, {10.1, 2.2}));
            add_result(SignalRegionData(_counters.at("SRexc-10"), 1167, {1070, 250}));
            add_result(SignalRegionData(_counters.at("SRexc-11"), 1, {1.33, 0.46}));
            add_result(SignalRegionData(_counters.at("SRexc-12"), 12, {9.9, 2.5}));
            add_result(SignalRegionData(_counters.at("SRexc-13"), 8, {4.7, 1.8}));
            add_result(SignalRegionData(_counters.at("SRexc-14"), 43, {37, 12}));

            static const vector< vector<double> > BKGCOV = {
                {17559.1, 111.4, 13059.1, 136.0, 1982.8, 34.0, 187.1, 14.8, 260.9, 80.2, 26183.7, 21.0, 134.9, 78.2, 987.5},
                {111.4, 3.8, 85.1, 1.9, 20.0, 0.6, 2.5, 0.2, 3.9, 1.7, 186.6, 0.2, 1.3, 0.8, 6.6},
                {13059.1, 85.1, 12489.9, 102.2, 1847.0, 32.4, 158.8, 11.1, 179.7, 58.6, 23663.6, 19.6, 123.0, 63.8, 881.1},
                {136.0, 1.9, 102.2, 10.4, 28.8, 1.1, 3.8, 0.3, 6.3, 2.3, 210.4, 0.3, 1.9, 1.4, 8.5},
                {1982.8, 20.0, 1847.0, 28.8, 525.1, 11.2, 36.6, 2.5, 43.8, 18.3, 3573.7, 3.7, 24.4, 12.8, 139.8},
                {34.0, 0.6, 32.4, 1.1, 11.2, 1.1, 1.3, 0.1, 1.8, 0.7, 60.2, 0.1, 0.7, 0.4, 2.4},
                {187.1, 2.5, 158.8, 3.8, 36.6, 1.3, 9.1, 0.3, 6.3, 2.4, 320.9, 0.3, 2.3, 1.4, 12.5},
                {14.8, 0.2, 11.1, 0.3, 2.5, 0.1, 0.3, 0.1, 0.5, 0.2, 21.4, 0.0, 0.2, 0.1, 0.8},
                {260.9, 3.9, 179.7, 6.3, 43.8, 1.8, 6.3, 0.5, 25.7, 3.6, 345.5, 0.4, 2.9, 2.3, 14.5},
                {80.2, 1.7, 58.6, 2.3, 18.3, 0.7, 2.4, 0.2, 3.6, 4.0, 126.8, 0.2, 1.2, 0.9, 4.2},
                {26183.7, 186.6, 23663.6, 210.4, 3573.7, 60.2, 320.9, 21.4, 345.5, 126.8, 60200.4, 45.8, 307.4, 170.1, 1998.6},
                {21.0, 0.2, 19.6, 0.3, 3.7, 0.1, 0.3, 0.0, 0.4, 0.2, 45.8, 0.2, 0.3, 0.1, 1.7},
                {134.9, 1.3, 123.0, 1.9, 24.4, 0.7, 2.3, 0.2, 2.9, 1.2, 307.4, 0.3, 6.2, 1.1, 11.2},
                {78.2, 0.8, 63.8, 1.4, 12.8, 0.4, 1.4, 0.1, 2.3, 0.9, 170.1, 0.1, 1.1, 3.3, 6.0},
                {987.5, 6.6, 881.1, 8.5, 139.8, 2.4, 12.5, 0.8, 14.5, 4.2, 1998.6, 1.7, 11.2, 6.0, 135.5}
            };

            set_covariance(BKGCOV);

        }

    };

    // Factory fn
    DEFINE_ANALYSIS_FACTORY(CMS_13TeV_2SSLEP_Stop_exclusive_36invfb)

  }
}

Updated on 2024-07-18 at 13:53:35 +0000