From 1cbc8d93aca6083cfd864fe890dd333745efb55d Mon Sep 17 00:00:00 2001 From: Byeonghak Ko Date: Sat, 9 Feb 2019 17:19:56 +0900 Subject: [PATCH 1/5] Common tool for reading SF factor table from ROOT files --- external/interface/computePtEtaTable.h | 33 ++++++++++ external/src/computePtEtaTable.cc | 88 ++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 external/interface/computePtEtaTable.h create mode 100644 external/src/computePtEtaTable.cc diff --git a/external/interface/computePtEtaTable.h b/external/interface/computePtEtaTable.h new file mode 100644 index 00000000..1f52dbf9 --- /dev/null +++ b/external/interface/computePtEtaTable.h @@ -0,0 +1,33 @@ +#ifndef computePtEtaTable_H +#define computePtEtaTable_H + + +#include +#include + + +class computePtEtaTable { +public: + bool m_bValid; + + std::vector> m_listVal; + std::vector> m_listErr; + + std::vector m_listPtBin; + std::vector m_listEtaBin; + + bool m_bUseAbsEta; + +public: + computePtEtaTable(std::string strPath, std::string strHistName); + ~computePtEtaTable() {}; + + bool isValid() {return m_bValid;}; + + double getFactor(Float_t fPt, Float_t fEta, int direction=0); +}; + + +#endif // computePtEtaTable_H + + diff --git a/external/src/computePtEtaTable.cc b/external/src/computePtEtaTable.cc new file mode 100644 index 00000000..9bb7bf20 --- /dev/null +++ b/external/src/computePtEtaTable.cc @@ -0,0 +1,88 @@ +#include "nano/external/interface/computePtEtaTable.h" + +#include + + +computePtEtaTable::computePtEtaTable(std::string strPath, std::string strHistName) { + Int_t i, j; + + TFile *fData; + TH2 *hData; + + bool bFlipped; + + TH1D *hEta, *hPt, *hTmp; + Int_t nNEta, nNPt, nTmp; + + m_bValid = false; + + // Opening! + fData = TFile::Open(strPath.c_str()); + if ( fData == NULL ) return; + + hData = (TH2 *)fData->Get(strHistName.c_str()); + m_bValid = true; + + // To extract the binning info + hEta = hData->ProjectionX(); + hPt = hData->ProjectionY(); + + nNEta = hEta->GetNbinsX(); + nNPt = hPt->GetNbinsX(); + + bFlipped = false; + + // Maybe... some of data is flipped; eta along y and pt along x + if (std::abs(hEta->GetBinLowEdge(nNEta+1)) > std::abs(hPt->GetBinLowEdge(nNPt+1))) { + hTmp = hEta; hEta = hPt; hPt = hTmp; + nTmp = nNEta; nNEta = nNPt; nNPt = nTmp; + bFlipped = true; + } + + // Some of them has eta region [-2.4, 2.4], while others have [0, 2.4] + m_bUseAbsEta = hEta->GetBinLowEdge(1) > -0.1; + + // Keeping the binning info + for (i = 1; i <= nNEta+1; i++) m_listEtaBin.push_back(hEta->GetBinLowEdge(i)); + for (i = 1; i <= nNPt +1; i++) m_listPtBin.push_back(hPt->GetBinLowEdge(i)); + + // Making the store of weight and its uncertainty + for (i = 1; i <= nNEta; i++) { + m_listVal.emplace_back(); + m_listErr.emplace_back(); + + for (j = 1; j <= nNPt; j++) { + if (!bFlipped) { + // Strange, the actual one starts at index 3 + m_listVal[i-1].push_back(hData->GetBinContent(i, j+2)); + m_listErr[i-1].push_back(hData->GetBinError(i, j+2)); + } else { + m_listVal[i-1].push_back(hData->GetBinContent(j, i+2)); + m_listErr[i-1].push_back(hData->GetBinError(j, i+2)); + } + } + } + + fData->Close(); +} + +double computePtEtaTable::getFactor(Float_t fPt, Float_t fEta, int direction) { + // Seeking the bin in which the value is contained + auto GetIdxRange = [](Float_t fX, std::vector listEdges) { + if (fX < listEdges[0]) return 0; + else if (fX >= listEdges[listEdges.size()-1]) return ((Int_t)listEdges.size())-1; + else return (int)(std::lower_bound(listEdges.begin(), listEdges.end(), fX)-listEdges.begin())-1; + }; + + Int_t nIdxPt, nIdxEta; + + if (m_bUseAbsEta) fEta = std::abs(fEta); + + nIdxPt = GetIdxRange(fPt, m_listPtBin); + nIdxEta = GetIdxRange(fEta, m_listEtaBin); + + std::cout << fPt << ", " << fEta << ": (" + << nIdxPt << ", " << nIdxEta << ") - " + << m_listVal[nIdxEta][nIdxPt] << ", " << m_listErr[nIdxEta][nIdxPt] << std::endl; + return m_listVal[nIdxEta][nIdxPt]+direction*m_listErr[nIdxEta][nIdxPt]; +} From fef8f485430fc6328dcb7954fc9d26053e25274f Mon Sep 17 00:00:00 2001 From: Byeonghak Ko Date: Mon, 11 Feb 2019 18:44:55 +0900 Subject: [PATCH 2/5] Bug fix & added a merger script & applied --- analysis/interface/nanoBase.h | 9 ++ analysis/src/nanoBase.cc | 19 ++++ analysis/src/topEventSelectionSL.cc | 19 ++-- external/interface/computePtEtaTable.h | 3 +- external/scripts/mergeSFroots.py | 135 +++++++++++++++++++++++++ external/src/computePtEtaTable.cc | 34 +++++-- 6 files changed, 199 insertions(+), 20 deletions(-) create mode 100755 external/scripts/mergeSFroots.py diff --git a/analysis/interface/nanoBase.h b/analysis/interface/nanoBase.h index a251c758..9ad835bd 100644 --- a/analysis/interface/nanoBase.h +++ b/analysis/interface/nanoBase.h @@ -9,6 +9,8 @@ #include +#include + #include "nano/external/interface/pileUpTool.h" #include "nano/external/interface/RoccoR.h" #include "nano/external/interface/lumiTool.h" @@ -19,6 +21,7 @@ #include "nano/external/interface/BTagCalibrationStandalone.h" //#include "nano/external/interface/TopTriggerSF.h" //#include "nano/external/interface/TTbarModeDefs.h" +#include "nano/external/interface/computePtEtaTable.h" #include "TMVA/Tools.h" #include "TMVA/Reader.h" @@ -45,6 +48,12 @@ class nanoBase : public Events ElecScaleFactorEvaluator m_elecSF; BTagCalibrationReader m_btagSF, m_btagSF_up, m_btagSF_dn; + std::string m_strTrigSFEl, m_strTrigSFMu; + std::string m_strLeptonSFEl, m_strLeptonSFMu; + + computePtEtaTable m_tableTrigSFEl, m_tableTrigSFMu; + computePtEtaTable m_tableLeptonSFEl, m_tableLeptonSFMu; + Bool_t m_isMC; }; diff --git a/analysis/src/nanoBase.cc b/analysis/src/nanoBase.cc index 5e680e2e..1f45105c 100644 --- a/analysis/src/nanoBase.cc +++ b/analysis/src/nanoBase.cc @@ -33,6 +33,25 @@ nanoBase::nanoBase(TTree *tree, TTree *had, TTree *hadTruth, Bool_t isMC) : m_btagSF.load(calib, BTagEntry::FLAV_B, "comb"); m_btagSF_up.load(calib, BTagEntry::FLAV_B, "comb"); m_btagSF_dn.load(calib, BTagEntry::FLAV_B, "comb"); + + string strBaseData = env+"/src/nano/analysis/data/scaleFactor/2016/"; + m_strTrigSFEl = strBaseData+"HLT_Ele32_eta2p1_WPTight_Gsf_FullRunRange.root"; + m_strTrigSFMu = strBaseData+"EfficienciesAndSF_Run2016.root"; + m_strLeptonSFEl = strBaseData+"2016LegacyReReco_ElectronTight.root"; + m_strLeptonSFMu = strBaseData+"Run2016_SF_ID.root"; + + if (!exists_test(m_strTrigSFEl) || !exists_test(m_strTrigSFMu) || + !exists_test(m_strLeptonSFEl) || !exists_test(m_strLeptonSFMu)) + { + std::cout << "Missing data file, run getFiles and try again" << std::endl; + exit(50); + } + + m_tableTrigSFEl.LoadData(m_strTrigSFEl, "SF"); + m_tableTrigSFMu.LoadData(m_strTrigSFMu, "IsoMu24_OR_IsoTkMu24_PtEtaBins/abseta_pt_ratio"); + + m_tableLeptonSFEl.LoadData(m_strLeptonSFEl, "EGamma_SF2D"); + m_tableLeptonSFMu.LoadData(m_strLeptonSFMu, "NUM_TightID_DEN_genTracks_eta_pt"); } nanoBase::~nanoBase() diff --git a/analysis/src/topEventSelectionSL.cc b/analysis/src/topEventSelectionSL.cc index c78cd5bf..4b26e528 100644 --- a/analysis/src/topEventSelectionSL.cc +++ b/analysis/src/topEventSelectionSL.cc @@ -145,16 +145,16 @@ int topEventSelectionSL::EventSelection() recolep = muons[0]; b_channel = CH_MU; - b_mueffweight = muonSF_.getScaleFactor(recolep, 13, 0); - b_mueffweight_up = muonSF_.getScaleFactor(recolep, 13, 1); - b_mueffweight_dn = muonSF_.getScaleFactor(recolep, 13, -1); + b_mueffweight = m_tableLeptonSFMu.getFactor(recolep.Pt(), recolep.Eta()); + b_mueffweight_up = m_tableLeptonSFMu.getFactor(recolep.Pt(), recolep.Eta(), 1); + b_mueffweight_dn = m_tableLeptonSFMu.getFactor(recolep.Pt(), recolep.Eta(), -1); } else if (elecs.size() == 1) { recolep = elecs[0]; b_channel = CH_EL; - b_eleffweight = elecSF_.getScaleFactor(recolep, 11, 0); - b_eleffweight_up = elecSF_.getScaleFactor(recolep, 11, 1); - b_eleffweight_dn = elecSF_.getScaleFactor(recolep, 11, -1); + b_eleffweight = m_tableLeptonSFEl.getFactor(recolep.Pt(), recolep.Eta()); + b_eleffweight_up = m_tableLeptonSFEl.getFactor(recolep.Pt(), recolep.Eta(), 1); + b_eleffweight_dn = m_tableLeptonSFEl.getFactor(recolep.Pt(), recolep.Eta(), -1); } recolep.Momentum(b_lep); @@ -162,9 +162,10 @@ int topEventSelectionSL::EventSelection() recoleps.push_back(b_lep); b_tri = b_tri_up = b_tri_dn = 0; - b_tri = 1; //computeTrigSF(recolep1, recolep2); - b_tri_up = 1; //computeTrigSF(recolep1, recolep2, 1); - b_tri_dn = 1; //computeTrigSF(recolep1, recolep2, -1); + computePtEtaTable &tableTrigSF = (std::abs(b_lep_pid) == 11 ? m_tableTrigSFEl : m_tableTrigSFMu); + b_tri = tableTrigSF.getFactor(recolep.Pt(), recolep.Eta()); + b_tri_up = tableTrigSF.getFactor(recolep.Pt(), recolep.Eta(), 1); + b_tri_dn = tableTrigSF.getFactor(recolep.Pt(), recolep.Eta(), -1); // Veto Leptons diff --git a/external/interface/computePtEtaTable.h b/external/interface/computePtEtaTable.h index 1f52dbf9..986e93c5 100644 --- a/external/interface/computePtEtaTable.h +++ b/external/interface/computePtEtaTable.h @@ -19,11 +19,12 @@ class computePtEtaTable { bool m_bUseAbsEta; public: - computePtEtaTable(std::string strPath, std::string strHistName); + computePtEtaTable() {}; ~computePtEtaTable() {}; bool isValid() {return m_bValid;}; + int LoadData(std::string strPath, std::string strHistName); double getFactor(Float_t fPt, Float_t fEta, int direction=0); }; diff --git a/external/scripts/mergeSFroots.py b/external/scripts/mergeSFroots.py new file mode 100755 index 00000000..57b011d3 --- /dev/null +++ b/external/scripts/mergeSFroots.py @@ -0,0 +1,135 @@ +#!/usr/bin/python3 + + +import ROOT +import os, sys, ctypes, array + + +strOut = sys.argv[ 1 ] # The output file name +strNameHist = sys.argv[ 2 ] # The name of histogram +nOffsetArg = 3 + +listSrc = [] +listLumi = [] + +for i in range(( len(sys.argv) - nOffsetArg) // 2): + listSrc.append(sys.argv[ 2 * i + nOffsetArg ]) + listLumi.append(float(sys.argv[ 2 * i + nOffsetArg + 1 ])) + +fInvSumLumi = 1.0 / sum(listLumi) +for i in range(len(listLumi)): listLumi[ i ] *= fInvSumLumi # What we actually want is relative lumis + +# Extracting binning info +listBinX = [] +listBinY = [] + +fFirst = ROOT.TFile.Open(listSrc[ 0 ]) +hFirst = fFirst.Get(strNameHist) +strTitle = hFirst.GetTitle() + +hBinX = hFirst.ProjectionX() +hBinY = hFirst.ProjectionY() + +nNumBinX = hBinX.GetNbinsX() +nNumBinY = hBinY.GetNbinsX() + +for i in range(nNumBinX + 1): listBinX.append(hBinX.GetBinLowEdge(i + 1)) +for i in range(nNumBinY + 1): listBinY.append(hBinY.GetBinLowEdge(i + 1)) + +fFirst.Close() + +# Preparing the output file and directory +fNew = ROOT.TFile.Open(strOut, "RECREATE") + +# Some of source contains histogram into a directory. It will be also duplicated +strDir = "/".join(strNameHist.split("/")[ : -1 ]) +if strDir != "": + fNew.mkdir(strDir) + fNew.cd(strDir) + +# There will be data +hNew = ROOT.TH2F(strNameHist.split("/")[ -1 ], strTitle, + nNumBinX, array.array("d", listBinX), nNumBinY, array.array("d", listBinY)) + +# The main part: Reading all source and combining the info from them +# I used the following fomula: +# SF = sum_i ( SF_i * (rel. lumi)_i ) +# err = sqrt( sum_i ( err_i * (rel. lumi)_i )^2 ) +# First, SF and err^2 will be calculated in stored in hNew. After that, sqrt(err^2) will be stored. +fSrc = None +strPathCurr = "" +class NonConsistenceException(Exception): pass + +try: + for nIdxSrc in range(len(listSrc)): + strPathCurr = listSrc[ nIdxSrc ] + fSrc = ROOT.TFile.Open(strPathCurr) + hSrc = fSrc.Get(strNameHist) + + if hSrc == None: raise NonConsistenceException + + # Btw, for preventing a mistake, I added a check whether histograms are consistence or not + # The rule is easy: Does these histograms have same binning? + if nIdxSrc != 0: # The reference is the first histo, where we already got the bin infos of this + hBinXCurr = hSrc.ProjectionX() + hBinYCurr = hSrc.ProjectionY() + + if nNumBinX != hBinXCurr.GetNbinsX() or nNumBinY != hBinYCurr.GetNbinsX(): + raise NonConsistenceException + + for i in range(nNumBinX + 1): + if listBinX[ i ] != hBinXCurr.GetBinLowEdge(i + 1): + raise NonConsistenceException + + for i in range(nNumBinY + 1): + if listBinY[ i ] != hBinYCurr.GetBinLowEdge(i + 1): + raise NonConsistenceException + + # Now, no problem. Time to calculate! + for i in range(nNumBinX): + for j in range(nNumBinY): + fCX = 0.5 * ( listBinX[ i ] + listBinX[ i + 1 ] ) + fCY = 0.5 * ( listBinY[ j ] + listBinY[ j + 1 ] ) + + nIdxXPre = ctypes.c_int() + nIdxYPre = ctypes.c_int() + nIdxZPre = ctypes.c_int() + + # There is a strange issue that the bin indices don't correspond to the displayed bins, + # which means, e.g., if I call hSrc.GetBinContent(1, 3) + # (see HLT_Ele32_eta2p1_WPTight_Gsf_FullRunRange.root) + # then this method returns the content in (1, 1)-bin. + # Even this phenomonon does not occur always; only some of histograms has this issue. + # This complicated way to get the bin indices is for avoiding this problem. + hSrc.GetBinXYZ(hSrc.FindBin(fCX, fCY), nIdxXPre, nIdxYPre, nIdxZPre) + nIdxX = nIdxXPre.value + nIdxY = nIdxYPre.value + + fSF = hNew.GetBinContent(i + 1, j + 1) + fErr = hNew.GetBinError(i + 1, j + 1) + + fSF += hSrc.GetBinContent(nIdxX, nIdxY) * listLumi[ nIdxSrc ] + fErr += ( hSrc.GetBinError(nIdxX, nIdxY) * listLumi[ nIdxSrc ] ) ** 2 + + hNew.SetBinContent(i + 1, j + 1, fSF) + hNew.SetBinError(i + 1, j + 1, fErr) + + fSrc.Close() + +except NonConsistenceException: + sys.stderr.write("FATAL ERROR: Non-consistence of histograms; %s\n"%strPathCurr) + + fSrc.Close() # In here, one of source file had been opened but not closed + fNew.Close() + + sys.exit(1) + +# As mentioned, storing sqrt(err^2) +for nIdxX in range(nNumBinX): + for nIdxY in range(nNumBinY): + hNew.SetBinError(nIdxX + 1, nIdxY + 1, ( hNew.GetBinError(nIdxX + 1, nIdxY + 1) ) ** 0.5) + +fNew.Write() +fNew.Close() + + diff --git a/external/src/computePtEtaTable.cc b/external/src/computePtEtaTable.cc index 9bb7bf20..8b25ac9b 100644 --- a/external/src/computePtEtaTable.cc +++ b/external/src/computePtEtaTable.cc @@ -3,7 +3,7 @@ #include -computePtEtaTable::computePtEtaTable(std::string strPath, std::string strHistName) { +int computePtEtaTable::LoadData(std::string strPath, std::string strHistName) { Int_t i, j; TFile *fData; @@ -14,11 +14,14 @@ computePtEtaTable::computePtEtaTable(std::string strPath, std::string strHistNam TH1D *hEta, *hPt, *hTmp; Int_t nNEta, nNPt, nTmp; + Float_t fBinCX, fBinCY; + Int_t nIdxX, nIdxY, nIdxZ; + m_bValid = false; // Opening! fData = TFile::Open(strPath.c_str()); - if ( fData == NULL ) return; + if ( fData == NULL ) return -1; hData = (TH2 *)fData->Get(strHistName.c_str()); m_bValid = true; @@ -53,20 +56,34 @@ computePtEtaTable::computePtEtaTable(std::string strPath, std::string strHistNam for (j = 1; j <= nNPt; j++) { if (!bFlipped) { - // Strange, the actual one starts at index 3 - m_listVal[i-1].push_back(hData->GetBinContent(i, j+2)); - m_listErr[i-1].push_back(hData->GetBinError(i, j+2)); + fBinCX = 0.5*(m_listEtaBin[i-1]+m_listEtaBin[i]); + fBinCY = 0.5*(m_listPtBin[j-1]+m_listPtBin[j]); } else { - m_listVal[i-1].push_back(hData->GetBinContent(j, i+2)); - m_listErr[i-1].push_back(hData->GetBinError(j, i+2)); + fBinCX = 0.5*(m_listPtBin[j-1]+m_listPtBin[j]); + fBinCY = 0.5*(m_listEtaBin[i-1]+m_listEtaBin[i]); } + + // There is a strange issue that the bin indices don't correspond to the displayed bins, + // which means, e.g., if I call hSrc.GetBinContent(1, 3) + // (see HLT_Ele32_eta2p1_WPTight_Gsf_FullRunRange.root) + // then this method returns the content in (1, 1)-bin. + // Even this phenomonon does not occur always; only some of histograms has this issue. + // This complicated way to get the bin indices is for avoiding this problem. + hData->GetBinXYZ(hData->FindBin(fBinCX, fBinCY), nIdxX, nIdxY, nIdxZ); + + m_listVal[i-1].push_back(hData->GetBinContent(nIdxX, nIdxY)); + m_listErr[i-1].push_back(hData->GetBinError(nIdxX, nIdxY)); } } fData->Close(); + + return 0; } double computePtEtaTable::getFactor(Float_t fPt, Float_t fEta, int direction) { + if (!m_bValid) return -1; + // Seeking the bin in which the value is contained auto GetIdxRange = [](Float_t fX, std::vector listEdges) { if (fX < listEdges[0]) return 0; @@ -81,8 +98,5 @@ double computePtEtaTable::getFactor(Float_t fPt, Float_t fEta, int direction) { nIdxPt = GetIdxRange(fPt, m_listPtBin); nIdxEta = GetIdxRange(fEta, m_listEtaBin); - std::cout << fPt << ", " << fEta << ": (" - << nIdxPt << ", " << nIdxEta << ") - " - << m_listVal[nIdxEta][nIdxPt] << ", " << m_listErr[nIdxEta][nIdxPt] << std::endl; return m_listVal[nIdxEta][nIdxPt]+direction*m_listErr[nIdxEta][nIdxPt]; } From ecae719c002427c4b4fbcc3af5d424f76e382bc9 Mon Sep 17 00:00:00 2001 From: Byeonghak Ko Date: Mon, 11 Feb 2019 21:05:35 +0900 Subject: [PATCH 3/5] A little simplifying --- external/scripts/mergeSFroots.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/external/scripts/mergeSFroots.py b/external/scripts/mergeSFroots.py index 57b011d3..627dbcd3 100755 --- a/external/scripts/mergeSFroots.py +++ b/external/scripts/mergeSFroots.py @@ -91,9 +91,9 @@ class NonConsistenceException(Exception): pass fCX = 0.5 * ( listBinX[ i ] + listBinX[ i + 1 ] ) fCY = 0.5 * ( listBinY[ j ] + listBinY[ j + 1 ] ) - nIdxXPre = ctypes.c_int() - nIdxYPre = ctypes.c_int() - nIdxZPre = ctypes.c_int() + nIdxX = ctypes.c_int() + nIdxY = ctypes.c_int() + nIdxZ = ctypes.c_int() # There is a strange issue that the bin indices don't correspond to the displayed bins, # which means, e.g., if I call hSrc.GetBinContent(1, 3) @@ -101,15 +101,13 @@ class NonConsistenceException(Exception): pass # then this method returns the content in (1, 1)-bin. # Even this phenomonon does not occur always; only some of histograms has this issue. # This complicated way to get the bin indices is for avoiding this problem. - hSrc.GetBinXYZ(hSrc.FindBin(fCX, fCY), nIdxXPre, nIdxYPre, nIdxZPre) - nIdxX = nIdxXPre.value - nIdxY = nIdxYPre.value + hSrc.GetBinXYZ(hSrc.FindBin(fCX, fCY), nIdxX, nIdxY, nIdxZ) fSF = hNew.GetBinContent(i + 1, j + 1) fErr = hNew.GetBinError(i + 1, j + 1) - fSF += hSrc.GetBinContent(nIdxX, nIdxY) * listLumi[ nIdxSrc ] - fErr += ( hSrc.GetBinError(nIdxX, nIdxY) * listLumi[ nIdxSrc ] ) ** 2 + fSF += hSrc.GetBinContent(nIdxX.value, nIdxY.value) * listLumi[ nIdxSrc ] + fErr += ( hSrc.GetBinError(nIdxX.value, nIdxY.value) * listLumi[ nIdxSrc ] ) ** 2 hNew.SetBinContent(i + 1, j + 1, fSF) hNew.SetBinError(i + 1, j + 1, fErr) From d4531d3260e510bd6972a72784c3ed8fa0738921 Mon Sep 17 00:00:00 2001 From: Byeonghak Ko Date: Mon, 11 Feb 2019 21:09:05 +0900 Subject: [PATCH 4/5] Temporarily added the SF root files --- .../2016/2016LegacyReReco_ElectronTight.root | Bin 0 -> 10443 bytes .../2016/EfficienciesAndSF_Run2016.root | Bin 0 -> 5065 bytes ...T_Ele32_eta2p1_WPTight_Gsf_FullRunRange.root | Bin 0 -> 8241 bytes .../data/scaleFactor/2016/Run2016_SF_ID.root | Bin 0 -> 6068 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 analysis/data/scaleFactor/2016/2016LegacyReReco_ElectronTight.root create mode 100644 analysis/data/scaleFactor/2016/EfficienciesAndSF_Run2016.root create mode 100644 analysis/data/scaleFactor/2016/HLT_Ele32_eta2p1_WPTight_Gsf_FullRunRange.root create mode 100644 analysis/data/scaleFactor/2016/Run2016_SF_ID.root diff --git a/analysis/data/scaleFactor/2016/2016LegacyReReco_ElectronTight.root b/analysis/data/scaleFactor/2016/2016LegacyReReco_ElectronTight.root new file mode 100644 index 0000000000000000000000000000000000000000..bb86cf258c8969e3dfa4a28f498bfa9f3f2254b6 GIT binary patch literal 10443 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 literal 0 HcmV?d00001 diff --git a/analysis/data/scaleFactor/2016/EfficienciesAndSF_Run2016.root b/analysis/data/scaleFactor/2016/EfficienciesAndSF_Run2016.root new file mode 100644 index 0000000000000000000000000000000000000000..01855ebba95b77190daca6fffd978017b9332e65 GIT binary patch literal 5065 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 Tcjoi|rOfvtDcIb&lA!(vJ2;0# literal 0 HcmV?d00001 diff --git a/analysis/data/scaleFactor/2016/Run2016_SF_ID.root b/analysis/data/scaleFactor/2016/Run2016_SF_ID.root new file mode 100644 index 0000000000000000000000000000000000000000..89c46b916711e1b0b27f411db8f3f470d43fce42 GIT binary patch literal 6068 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 Je1y^g{{dZrMT7tV literal 0 HcmV?d00001 From f52c59400be7c43850559f3cda881c3e7bc9ce02 Mon Sep 17 00:00:00 2001 From: Byeonghak Ko Date: Fri, 22 Feb 2019 00:46:56 +0900 Subject: [PATCH 5/5] Fixed a boundary bug --- external/src/computePtEtaTable.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/src/computePtEtaTable.cc b/external/src/computePtEtaTable.cc index 8b25ac9b..d0c99d63 100644 --- a/external/src/computePtEtaTable.cc +++ b/external/src/computePtEtaTable.cc @@ -87,7 +87,7 @@ double computePtEtaTable::getFactor(Float_t fPt, Float_t fEta, int direction) { // Seeking the bin in which the value is contained auto GetIdxRange = [](Float_t fX, std::vector listEdges) { if (fX < listEdges[0]) return 0; - else if (fX >= listEdges[listEdges.size()-1]) return ((Int_t)listEdges.size())-1; + else if (fX >= listEdges[listEdges.size()-1]) return ((Int_t)listEdges.size())-2; else return (int)(std::lower_bound(listEdges.begin(), listEdges.end(), fX)-listEdges.begin())-1; };