file analyses/Analysis_CMS_13TeV_2OSLEP_137invfb.cpp
[No description available]
Namespaces
| Name |
|---|
| Gambit TODO: see if we can use this one: |
| Gambit::ColliderBit |
Classes
Source code
///
/// \author Yang Zhang
/// \date 2021 June
///
/// \author Anders Kvellestad
/// \date 2024 Feb
///
/// *********************************************
// Based on http://cms-results.web.cern.ch/cms-results/public-results/publications/SUS-20-001/index.html
// Search for supersymmetry in final states with two oppositely charged same-flavor leptons and missing transverse momentum in proton-proton collisions at s√= 13 TeV
//
// * No preselection
#include <vector>
#include <cmath>
#include <memory>
#include <iomanip>
#include <fstream>
#include "fastjet/contrib/SoftDrop.hh"
#include "gambit/ColliderBit/analyses/Analysis.hpp"
#include "gambit/ColliderBit/CMSEfficiencies.hpp"
#include "gambit/ColliderBit/mt2_bisect.h"
using namespace std;
namespace Gambit
{
namespace ColliderBit
{
// This analysis class is also a base class for the classes
//
// - CMS_13TeV_2OSLEP_Strong_Production_137invfb
// - CMS_13TeV_2OSLEP_EW_Production_137invfb
// - CMS_13TeV_2OSLEP_Slepton_137invfb
//
// all defined below. The subclasses make use of the background
// covariance matrices for their respective subset of signal regions.
// This base class contains all SRs and does not make use of the
// background covariance information.
class Analysis_CMS_13TeV_2OSLEP_137invfb : public Analysis
{
protected:
private:
// vector<int> cutFlowVector_1;
// vector<string> cutFlowVector_1_str;
// size_t NCUTS_1;
// vector<int> cutFlowVector_2;
// vector<string> cutFlowVector_2_str;
// size_t NCUTS_2;
// ofstream cutflowFile;
public:
// Required detector sim
static constexpr const char* detector = "CMS";
struct ptComparison
{
bool operator() (const HEPUtils::Particle* i,const HEPUtils::Particle* j) {return (i->pT()>j->pT());}
} comparePt;
struct ptJetComparison
{
bool operator() (const HEPUtils::Jet* i,const HEPUtils::Jet* j) {return (i->pT()>j->pT());}
} compareJetPt;
Analysis_CMS_13TeV_2OSLEP_137invfb()
{
set_analysis_name("CMS_13TeV_2OSLEP_137invfb");
set_detector_name(detector);
set_luminosity(137.);
// Counters for the number of accepted events for each signal region
_counters["SRA_50_100"] = EventCounter("SRA_50_100");
_counters["SRA_100_150"] = EventCounter("SRA_100_150");
_counters["SRA_150_230"] = EventCounter("SRA_150_230");
_counters["SRA_230_300"] = EventCounter("SRA_230_300");
_counters["SRA_300"] = EventCounter("SRA_300");
_counters["SRB_50_100"] = EventCounter("SRB_50_100");
_counters["SRB_100_150"] = EventCounter("SRB_100_150");
_counters["SRB_150_230"] = EventCounter("SRB_150_230");
_counters["SRB_230_300"] = EventCounter("SRB_230_300");
_counters["SRB_300"] = EventCounter("SRB_300");
_counters["SRC_50_100"] = EventCounter("SRC_50_100");
_counters["SRC_100_150"] = EventCounter("SRC_100_150");
_counters["SRC_150_250"] = EventCounter("SRC_150_250");
_counters["SRC_250"] = EventCounter("SRC_250");
_counters["SRAb_50_100"] = EventCounter("SRAb_50_100");
_counters["SRAb_100_150"] = EventCounter("SRAb_100_150");
_counters["SRAb_150_230"] = EventCounter("SRAb_150_230");
_counters["SRAb_230_300"] = EventCounter("SRAb_230_300");
_counters["SRAb_300"] = EventCounter("SRAb_300");
_counters["SRBb_50_100"] = EventCounter("SRBb_50_100");
_counters["SRBb_100_150"] = EventCounter("SRBb_100_150");
_counters["SRBb_150_230"] = EventCounter("SRBb_150_230");
_counters["SRBb_230_300"] = EventCounter("SRBb_230_300");
_counters["SRBb_300"] = EventCounter("SRBb_300");
_counters["SRCb_50_100"] = EventCounter("SRCb_50_100");
_counters["SRCb_100_150"] = EventCounter("SRCb_100_150");
_counters["SRCb_150_250"] = EventCounter("SRCb_150_250");
_counters["SRCb_250"] = EventCounter("SRCb_250");
_counters["SRBoostedVZ_50_100"] = EventCounter("SRBoostedVZ_50_100");
_counters["SRBoostedVZ_100_200"] = EventCounter("SRBoostedVZ_100_200");
_counters["SRBoostedVZ_200_300"] = EventCounter("SRBoostedVZ_200_300");
_counters["SRBoostedVZ_300_400"] = EventCounter("SRBoostedVZ_300_400");
_counters["SRBoostedVZ_400_500"] = EventCounter("SRBoostedVZ_400_500");
_counters["SRBoostedVZ_500"] = EventCounter("SRBoostedVZ_500");
_counters["SRResolvedVZ_50_100"] = EventCounter("SRResolvedVZ_50_100");
_counters["SRResolvedVZ_100_150"] = EventCounter("SRResolvedVZ_100_150");
_counters["SRResolvedVZ_150_250"] = EventCounter("SRResolvedVZ_150_250");
_counters["SRResolvedVZ_250_350"] = EventCounter("SRResolvedVZ_250_350");
_counters["SRResolvedVZ_350"] = EventCounter("SRResolvedVZ_350");
_counters["SRHZ_50_100"] = EventCounter("SRHZ_50_100");
_counters["SRHZ_100_150"] = EventCounter("SRHZ_100_150");
_counters["SRHZ_150_250"] = EventCounter("SRHZ_150_250");
_counters["SRHZ_250"] = EventCounter("SRHZ_250");
_counters["SRoffZ0j_100_150"] = EventCounter("SRoffZ0j_100_150");
_counters["SRoffZ0j_150_225"] = EventCounter("SRoffZ0j_150_225");
_counters["SRoffZ0j_225_300"] = EventCounter("SRoffZ0j_225_300");
_counters["SRoffZ0j_300"] = EventCounter("SRoffZ0j_300");
_counters["SRoffZj_100_150"] = EventCounter("SRoffZj_100_150");
_counters["SRoffZj_150_225"] = EventCounter("SRoffZj_150_225");
_counters["SRoffZj_225_300"] = EventCounter("SRoffZj_225_300");
_counters["SRoffZj_300"] = EventCounter("SRoffZj_300");
// Control regions
// _counters["SRonZ0j_100_150"] = EventCounter("SR on-Z nj=0 [100, 150]");
// _counters["SRonZ0j_150_225"] = EventCounter("SR on-Z nj=0 [150, 225]");
// _counters["SRonZ0j_225_300"] = EventCounter("SR on-Z nj=0 [225, 300]");
// _counters["SRonZ0j_300"] = EventCounter("SR on-Z nj=0 [300, ~]");
// _counters["SRonZj_100_150"] = EventCounter("SR on-Z nj>0 [100, 150]");
// _counters["SRonZj_150_225"] = EventCounter("SR on-Z nj>0 [150, 225]");
// _counters["SRonZj_225_300"] = EventCounter("SR on-Z nj>0 [225, 300]");
// _counters["SRonZj_300"] = EventCounter("SR on-Z nj>0 [300, ~]");
// NCUTS_1=11;
// for (size_t i=0;i<NCUTS_1;i++)
// {
// cutFlowVector_1.push_back(0);
// cutFlowVector_1_str.push_back("");
// }
// cutFlowVector_1_str[0] = "All events";
// cutFlowVector_1_str[1] = "2 OSSF leptons with $p_{T} > 25(20)$ GeV";
// cutFlowVector_1_str[2] = "$P_T^{\ell\ell}$>50 GeV";
// cutFlowVector_1_str[3] = R"($\Delta R(\ell\ell)$>0.1)"; // string literal R"(...)" to avoid compiler warning about the '\D'
// cutFlowVector_1_str[4] = "$m_{\ell}<$65 or >120 GeV";
// cutFlowVector_1_str[5] = "Leading lepton $p_{T} > 50$ GeV";
// cutFlowVector_1_str[6] = "Thied lepton veto";
// cutFlowVector_1_str[7] = "$M_{T2}(ll) > 100 GeV$";
// cutFlowVector_1_str[8] = "$E^{miss}_{T} > 100 GeV$";
// cutFlowVector_1_str[9] = "$n_j>0$,etc.";
// cutFlowVector_1_str[10] = "$n_j=0$";
// NCUTS_2=4;
// for (size_t i=0;i<NCUTS_2;i++)
// {
// cutFlowVector_2.push_back(0);
// cutFlowVector_2_str.push_back("");
// }
// cutFlowVector_2_str[0] = "All events";
// cutFlowVector_2_str[1] = "Baseline preliminary selections";
// cutFlowVector_2_str[2] = "Baseline lepton selections";
// cutFlowVector_2_str[3] = "Signal regions selections";
}
void run(const HEPUtils::Event* event)
{
// cutFlowVector_1[0]++;
// cutFlowVector_2[0]++;
// Baseline objects
double met = event->met();
// Apply electron efficiency and collect baseline electrons
const vector<double> aEl={0., DBL_MAX};
const vector<double> bEl={0., DBL_MAX};
const vector<double> cEl={0.9};
HEPUtils::BinnedFn2D<double> _eff2dEl(aEl,bEl,cEl);
vector<const HEPUtils::Particle*> baselineElectrons;
for (const HEPUtils::Particle* electron : event->electrons())
{
bool isEl=has_tag(_eff2dEl, fabs(electron->eta()), electron->pT());
if (isEl && electron->pT()>8.
&& fabs(electron->eta())<2.4
&& (fabs(electron->eta())<1.4 || fabs(electron->eta())>1.6) )
baselineElectrons.push_back(electron);
}
// Apply muon efficiency and collect baseline muons
const vector<double> aMu={0., DBL_MAX};
const vector<double> bMu={0., DBL_MAX};
const vector<double> cMu={0.99};
HEPUtils::BinnedFn2D<double> _eff2dMu(aMu,bMu,cMu);
vector<const HEPUtils::Particle*> baselineMuons;
for (const HEPUtils::Particle* muon : event->muons())
{
bool isMu=has_tag(_eff2dMu, fabs(muon->eta()), muon->pT());
if (isMu && muon->pT()>8.
&& fabs(muon->eta())<2.4
&& (fabs(muon->eta())<1.4 || fabs(muon->eta())>1.6) )
baselineMuons.push_back(muon);
}
// Baseline photons
vector<const HEPUtils::Particle*> baselinePhotons;
for (const HEPUtils::Particle* photon : event->photons())
{
if (photon->pT()>50.
&& fabs(photon->eta())<2.4
&& (fabs(photon->eta())<1.4 || fabs(photon->eta())>1.6)
&& event->missingmom().deltaPhi(photon->mom())>0.4 )
baselinePhotons.push_back(photon);
}
// Baseline jets
vector<const HEPUtils::Jet*> baselineJets;
for (const HEPUtils::Jet* jet : event->jets("antikt_R04"))
{
if (jet->pT()>25. && fabs(jet->eta())<2.4) baselineJets.push_back(jet);
}
// Baseline Vjets
vector<const HEPUtils::Jet*> baselineVJets;
const double beta = 0.0;
const double z_cut = 0.1;
const double RSD = 0.8;
FJNS::contrib::SoftDrop sd(beta, z_cut, RSD);
// Get jets with anti-kT R=0.8
for (const HEPUtils::Jet* jet : event->jets("antikt_R08"))
{
// High pT requirement
if (jet->pT() > 200. && fabs(jet->eta())<2.4)
{
// Check softdrop mass
FJNS::PseudoJet groomed_jet = sd(jet->pseudojet());
double m = groomed_jet.m();
if (m > 65. && m < 105.)
{
// Accept jet
baselineVJets.push_back(jet);
}
}
}
// Signal objects
vector<const HEPUtils::Particle*> signalLeptons;
vector<const HEPUtils::Particle*> signalElectrons;
vector<const HEPUtils::Particle*> signalMuons;
vector<const HEPUtils::Jet*> signalJets25; // used in regions in which the presence of jets is vetoed
vector<const HEPUtils::Jet*> signalJets; // used to construct regions aiming for topologies with jets.
vector<const HEPUtils::Jet*> signalBJets;
vector<const HEPUtils::Jet*> signalVJets;
// Signal electrons
for (size_t iEl=0; iEl<baselineElectrons.size(); iEl++)
{
if (baselineElectrons.at(iEl)->pT()>20.) signalElectrons.push_back(baselineElectrons.at(iEl));
}
// Signal muons
for (size_t iMu=0; iMu<baselineMuons.size(); iMu++)
{
if (baselineMuons.at(iMu)->pT()>20.) signalMuons.push_back(baselineMuons.at(iMu));
}
// Signal jets
sort(baselinePhotons.begin(),baselinePhotons.end(),comparePt);
for (size_t iJet=0; iJet<baselineJets.size(); iJet++)
{
bool overlap=false;
for (size_t iLe=0; iLe<signalElectrons.size(); iLe++)
{
if (signalElectrons.at(iLe)->mom().deltaR_eta(baselineJets.at(iJet)->mom())<0.4) overlap=true;
}
for (size_t iLe=0; iLe<signalMuons.size(); iLe++)
{
if (signalMuons.at(iLe)->mom().deltaR_eta(baselineJets.at(iJet)->mom())<0.4) overlap=true;
}
if (baselinePhotons.size()!=0)
{
if (baselinePhotons.at(0)->mom().deltaR_eta(baselineJets.at(iJet)->mom())<0.4) overlap=true;
}
if (!overlap)
{
signalJets25.push_back(baselineJets.at(iJet));
if (baselineJets.at(iJet)->pT() >= 35.)
{
signalJets.push_back(baselineJets.at(iJet));
}
}
}
// Get subset of signal jets that get b-tags.
// For b-jets, jets down to pT > 25 should be considered, so we'll use signalJets25 below.
const double btag_eff = 0.70;
const double misstag_eff = 0.01;
const double cmisstag_eff = 0.12;
for (const HEPUtils::Jet* jet : signalJets25)
{
bool btag = false;
if (jet->btag() && random_bool(btag_eff)) btag = true;
else if (jet->ctag() && random_bool(cmisstag_eff)) btag = true;
else if (random_bool(misstag_eff)) btag = true;
if (btag) signalBJets.push_back(jet);
}
// Signal V-jets
signalVJets = baselineVJets;
// Signal leptons = electrons + muons
signalLeptons=signalElectrons;
signalLeptons.insert(signalLeptons.end(),signalMuons.begin(),signalMuons.end());
sort(signalLeptons.begin(),signalLeptons.end(),comparePt);
sort(signalJets25.begin(),signalJets25.end(),compareJetPt);
sort(signalJets.begin(),signalJets.end(),compareJetPt);
sort(signalBJets.begin(),signalBJets.end(),compareJetPt);
sort(signalVJets.begin(),signalVJets.end(),compareJetPt);
size_t nSignalLeptons = signalLeptons.size();
size_t nSignalJets25 = signalJets25.size();
size_t nSignalJets = signalJets.size();
size_t nSignalBJets = signalBJets.size();
size_t nSignalVJets = signalVJets.size();
// ###### Baseline selection ########
// the presence of two OS leptons with > 25 (20) GeV for the highest (next-to-highest) pT lepton
// the two highest pT OS leptons are required to have the same flavor
if (nSignalLeptons < 2) return;
if (signalLeptons[0]->pid() + signalLeptons[1]->pid() !=0) return;
if (signalLeptons[0]->pT() < 25. || signalLeptons[1]->pT() < 20.) return;
// cutFlowVector_1[1]++;
double pTll = (signalLeptons[0]->mom()+signalLeptons[1]->mom()).pT();
if (pTll < 50) return;
// cutFlowVector_1[2]++;
// the two highest pT leptons are required to be separated by a distance dR>0.1
if (signalLeptons[0]->mom().deltaR_eta(signalLeptons[1]->mom())<0.1) return;
// cutFlowVector_1[3]++;
double mll = (signalLeptons[0]->mom()+signalLeptons[1]->mom()).m();
if (mll < 20.) return;
if (met < 50.) return;
double mT2 = get_mT2(signalLeptons, event->missingmom());
double HT = 0.;
for (size_t iJet=0; iJet<nSignalJets; iJet++){
HT += signalJets[iJet]->pT();
}
// cutFlowVector_2[1]++;
// The two highest-pT jets must be separated from pTmiss vector by delta phi > 0.4
bool deltaPhiJet1PTmissSeparation = true;
bool deltaPhiJet2PTmissSeparation = true;
if (nSignalJets == 1)
{
deltaPhiJet1PTmissSeparation = ( event->missingmom().deltaR_eta(signalJets[0]->mom()) > 0.4 );
}
else if (nSignalJets >= 2)
{
deltaPhiJet1PTmissSeparation = ( event->missingmom().deltaR_eta(signalJets[0]->mom()) > 0.4 );
deltaPhiJet2PTmissSeparation = ( event->missingmom().deltaR_eta(signalJets[1]->mom()) > 0.4 );
}
bool deltaPhiJet12PTmissSeparation = (deltaPhiJet1PTmissSeparation && deltaPhiJet2PTmissSeparation);
// For SRs with V jets, a baseline requirement is separation from pTmiss by
// delta phi > 0.4 *or* > 0.8, depending on the type of jet
bool deltaPhiJet1TmissSeparation_VJetSR = true;
if (nSignalJets >= 1 && nSignalVJets == 0)
{
deltaPhiJet1TmissSeparation_VJetSR = ( event->missingmom().deltaR_eta(signalJets[0]->mom()) > 0.4 );
}
else if (nSignalJets == 0 && nSignalVJets >= 1)
{
deltaPhiJet1TmissSeparation_VJetSR = ( event->missingmom().deltaR_eta(signalVJets[0]->mom()) > 0.8 );
}
else if (nSignalJets >= 1 && nSignalVJets >= 1)
{
if (signalJets[0]->pT() > signalVJets[0]->pT())
{
deltaPhiJet1TmissSeparation_VJetSR = ( event->missingmom().deltaR_eta(signalJets[0]->mom()) > 0.4 );
}
else
{
deltaPhiJet1TmissSeparation_VJetSR = ( event->missingmom().deltaR_eta(signalVJets[0]->mom()) > 0.8 );
}
}
// Compute some SR selection variables
double mjj = 0.;
if (nSignalJets >= 2)
{
mjj = (signalJets[0]->mom()+signalJets[1]->mom()).m();
}
double mbb = 0.;
if (nSignalBJets >= 2)
{
mbb = (signalBJets[0]->mom()+signalBJets[1]->mom()).m();
}
double mT2_lblb = 0.;
if (nSignalBJets >= 2 && nSignalLeptons >= 2)
{
mT2_lblb = get_mT2_lblb(signalLeptons, signalBJets, event->missingmom());
}
// ###### on-Z regions, strong production ########
if (mll>86 and mll<96 and nSignalLeptons==2 and met > 50 and nSignalJets >1 and deltaPhiJet12PTmissSeparation)
{
// cutFlowVector_2[2]++;
if (nSignalBJets==0)
{
if (mT2>80)
{
if (HT>500)
{
// cutFlowVector_2[3]++;
if ( nSignalJets < 4 )
{
if (met<100) _counters.at("SRA_50_100").add_event(event);
else if (met<150) _counters.at("SRA_100_150").add_event(event);
else if (met<230) _counters.at("SRA_150_230").add_event(event);
else if (met<300) _counters.at("SRA_230_300").add_event(event);
else _counters.at("SRA_300").add_event(event);
}
else if ( nSignalJets < 6 )
{
if (met<100) _counters.at("SRB_50_100").add_event(event);
else if (met<150) _counters.at("SRB_100_150").add_event(event);
else if (met<230) _counters.at("SRB_150_230").add_event(event);
else if (met<300) _counters.at("SRB_230_300").add_event(event);
else _counters.at("SRB_300").add_event(event);
}
}
if (nSignalJets>5)
{
if (met<100) _counters.at("SRC_50_100").add_event(event);
else if (met<150) _counters.at("SRC_100_150").add_event(event);
else if (met<250) _counters.at("SRC_150_250").add_event(event);
else _counters.at("SRC_250").add_event(event);
}
}
}
else // nSignalBJets > 0
{
if (mT2>100)
{
if (HT>200)
{
if ( nSignalJets < 4 )
{
if (met<100) _counters.at("SRAb_50_100").add_event(event);
else if (met<150) _counters.at("SRAb_100_150").add_event(event);
else if (met<230) _counters.at("SRAb_150_230").add_event(event);
else if (met<300) _counters.at("SRAb_230_300").add_event(event);
else _counters.at("SRAb_300").add_event(event);
}
else if ( nSignalJets < 6 )
{
if (met<100) _counters.at("SRBb_50_100").add_event(event);
else if (met<150) _counters.at("SRBb_100_150").add_event(event);
else if (met<230) _counters.at("SRBb_150_230").add_event(event);
else if (met<300) _counters.at("SRBb_230_300").add_event(event);
else _counters.at("SRBb_300").add_event(event);
}
}
if (nSignalJets>5)
{
if (met<100) _counters.at("SRCb_50_100").add_event(event);
else if (met<150) _counters.at("SRCb_100_150").add_event(event);
else if (met<250) _counters.at("SRCb_150_250").add_event(event);
else _counters.at("SRCb_250").add_event(event);
}
}
}
}
// ###### on-Z regions, EW production ########
if (mll>86 and mll<96 and nSignalLeptons==2)
{
// Boosted VZ
if (deltaPhiJet1TmissSeparation_VJetSR)
{
if (nSignalJets25 == 0 and nSignalVJets == 1 and nSignalBJets == 0 and met > 50. and met < 100.) _counters.at("SRBoostedVZ_50_100").add_event(event);
else if (nSignalJets25 == 0 and nSignalVJets == 1 and nSignalBJets == 0 and met > 100. and met < 200.) _counters.at("SRBoostedVZ_100_200").add_event(event);
else if (nSignalJets25 == 0 and nSignalVJets == 1 and nSignalBJets == 0 and met > 200. and met < 300.) _counters.at("SRBoostedVZ_200_300").add_event(event);
else if (nSignalJets25 == 0 and nSignalVJets == 1 and nSignalBJets == 0 and met > 300. and met < 400.) _counters.at("SRBoostedVZ_300_400").add_event(event);
else if (nSignalJets25 == 0 and nSignalVJets == 1 and nSignalBJets == 0 and met > 400. and met < 500.) _counters.at("SRBoostedVZ_400_500").add_event(event);
else if (nSignalJets25 == 0 and nSignalVJets == 1 and nSignalBJets == 0 and met > 500.) _counters.at("SRBoostedVZ_500").add_event(event);
}
// Resolved VZ
if (deltaPhiJet12PTmissSeparation)
{
if (nSignalJets > 1 and nSignalBJets == 0 and mjj < 110. and mT2 > 80. and met > 50. and met < 100.) _counters.at("SRResolvedVZ_50_100").add_event(event);
else if (nSignalJets > 1 and nSignalBJets == 0 and mjj < 110. and mT2 > 80. and met > 100. and met < 150.) _counters.at("SRResolvedVZ_100_150").add_event(event);
else if (nSignalJets > 1 and nSignalBJets == 0 and mjj < 110. and mT2 > 80. and met > 150. and met < 250.) _counters.at("SRResolvedVZ_150_250").add_event(event);
else if (nSignalJets > 1 and nSignalBJets == 0 and mjj < 110. and mT2 > 80. and met > 250. and met < 350.) _counters.at("SRResolvedVZ_250_350").add_event(event);
else if (nSignalJets > 1 and nSignalBJets == 0 and mjj < 110. and mT2 > 80. and met > 350.) _counters.at("SRResolvedVZ_350").add_event(event);
}
// HZ
if (deltaPhiJet12PTmissSeparation)
{
if (nSignalJets > 1 and nSignalBJets == 2 and mbb < 150. and mT2_lblb > 200. and met > 50. and met < 100.) _counters.at("SRHZ_50_100").add_event(event);
else if (nSignalJets > 1 and nSignalBJets == 2 and mbb < 150. and mT2_lblb > 200. and met > 100. and met < 150.) _counters.at("SRHZ_100_150").add_event(event);
else if (nSignalJets > 1 and nSignalBJets == 2 and mbb < 150. and mT2_lblb > 200. and met > 150. and met < 250.) _counters.at("SRHZ_150_250").add_event(event);
else if (nSignalJets > 1 and nSignalBJets == 2 and mbb < 150. and mT2_lblb > 200. and met > 250.) _counters.at("SRHZ_250").add_event(event);
}
}
// ###### slepton region #######
if (mll<65 or mll>120)
{
// cutFlowVector_1[4]++;
if (signalLeptons[0]->pT()>50)
{
// cutFlowVector_1[5]++;
if (nSignalLeptons==2)
{
// cutFlowVector_1[6]++;
if (mT2>100)
{
// cutFlowVector_1[7]++;
if (met>50)
{
// cutFlowVector_1[8]++;
if (nSignalBJets==0){
if (nSignalJets25>0 and event->missingmom().deltaR_eta(signalJets25.at(0)->mom())>0.4
and (signalLeptons[1]->pT()/signalJets25[0]->pT())>1.2 )
{
// cutFlowVector_1[9]++;
if (mT2<150) _counters.at("SRoffZj_100_150").add_event(event);
else if (mT2<225) _counters.at("SRoffZj_150_225").add_event(event);
else if (mT2<300) _counters.at("SRoffZj_225_300").add_event(event);
else _counters.at("SRoffZj_300").add_event(event);
}
if (nSignalJets25==0)
{
// cutFlowVector_1[10]++;
if (mT2<150) _counters.at("SRoffZ0j_100_150").add_event(event);
else if (mT2<225) _counters.at("SRoffZ0j_150_225").add_event(event);
else if (mT2<300) _counters.at("SRoffZ0j_225_300").add_event(event);
else _counters.at("SRoffZ0j_300").add_event(event);
}
}
}
}
}
}
}
// // Contral regions
// if (mll>65 and mll<120)
// {
// if (signalLeptons[0]->pT()>50)
// {
// if (nSignalLeptons==2)
// {
// if (mT2>100)
// {
// if (met>50)
// {
// if (nSignalBJets==0)
// {
// if (nSignalJets>0 and deltaPhiJet12PTmissSeparation
// and signalLeptons[1]->pT()/signalJets[0]->pT()>1.2 )
// {
// if (mT2<150) _counters.at("SRonZj_100_150").add_event(event);
// else if (mT2<225) _counters.at("SRonZj_150_225").add_event(event);
// else if (mT2<300) _counters.at("SRonZj_225_300").add_event(event);
// else _counters.at("SRonZj_300").add_event(event);
// }
// if (nSignalJets25==0)
// {
// if (mT2<150) _counters.at("SRonZ0j_100_150").add_event(event);
// else if (mT2<225) _counters.at("SRonZ0j_150_225").add_event(event);
// else if (mT2<300) _counters.at("SRonZ0j_225_300").add_event(event);
// else _counters.at("SRonZ0j_300").add_event(event);
// }
// }
// }
// }
// }
// }
// }
}
virtual void collect_results()
{
//for (size_t i=0;i<NCUTS_1;i++)
//{
// cout << i << "\t" << cutFlowVector_1_str[i] << "\t" << cutFlowVector_1[i] << endl;
//}
//cout << "=========================" << endl;
//for (size_t i=0;i<NCUTS_2;i++)
//{
// cout << i << "\t" << cutFlowVector_2_str[i] << "\t" << cutFlowVector_2[i] << endl;
//}
add_result(SignalRegionData(_counters.at("SRA_50_100"), 1261., {1261., 41.}));
add_result(SignalRegionData(_counters.at("SRA_100_150"), 186., {160., 16.}));
add_result(SignalRegionData(_counters.at("SRA_150_230"), 27., {28.8, 5.}));
add_result(SignalRegionData(_counters.at("SRA_230_300"), 5., {4.2, 1.}));
add_result(SignalRegionData(_counters.at("SRA_300"), 14., {9.6, 3.2}));
add_result(SignalRegionData(_counters.at("SRAb_50_100"), 616., {616., 28.}));
add_result(SignalRegionData(_counters.at("SRAb_100_150"), 148., {128., 10.}));
add_result(SignalRegionData(_counters.at("SRAb_150_230"), 42., {31.4, 3.8}));
add_result(SignalRegionData(_counters.at("SRAb_230_300"), 10., {6.3, 1.7}));
add_result(SignalRegionData(_counters.at("SRAb_300"), 4., {4.1, 1.2}));
add_result(SignalRegionData(_counters.at("SRB_50_100"), 700., {700., 31.}));
add_result(SignalRegionData(_counters.at("SRB_100_150"), 108., {108.2, 7.1}));
add_result(SignalRegionData(_counters.at("SRB_150_230"), 18., {15.7, 2.3}));
add_result(SignalRegionData(_counters.at("SRB_230_300"), 2., {2.2, 0.7}));
add_result(SignalRegionData(_counters.at("SRB_300"), 3., {3.0, 1.0}));
add_result(SignalRegionData(_counters.at("SRBb_50_100"), 225., {225., 16.}));
add_result(SignalRegionData(_counters.at("SRBb_100_150"), 69., {65., 16.}));
add_result(SignalRegionData(_counters.at("SRBb_150_230"), 17., {22.7, 4.2}));
add_result(SignalRegionData(_counters.at("SRBb_230_300"), 3., {5.3, 1.4}));
add_result(SignalRegionData(_counters.at("SRBb_300"), 5., {2.1, 0.6}));
add_result(SignalRegionData(_counters.at("SRC_50_100"), 135., {135., 14.}));
add_result(SignalRegionData(_counters.at("SRC_100_150"), 19., {29.7, 5.6}));
add_result(SignalRegionData(_counters.at("SRC_150_250"), 5., {2.4, 0.6}));
add_result(SignalRegionData(_counters.at("SRC_250"), 1., {0.6, 0.3}));
add_result(SignalRegionData(_counters.at("SRCb_50_100"), 41., {41., 7.1}));
add_result(SignalRegionData(_counters.at("SRCb_100_150"), 14., {10.7, 2.1}));
add_result(SignalRegionData(_counters.at("SRCb_150_250"), 5., {3.8, 0.9}));
add_result(SignalRegionData(_counters.at("SRCb_250"), 1., {0.7, 0.2}));
add_result(SignalRegionData(_counters.at("SRHZ_50_100"), 168., {168., 15.}));
add_result(SignalRegionData(_counters.at("SRHZ_100_150"), 14., {15.6, 4.3}));
add_result(SignalRegionData(_counters.at("SRHZ_150_250"), 5., {5.6, 2.8}));
add_result(SignalRegionData(_counters.at("SRHZ_250"), 0., {1.2, 0.4}));
add_result(SignalRegionData(_counters.at("SRBoostedVZ_50_100"), 43., {43.0, 9.9}));
add_result(SignalRegionData(_counters.at("SRBoostedVZ_100_200"), 5., {2.3, 0.8}));
add_result(SignalRegionData(_counters.at("SRBoostedVZ_200_300"), 1., {0.5, 0.5}));
add_result(SignalRegionData(_counters.at("SRBoostedVZ_300_400"), 0., {0.2, 0.2}));
add_result(SignalRegionData(_counters.at("SRBoostedVZ_400_500"), 0., {0.0, 0.1}));
add_result(SignalRegionData(_counters.at("SRBoostedVZ_500"), 0., {0.2, 0.1}));
add_result(SignalRegionData(_counters.at("SRResolvedVZ_50_100"), 3648., {3648., 80.}));
add_result(SignalRegionData(_counters.at("SRResolvedVZ_100_150"), 461., {439., 47.}));
add_result(SignalRegionData(_counters.at("SRResolvedVZ_150_250"), 69., {58., 19.}));
add_result(SignalRegionData(_counters.at("SRResolvedVZ_250_350"), 7., {11.9, 3.2}));
add_result(SignalRegionData(_counters.at("SRResolvedVZ_350"), 2., {6.3, 2.2}));
add_result(SignalRegionData(_counters.at("SRoffZ0j_100_150"), 228., {198., 37.}));
add_result(SignalRegionData(_counters.at("SRoffZ0j_150_225"), 99., {120., 16.}));
add_result(SignalRegionData(_counters.at("SRoffZ0j_225_300"), 29., {20.8, 4.1}));
add_result(SignalRegionData(_counters.at("SRoffZ0j_300"), 17., {9.3, 2.3}));
add_result(SignalRegionData(_counters.at("SRoffZj_100_150"), 283., {245., 33.}));
add_result(SignalRegionData(_counters.at("SRoffZj_150_225"), 97., {112., 12.}));
add_result(SignalRegionData(_counters.at("SRoffZj_225_300"), 19., {14.7, 3.3}));
add_result(SignalRegionData(_counters.at("SRoffZj_300"), 8., {8.7, 2.3}));
// Control regions
// add_result(SignalRegionData(_counters.at("SRonZ0j_100_150"), 1059., {1059., 34.}));
// add_result(SignalRegionData(_counters.at("SRonZ0j_150_225"), 573., {573., 26.}));
// add_result(SignalRegionData(_counters.at("SRonZ0j_225_300"), 116., {116., 11.}));
// add_result(SignalRegionData(_counters.at("SRonZ0j_300"), 47., {47.5, 5.3}));
// add_result(SignalRegionData(_counters.at("SRonZj_100_150"), 674., {674., 29.}));
// add_result(SignalRegionData(_counters.at("SRonZj_150_225"), 241., {241., 16.}));
// add_result(SignalRegionData(_counters.at("SRonZj_225_300"), 72., {72., 8.2}));
// add_result(SignalRegionData(_counters.at("SRonZj_300"), 30., {34.9, 3.8}));
}
double get_mT2(vector<const HEPUtils::Particle*> leptons, HEPUtils::P4 pTmiss)
{
double mT2 = 0.;
double pLep0[3] = {leptons.at(0)->mass(), leptons.at(0)->mom().px(), leptons.at(0)->mom().py()};
double pLep1[3] = {leptons.at(1)->mass(), leptons.at(1)->mom().px(), leptons.at(1)->mom().py()};
double pMiss[3] = {0., pTmiss.px(), pTmiss.py() };
double mn = 0.;
mt2_bisect::mt2 mt2_calc;
mt2_calc.set_momenta(pLep0,pLep1,pMiss);
mt2_calc.set_mn(mn);
mT2 = mt2_calc.get_mt2();
return mT2;
}
double get_mT2_lblb(vector<const HEPUtils::Particle*> leptons, vector<const HEPUtils::Jet*> bjets, HEPUtils::P4 pTmiss)
{
double mT2 = DBL_MAX;
HEPUtils::P4 p4L0 = leptons.at(0)->mom();
HEPUtils::P4 p4L1 = leptons.at(1)->mom();
HEPUtils::P4 p4B0 = bjets.at(0)->mom();
HEPUtils::P4 p4B1 = bjets.at(1)->mom();
double pL0[3] = {p4L0.m(), p4L0.px(), p4L0.py()};
double pL1[3] = {p4L1.m(), p4L1.px(), p4L1.py()};
double pB0[3] = {p4B0.m(), p4B0.px(), p4B0.py()};
double pB1[3] = {p4B1.m(), p4B1.px(), p4B1.py()};
double pMiss[3] = {0., pTmiss.px(), pTmiss.py() };
double mn = 0.;
mt2_bisect::mt2 mt2_calc;
// L0B0
mt2_calc.set_momenta(pL0, pB0, pMiss);
mt2_calc.set_mn(mn);
double mT2_L0B0 = mt2_calc.get_mt2();
if (mT2_L0B0 < mT2) mT2 = mT2_L0B0;
// L0B1
mt2_calc.set_momenta(pL0, pB1, pMiss);
mt2_calc.set_mn(mn);
double mT2_L0B1 = mt2_calc.get_mt2();
if (mT2_L0B1 < mT2) mT2 = mT2_L0B1;
// L1B0
mt2_calc.set_momenta(pL1, pB0, pMiss);
mt2_calc.set_mn(mn);
double mT2_L1B0 = mt2_calc.get_mt2();
if (mT2_L1B0 < mT2) mT2 = mT2_L1B0;
// L1B1
mt2_calc.set_momenta(pL1, pB1, pMiss);
mt2_calc.set_mn(mn);
double mT2_L1B1 = mt2_calc.get_mt2();
if (mT2_L1B1 < mT2) mT2 = mT2_L1B1;
return mT2;
}
protected:
void analysis_specific_reset()
{
for (auto& pair : _counters) { pair.second.reset(); }
// std::fill(cutFlowVector_1.begin(), cutFlowVector_1.end(), 0);
// std::fill(cutFlowVector_2.begin(), cutFlowVector_2.end(), 0);
}
};
// Factory fn
DEFINE_ANALYSIS_FACTORY(CMS_13TeV_2OSLEP_137invfb)
//
// Derived analysis class for the Strong-production on-Z search regions
//
class Analysis_CMS_13TeV_2OSLEP_Strong_Production_137invfb : public Analysis_CMS_13TeV_2OSLEP_137invfb
{
public:
Analysis_CMS_13TeV_2OSLEP_Strong_Production_137invfb()
{
set_analysis_name("CMS_13TeV_2OSLEP_Strong_Production_137invfb");
}
virtual void collect_results()
{
add_result(SignalRegionData(_counters.at("SRA_50_100"), 1261., {1261., 41.}));
add_result(SignalRegionData(_counters.at("SRA_100_150"), 186., {160., 16.}));
add_result(SignalRegionData(_counters.at("SRA_150_230"), 27., {28.8, 5.}));
add_result(SignalRegionData(_counters.at("SRA_230_300"), 5., {4.2, 1.}));
add_result(SignalRegionData(_counters.at("SRA_300"), 14., {9.6, 3.2}));
add_result(SignalRegionData(_counters.at("SRAb_50_100"), 616., {616., 28.}));
add_result(SignalRegionData(_counters.at("SRAb_100_150"), 148., {128., 10.}));
add_result(SignalRegionData(_counters.at("SRAb_150_230"), 42., {31.4, 3.8}));
add_result(SignalRegionData(_counters.at("SRAb_230_300"), 10., {6.3, 1.7}));
add_result(SignalRegionData(_counters.at("SRAb_300"), 4., {4.1, 1.2}));
add_result(SignalRegionData(_counters.at("SRB_50_100"), 700., {700., 31.}));
add_result(SignalRegionData(_counters.at("SRB_100_150"), 108., {108.2, 7.1}));
add_result(SignalRegionData(_counters.at("SRB_150_230"), 18., {15.7, 2.3}));
add_result(SignalRegionData(_counters.at("SRB_230_300"), 2., {2.2, 0.7}));
add_result(SignalRegionData(_counters.at("SRB_300"), 3., {3.0, 1.0}));
add_result(SignalRegionData(_counters.at("SRBb_50_100"), 225., {225., 16.}));
add_result(SignalRegionData(_counters.at("SRBb_100_150"), 69., {65., 16.}));
add_result(SignalRegionData(_counters.at("SRBb_150_230"), 17., {22.7, 4.2}));
add_result(SignalRegionData(_counters.at("SRBb_230_300"), 3., {5.3, 1.4}));
add_result(SignalRegionData(_counters.at("SRBb_300"), 5., {2.1, 0.6}));
add_result(SignalRegionData(_counters.at("SRC_50_100"), 135., {135., 14.}));
add_result(SignalRegionData(_counters.at("SRC_100_150"), 19., {29.7, 5.6}));
add_result(SignalRegionData(_counters.at("SRC_150_250"), 5., {2.4, 0.6}));
add_result(SignalRegionData(_counters.at("SRC_250"), 1., {0.6, 0.3}));
add_result(SignalRegionData(_counters.at("SRCb_50_100"), 41., {41., 7.1}));
add_result(SignalRegionData(_counters.at("SRCb_100_150"), 14., {10.7, 2.1}));
add_result(SignalRegionData(_counters.at("SRCb_150_250"), 5., {3.8, 0.9}));
add_result(SignalRegionData(_counters.at("SRCb_250"), 1., {0.7, 0.2}));
// Covariance matrix
static const vector< vector<double> > BKGCOV = {
{ 1.452e+03, 5.520e+01, 6.065e+00, 2.108e-01, 1.155e+01, -1.256e+01, 1.464e+01, 9.276e+00, -3.391e+00, -2.705e-01, 5.499e+01, 1.271e+01, 5.089e+00, 1.827e+00, 1.310e+00, -1.869e+01, 9.333e+00, 3.090e+00, 1.961e-01, 3.105e-01, -2.595e+01, -6.031e-01, -1.319e+00, -1.782e-01, -9.342e+00, 6.544e-01, 5.301e-01, 2.918e-01},
{ 5.520e+01, 8.951e+01, 1.150e+00, 1.281e-01, 1.362e+00, -6.715e+00, -5.015e+00, 1.540e+00, 1.607e-01, -1.297e+00, -1.806e+01, 8.218e-01, -2.626e-01, 3.463e-01, 1.048e+00, -1.869e+00, -2.680e+00, 1.655e+00, -9.247e-01, 2.914e-01, 1.131e+01, 4.606e+00, 1.656e-01, -6.022e-02, 5.787e+00, 7.082e-01, -7.456e-01, -9.488e-02},
{ 6.065e+00, 1.150e+00, 1.292e+01, 5.063e-01, 6.763e-01, 2.064e+00, 7.629e-01, 1.270e+00, 3.418e-01, -2.157e-01, -4.355e+00, -1.803e+00, 2.381e-01, 1.947e-01, 5.755e-02, -2.888e-01, 1.852e+00, -1.372e-01, -6.102e-02, -4.821e-02, 3.029e+00, -4.796e-01, -4.683e-03, 7.452e-02, 1.020e-01, -1.387e-01, -1.291e-02, 6.423e-02},
{ 2.108e-01, 1.281e-01, 5.063e-01, 1.269e+00, 5.195e-01, -2.980e+00, 6.383e-01, 1.385e-01, -1.206e-01, 1.386e-01, -7.064e-01, 1.993e-01, -3.736e-02, 1.208e-01, 4.178e-01, 7.681e-01, 4.376e-01, 1.824e-01, -4.175e-02, 5.818e-02, 7.057e-01, 2.261e-01, 3.256e-02, 5.835e-03, 3.278e-01, 2.051e-01, 9.631e-02, -1.608e-02},
{ 1.155e+01, 1.362e+00, 6.763e-01, 5.195e-01, 5.757e+00, 5.328e-01, 1.464e+00, 4.344e-01, 4.581e-01, -6.634e-02, 5.949e-01, -1.829e-01, -6.941e-02, 2.903e-01, 2.779e-01, 2.487e+00, 7.570e-01, 1.129e+00, 1.035e-01, 2.009e-01, 7.607e-01, -4.274e-01, 1.812e-01, 5.611e-02, 2.391e-01, 3.097e-01, 1.284e-01, 1.133e-02},
{ -1.256e+01, -6.715e+00, 2.064e+00, -2.980e+00, 5.328e-01, 5.385e+02, 3.979e+01, 5.810e+00, -1.716e+00, 4.631e-01, -3.255e+00, 1.523e+00, 2.440e+00, -4.337e-01, -2.865e+00, 2.929e+01, -1.925e+00, -1.552e+00, 7.214e-01, -2.651e-01, -3.514e+01, 3.420e+00, 5.076e-01, 1.209e-01, -1.129e+01, 1.112e+00, 8.845e-01, -2.365e-01},
{ 1.464e+01, -5.015e+00, 7.629e-01, 6.383e-01, 1.464e+00, 3.979e+01, 5.900e+01, 2.444e+00, -4.674e-01, 9.869e-01, 1.726e+01, -3.747e+00, -1.258e-01, 9.008e-01, 8.168e-01, -8.619e+00, -5.931e-01, 1.844e+00, -6.811e-01, -8.318e-02, -1.362e+01, -1.495e+00, -2.469e-01, -3.841e-02, 2.875e+00, 1.797e+00, 4.827e-01, 5.825e-02},
{ 9.276e+00, 1.540e+00, 1.270e+00, 1.385e-01, 4.344e-01, 5.810e+00, 2.444e+00, 8.527e+00, 4.039e-01, 1.010e-01, 5.171e+00, -9.649e-02, 1.026e-01, -3.732e-02, -1.596e-01, -1.287e+00, 1.889e-01, 1.530e+00, 1.583e-01, -1.583e-01, 2.207e+00, 4.422e-01, 2.908e-01, 1.150e-01, -1.935e+00, -4.113e-01, 1.751e-01, 3.050e-02},
{ -3.391e+00, 1.607e-01, 3.418e-01, -1.206e-01, 4.581e-01, -1.716e+00, -4.674e-01, 4.039e-01, 2.062e+00, -1.386e-01, 4.329e+00, 8.825e-01, -1.137e-01, 7.204e-02, -1.119e-01, 1.574e+00, 9.343e-01, 5.913e-02, 5.029e-02, 2.520e-02, 5.472e-01, -3.377e-01, 2.077e-02, -2.006e-02, -4.156e-01, -5.192e-02, 7.807e-02, 5.625e-03},
{ -2.705e-01, -1.297e+00, -2.157e-01, 1.386e-01, -6.634e-02, 4.631e-01, 9.869e-01, 1.010e-01, -1.386e-01, 1.226e+00, -4.217e-01, 1.526e-01, -2.764e-01, 9.797e-03, 1.160e-01, -1.614e+00, -9.743e-02, 1.656e-01, 1.626e-01, -2.911e-02, -3.194e-01, 6.205e-01, 3.984e-02, 4.874e-03, 1.048e-01, 3.995e-01, 5.159e-02, 7.744e-03},
{ 5.499e+01, -1.806e+01, -4.355e+00, -7.064e-01, 5.949e-01, -3.255e+00, 1.726e+01, 5.171e+00, 4.329e+00, -4.217e-01, 4.994e+02, 5.501e+01, 5.672e+00, 1.608e+00, 2.141e+00, 3.590e+00, -1.623e+01, -1.304e+00, -9.334e-02, -7.603e-01, 1.552e+01, -1.431e+00, 1.274e-01, 3.804e-01, -1.066e+01, 1.272e+00, -4.184e-01, 1.848e-01},
{ 1.271e+01, 8.218e-01, -1.803e+00, 1.993e-01, -1.829e-01, 1.523e+00, -3.747e+00, -9.649e-02, 8.825e-01, 1.526e-01, 5.501e+01, 3.323e+01, -1.025e-01, 4.484e-01, 9.853e-01, 1.574e+00, -4.783e+00, 8.212e-01, 8.628e-01, 2.036e-02, -2.952e-01, 1.093e+00, 6.855e-02, 1.830e-02, -3.384e+00, -2.841e-01, 1.675e-02, 1.840e-02},
{ 5.089e+00, -2.626e-01, 2.381e-01, -3.736e-02, -6.941e-02, 2.440e+00, -1.258e-01, 1.026e-01, -1.137e-01, -2.764e-01, 5.672e+00, -1.025e-01, 2.766e+00, 4.068e-02, 6.872e-02, -4.854e-01, 5.115e-02, 6.044e-01, -7.796e-02, 4.929e-03, 9.611e-01, -4.168e-01, 1.602e-02, 3.640e-02, -2.099e-01, -1.223e-01, -1.148e-01, 1.220e-02},
{ 1.827e+00, 3.463e-01, 1.947e-01, 1.208e-01, 2.903e-01, -4.337e-01, 9.008e-01, -3.732e-02, 7.204e-02, 9.797e-03, 1.608e+00, 4.484e-01, 4.068e-02, 5.483e-01, 2.647e-01, -1.416e-01, 2.261e-01, 4.727e-01, 5.982e-02, 4.022e-02, 1.485e-01, -9.278e-02, -7.810e-03, 5.590e-03, 5.271e-01, 3.142e-02, 6.860e-02, 6.962e-03},
{ 1.310e+00, 1.048e+00, 5.755e-02, 4.178e-01, 2.779e-01, -2.865e+00, 8.168e-01, -1.596e-01, -1.119e-01, 1.160e-01, 2.141e+00, 9.853e-01, 6.872e-02, 2.647e-01, 1.692e+00, -5.146e-01, 1.645e-01, 2.094e-01, 1.982e-01, 9.853e-02, -7.599e-01, 3.152e-01, 2.030e-02, 3.398e-02, -4.637e-01, -1.669e-01, 9.292e-02, 3.160e-03},
{ -1.869e+01, -1.869e+00, -2.888e-01, 7.681e-01, 2.487e+00, 2.929e+01, -8.619e+00, -1.287e+00, 1.574e+00, -1.614e+00, 3.590e+00, 1.574e+00, -4.854e-01, -1.416e-01, -5.146e-01, 2.059e+02, 1.621e+01, 2.981e+00, 4.137e+00, 7.318e-01, -8.653e+00, 6.625e+00, 3.979e-01, 1.413e-01, -4.641e+00, 7.063e-01, 1.048e+00, -1.788e-01},
{ 9.333e+00, -2.680e+00, 1.852e+00, 4.376e-01, 7.570e-01, -1.925e+00, -5.931e-01, 1.889e-01, 9.343e-01, -9.743e-02, -1.623e+01, -4.783e+00, 5.115e-02, 2.261e-01, 1.645e-01, 1.621e+01, 4.549e+01, 1.857e+00, 1.088e+00, -1.138e-02, 1.901e+00, -2.752e-01, 3.633e-01, -1.619e-01, 2.882e+00, 1.070e+00, 7.118e-01, -2.643e-02},
{ 3.090e+00, 1.655e+00, -1.372e-01, 1.824e-01, 1.129e+00, -1.552e+00, 1.844e+00, 1.530e+00, 5.913e-02, 1.656e-01, -1.304e+00, 8.212e-01, 6.044e-01, 4.727e-01, 2.094e-01, 2.981e+00, 1.857e+00, 9.166e+00, 4.064e-01, 4.732e-02, -2.229e+00, 2.742e-02, -3.174e-02, 7.366e-02, -3.753e-01, -3.602e-01, 2.893e-01, 2.619e-02},
{ 1.961e-01, -9.247e-01, -6.102e-02, -4.175e-02, 1.035e-01, 7.214e-01, -6.811e-01, 1.583e-01, 5.029e-02, 1.626e-01, -9.334e-02, 8.628e-01, -7.796e-02, 5.982e-02, 1.982e-01, 4.137e+00, 1.088e+00, 4.064e-01, 1.486e+00, 3.016e-02, 3.212e-02, 6.526e-01, 1.075e-01, -3.688e-03, -9.324e-01, 2.636e-02, 2.924e-02, 5.746e-03},
{ 3.105e-01, 2.914e-01, -4.821e-02, 5.818e-02, 2.009e-01, -2.651e-01, -8.318e-02, -1.583e-01, 2.520e-02, -2.911e-02, -7.603e-01, 2.036e-02, 4.929e-03, 4.022e-02, 9.853e-02, 7.318e-01, -1.138e-02, 4.732e-02, 3.016e-02, 3.315e-01, 1.396e-01, 7.636e-02, -1.378e-02, 5.065e-03, 4.837e-01, 4.154e-02, 3.568e-02, 4.027e-04},
{ -2.595e+01, 1.131e+01, 3.029e+00, 7.057e-01, 7.607e-01, -3.514e+01, -1.362e+01, 2.207e+00, 5.472e-01, -3.194e-01, 1.552e+01, -2.952e-01, 9.611e-01, 1.485e-01, -7.599e-01, -8.653e+00, 1.901e+00, -2.229e+00, 3.212e-02, 1.396e-01, 1.135e+02, 1.307e+01, 8.353e-01, 3.103e-01, -1.452e+00, -3.202e-01, 1.189e-01, -7.054e-03},
{ -6.031e-01, 4.606e+00, -4.796e-01, 2.261e-01, -4.274e-01, 3.420e+00, -1.495e+00, 4.422e-01, -3.377e-01, 6.205e-01, -1.431e+00, 1.093e+00, -4.168e-01, -9.278e-02, 3.152e-01, 6.625e+00, -2.752e-01, 2.742e-02, 6.526e-01, 7.636e-02, 1.307e+01, 1.318e+01, 1.195e-01, 9.273e-02, -1.788e+00, -1.113e-01, 9.844e-02, -1.298e-02},
{ -1.319e+00, 1.656e-01, -4.683e-03, 3.256e-02, 1.812e-01, 5.076e-01, -2.469e-01, 2.908e-01, 2.077e-02, 3.984e-02, 1.274e-01, 6.855e-02, 1.602e-02, -7.810e-03, 2.030e-02, 3.979e-01, 3.633e-01, -3.174e-02, 1.075e-01, -1.378e-02, 8.353e-01, 1.195e-01, 3.116e-01, 3.173e-03, 1.348e-01, 2.785e-02, -2.181e-03, 1.080e-03},
{ -1.782e-01, -6.022e-02, 7.452e-02, 5.835e-03, 5.611e-02, 1.209e-01, -3.841e-02, 1.150e-01, -2.006e-02, 4.874e-03, 3.804e-01, 1.830e-02, 3.640e-02, 5.590e-03, 3.398e-02, 1.413e-01, -1.619e-01, 7.366e-02, -3.688e-03, 5.065e-03, 3.103e-01, 9.273e-02, 3.173e-03, 5.248e-02, -2.122e-01, -3.972e-02, 2.820e-03, 2.261e-03},
{ -9.342e+00, 5.787e+00, 1.020e-01, 3.278e-01, 2.391e-01, -1.129e+01, 2.875e+00, -1.935e+00, -4.156e-01, 1.048e-01, -1.066e+01, -3.384e+00, -2.099e-01, 5.271e-01, -4.637e-01, -4.641e+00, 2.882e+00, -3.753e-01, -9.324e-01, 4.837e-01, -1.452e+00, -1.788e+00, 1.348e-01, -2.122e-01, 3.424e+01, 7.284e+00, 1.590e+00, -2.497e-02},
{ 6.544e-01, 7.082e-01, -1.387e-01, 2.051e-01, 3.097e-01, 1.112e+00, 1.797e+00, -4.113e-01, -5.192e-02, 3.995e-01, 1.272e+00, -2.841e-01, -1.223e-01, 3.142e-02, -1.669e-01, 7.063e-01, 1.070e+00, -3.602e-01, 2.636e-02, 4.154e-02, -3.202e-01, -1.113e-01, 2.785e-02, -3.972e-02, 7.284e+00, 3.739e+00, 6.303e-01, -6.870e-03},
{ 5.301e-01, -7.456e-01, -1.291e-02, 9.631e-02, 1.284e-01, 8.845e-01, 4.827e-01, 1.751e-01, 7.807e-02, 5.159e-02, -4.184e-01, 1.675e-02, -1.148e-01, 6.860e-02, 9.292e-02, 1.048e+00, 7.118e-01, 2.893e-01, 2.924e-02, 3.568e-02, 1.189e-01, 9.844e-02, -2.181e-03, 2.820e-03, 1.590e+00, 6.303e-01, 5.599e-01, 1.894e-03},
{ 2.918e-01, -9.488e-02, 6.423e-02, -1.608e-02, 1.133e-02, -2.365e-01, 5.825e-02, 3.050e-02, 5.625e-03, 7.744e-03, 1.848e-01, 1.840e-02, 1.220e-02, 6.962e-03, 3.160e-03, -1.788e-01, -2.643e-02, 2.619e-02, 5.746e-03, 4.027e-04, -7.054e-03, -1.298e-02, 1.080e-03, 2.261e-03, -2.497e-02, -6.870e-03, 1.894e-03, 1.502e-02},
};
set_covariance(BKGCOV);
}
};
// Factory fn
DEFINE_ANALYSIS_FACTORY(CMS_13TeV_2OSLEP_Strong_Production_137invfb)
//
// Derived analysis class for the EW-production on-Z search regions
//
class Analysis_CMS_13TeV_2OSLEP_EW_Production_137invfb : public Analysis_CMS_13TeV_2OSLEP_137invfb
{
public:
Analysis_CMS_13TeV_2OSLEP_EW_Production_137invfb()
{
set_analysis_name("CMS_13TeV_2OSLEP_EW_Production_137invfb");
}
virtual void collect_results()
{
add_result(SignalRegionData(_counters.at("SRHZ_50_100"), 168., {168., 15.}));
add_result(SignalRegionData(_counters.at("SRHZ_100_150"), 14., {15.6, 4.3}));
add_result(SignalRegionData(_counters.at("SRHZ_150_250"), 5., {5.6, 2.8}));
add_result(SignalRegionData(_counters.at("SRHZ_250"), 0., {1.2, 0.4}));
add_result(SignalRegionData(_counters.at("SRBoostedVZ_50_100"), 43., {43.0, 9.9}));
add_result(SignalRegionData(_counters.at("SRBoostedVZ_100_200"), 5., {2.3, 0.8}));
add_result(SignalRegionData(_counters.at("SRBoostedVZ_200_300"), 1., {0.5, 0.5}));
add_result(SignalRegionData(_counters.at("SRBoostedVZ_300_400"), 0., {0.2, 0.2}));
add_result(SignalRegionData(_counters.at("SRBoostedVZ_400_500"), 0., {0.0, 0.1}));
add_result(SignalRegionData(_counters.at("SRBoostedVZ_500"), 0., {0.2, 0.1}));
add_result(SignalRegionData(_counters.at("SRResolvedVZ_50_100"), 3648., {3648., 80.}));
add_result(SignalRegionData(_counters.at("SRResolvedVZ_100_150"), 461., {439., 47.}));
add_result(SignalRegionData(_counters.at("SRResolvedVZ_150_250"), 69., {58., 19.}));
add_result(SignalRegionData(_counters.at("SRResolvedVZ_250_350"), 7., {11.9, 3.2}));
add_result(SignalRegionData(_counters.at("SRResolvedVZ_350"), 2., {6.3, 2.2}));
// Covariance matrix
// NOTE: The ordering of the bin labels is wrong in the pdf/png figures of the covariance matrix
// provided at https://cms-results.web.cern.ch/cms-results/public-results/publications/SUS-20-001/index.html
// The ROOT file has the correct bin labels, so the covariance matrix below is extracted from the ROOT file
// and the order in which the SRs are registered above is matched to this.
static const vector< vector<double> > BKGCOV = {
{ 1.617e+02, 1.135e+01, 4.261e+00, 8.042e-01, 3.021e+00, 4.050e-01, -6.691e-02, 2.447e-01, -1.306e-02, 3.087e-02, -8.126e+01, -1.601e+01, 1.789e+01, 5.536e+00, 3.430e+00},
{ 1.135e+01, 9.444e+00, 1.657e+00, 4.450e-01, 2.818e+00, 3.480e-01, -1.021e-02, 7.137e-02, -6.388e-04, 2.926e-02, -1.639e+00, 8.133e+00, 6.670e+00, 5.999e-01, 5.488e-01},
{ 4.261e+00, 1.657e+00, 1.070e+01, 3.303e-01, 2.220e+00, 4.126e-01, 7.900e-02, 3.939e-02, 7.144e-03, 2.884e-03, 1.233e+01, 3.676e+00, 5.360e+00, 1.160e+00, 2.478e-01},
{ 8.042e-01, 4.450e-01, 3.303e-01, 4.496e-01, 1.250e+00, 1.687e-01, 6.884e-03, 9.276e-03, 6.434e-04, 4.373e-03, 4.501e+00, -2.516e-01, 4.067e-01, 8.973e-02, 2.017e-01},
{ 3.021e+00, 2.818e+00, 2.220e+00, 1.250e+00, 5.713e+01, 2.615e+00, 2.296e-02, 2.641e-02, 1.040e-02, 1.746e-02, 4.645e+01, 1.384e+01, 7.127e+00, 2.057e+00, -9.674e-02},
{ 4.050e-01, 3.480e-01, 4.126e-01, 1.687e-01, 2.615e+00, 7.216e-01, 1.581e-02, 1.177e-02, 1.585e-03, 8.841e-03, 2.161e+00, 3.361e-01, 2.421e+00, 4.444e-01, 7.708e-02},
{ -6.691e-02, -1.021e-02, 7.900e-02, 6.884e-03, 2.296e-02, 1.581e-02, 1.799e-02, 1.075e-03, 8.228e-05, -5.897e-04, -1.143e-01, 1.465e-01, 9.678e-03, 5.187e-02, 1.273e-03},
{ 2.447e-01, 7.137e-02, 3.939e-02, 9.276e-03, 2.641e-02, 1.177e-02, 1.075e-03, 8.658e-03, 4.431e-05, 7.488e-04, -3.198e-01, -1.815e-01, 1.731e-01, 6.114e-02, 2.023e-02},
{ -1.306e-02, -6.388e-04, 7.144e-03, 6.434e-04, 1.040e-02, 1.585e-03, 8.228e-05, 4.431e-05, 1.200e-04, -6.649e-05, 2.397e-02, 5.324e-03, 8.599e-03, 9.841e-04, 1.045e-03},
{ 3.087e-02, 2.926e-02, 2.884e-03, 4.373e-03, 1.746e-02, 8.841e-03, -5.897e-04, 7.488e-04, -6.649e-05, 6.347e-03, -1.133e-01, 2.368e-03, 2.057e-01, 2.448e-02, 2.246e-02},
{ -8.126e+01, -1.639e+00, 1.233e+01, 4.501e+00, 4.645e+01, 2.161e+00, -1.143e-01, -3.198e-01, 2.397e-02, -1.133e-01, 3.182e+03, -1.200e+02, 3.101e-01, -1.399e+01, 1.763e+01},
{ -1.601e+01, 8.133e+00, 3.676e+00, -2.516e-01, 1.384e+01, 3.361e-01, 1.465e-01, -1.815e-01, 5.324e-03, 2.368e-03, -1.200e+02, 3.946e+02, 3.451e+01, 1.497e+00, 2.006e+00},
{ 1.789e+01, 6.670e+00, 5.360e+00, 4.067e-01, 7.127e+00, 2.421e+00, 9.678e-03, 1.731e-01, 8.599e-03, 2.057e-01, 3.101e-01, 3.451e+01, 1.372e+02, 1.012e+01, 1.963e+00},
{ 5.536e+00, 5.999e-01, 1.160e+00, 8.973e-02, 2.057e+00, 4.444e-01, 5.187e-02, 6.114e-02, 9.841e-04, 2.448e-02, -1.399e+01, 1.497e+00, 1.012e+01, 9.865e+00, 6.006e-01},
{ 3.430e+00, 5.488e-01, 2.478e-01, 2.017e-01, -9.674e-02, 7.708e-02, 1.273e-03, 2.023e-02, 1.045e-03, 2.246e-02, 1.763e+01, 2.006e+00, 1.963e+00, 6.006e-01, 3.896e+00},
};
set_covariance(BKGCOV);
}
};
// Factory fn
DEFINE_ANALYSIS_FACTORY(CMS_13TeV_2OSLEP_EW_Production_137invfb)
//
// Derived analysis class for the Slepton search regions
//
class Analysis_CMS_13TeV_2OSLEP_Slepton_137invfb : public Analysis_CMS_13TeV_2OSLEP_137invfb
{
public:
Analysis_CMS_13TeV_2OSLEP_Slepton_137invfb()
{
set_analysis_name("CMS_13TeV_2OSLEP_Slepton_137invfb");
}
virtual void collect_results()
{
add_result(SignalRegionData(_counters.at("SRoffZ0j_100_150"),228., {198., 37.}));
add_result(SignalRegionData(_counters.at("SRoffZ0j_150_225"),99., {120., 16.}));
add_result(SignalRegionData(_counters.at("SRoffZ0j_225_300"),29., {20.8, 4.1}));
add_result(SignalRegionData(_counters.at("SRoffZ0j_300"), 17., {9.3, 2.3}));
add_result(SignalRegionData(_counters.at("SRoffZj_100_150"), 283., {245., 33.}));
add_result(SignalRegionData(_counters.at("SRoffZj_150_225"), 97., {112., 12.}));
add_result(SignalRegionData(_counters.at("SRoffZj_225_300"), 19., {14.7, 3.3}));
add_result(SignalRegionData(_counters.at("SRoffZj_300"), 8., {8.7, 2.3}));
// Covariance matrix
static const vector< vector<double> > BKGCOV = {
{ 1.779e+03, 5.261e+02, 8.049e+01, 5.835e-01, 1.514e+03, 2.663e+02, 6.504e+01, 1.779e+01},
{ 5.261e+02, 3.024e+02, 2.857e+01, 2.160e+00, 5.096e+02, 9.804e+01, 2.575e+01, 7.001e+00},
{ 8.049e+01, 2.857e+01, 1.919e+01, 1.351e+00, 8.333e+01, 2.001e+01, 3.431e+00, 2.017e+00},
{ 5.835e-01, 2.160e+00, 1.351e+00, 4.298e+00, -1.159e+00, -4.992e-01, -2.374e-01, -3.336e-01},
{ 1.514e+03, 5.096e+02, 8.333e+01, -1.159e+00, 1.670e+03, 2.608e+02, 6.750e+01, 1.392e+01},
{ 2.663e+02, 9.804e+01, 2.001e+01, -4.992e-01, 2.608e+02, 1.825e+02, 1.545e+01, 1.083e+00},
{ 6.504e+01, 2.575e+01, 3.431e+00, -2.374e-01, 6.750e+01, 1.545e+01, 1.228e+01, 9.861e-01},
{ 1.779e+01, 7.001e+00, 2.017e+00, -3.336e-01, 1.392e+01, 1.083e+00, 9.861e-01, 6.608e+00},
};
set_covariance(BKGCOV);
}
};
// Factory fn
DEFINE_ANALYSIS_FACTORY(CMS_13TeV_2OSLEP_Slepton_137invfb)
}
}
Updated on 2026-11-03 at 14:50:47 +0000