diff --git a/README.md b/README.md index 2038a7f..0ca5b69 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ you can use the below commands for the setup. This also sets up the environment for the batch system at UCSB ~~~~bash -git clone --recurse-submodules git@github.com:richstu/draw_pico.git +git clone --recursive git@github.com:richstu/draw_pico.git cd draw_pico source set_env.sh ./compile.py or scons diff --git a/inc/zgamma/KinZfitter.h b/inc/zgamma/KinZfitter.h new file mode 100644 index 0000000..361113a --- /dev/null +++ b/inc/zgamma/KinZfitter.h @@ -0,0 +1,121 @@ +/************************************************************************* +* Authors: Tongguang CHeng(IHEP, Beijing) Hualin Mei(UF) +*************************************************************************/ +#ifndef KinZfitter_h +#define KinZfitter_h + +// C++ includes +#include +#include +#include +#include +#include +#include +#include +#include + +// ROOT includes +#include "TString.h" +#include "TLorentzVector.h" + +// ROOFIT +#include "RooRealVar.h" +#include "RooArgSet.h" +#include "RooGaussian.h" +#include "RooBreitWigner.h" +#include "RooProdPdf.h" +#include "RooDataSet.h" +#include "RooGlobalFunc.h" +#include "RooDataHist.h" +#include "RooHistPdf.h" +#include "RooCBShape.h" +#include "RooMinuit.h" +#include "RooFormulaVar.h" +#include "RooAddPdf.h" +#include "RooGenericPdf.h" +#include "RooFFTConvPdf.h" +#include "RooFitResult.h" + +// fit result covariance matrix +#include + +using namespace std; + +class KinZfitter { + public: + + KinZfitter(bool isData); + + /// Kinematic fit of lepton momenta + void Setup(std::map selectedLeptons, std::map selectedFsrPhotons, std::map errorLeptons); + + /// + void KinRefitZ1(); + + int PerZ1Likelihood(double & l1, double & l2, double & lph1, double & lph2); + void SetZ1Result(double l1, double l2, double lph1, double lph2); + double pterr(TLorentzVector fsrPhoton); + double masserror(std::vector p4s, std::vector pTErrs); + double masserrorFullCov(std::vector p4s, TMatrixDSym covMatrix); + + // result wrappers + double GetRefitM4l(); + double GetM4l(); + double GetRefitMZ1(); + + double GetMZ1Err(); + double GetRefitM4lErr(); + double GetM4lErr(); + double GetRefitM4lErrFullCov(); + + std::vector GetRefitP4s(); + std::vector GetP4s(); + + //////////////// + + // Need to check in deep whether this function is doable + // RooFormulaVar p1DOTp2(RooRealVar pT1, RooRealVar theta1, RooRealVar phi1, RooRealVar m1, TString index1, RooRealVar pT2, RooRealVar theta2, RooRealVar phi2, RooRealVar m2, TString index2); + + private: + + /// True mZ/mZ1 shape, final states + TString PDFName_, fs_; + + /// debug flag + bool debug_; + + /// whether use correction for pT error + bool isCorrPTerr_; + /// whether use data or mc correction + bool isData_; + + void initZs(std::map selectedLeptons, std::map selectedFsrPhoton, std::map errorLeptons); + + /// lepton ids for Z1 + std::vector idsZ1_; + /// lepton ids that fsr photon associated to + std::vector idsFsrZ1_; + /// (Four) TLorentzVectors that form the Higgs Candidate + std::vector p4sZ1_, p4sZ1ph_; + std::vector p4sZ1REFIT_, p4sZ1phREFIT_; + + /// pTerr vector + std::vector pTerrsZ1_, pTerrsZ1ph_; + std::vector pTerrsZ1REFIT_, pTerrsZ1phREFIT_; + + // covariance matrix + // what directly coming from Refit + TMatrixDSym covMatrixZ1_; + + // refit energy scale with respect to reco pT + double lZ1_l1_, lZ1_l2_; + double lZ1_ph1_, lZ1_ph2_; + + // True mZ1 shape parameters + // double sgVal_, aVal_, nVal_, fVal_, meanVal_, sigmaVal_, f1Val_; + double meanCB_, sigmaCB_, alphaCB_, nCB_, meanGauss1_, sigmaGauss1_, f1_, meanGauss2_, sigmaGauss2_, f2_, meanGauss3_, sigmaGauss3_, f3_; + // double aVal_, meanVal_, nVal_, sgVal_, bwsigVal_; + +}; + +#endif diff --git a/inc/zgamma/zg_utilities.hpp b/inc/zgamma/zg_utilities.hpp index 951b891..1e11587 100644 --- a/inc/zgamma/zg_utilities.hpp +++ b/inc/zgamma/zg_utilities.hpp @@ -32,5 +32,9 @@ namespace ZgUtilities { double cos_theta(const Baby &b, bool gen = false); double cos_Theta(const Baby &b, bool gen = false); double Getphi(const Baby &b, bool gen = false); + double KinRefit(const Baby &b); + std::vector RefitP4(const Baby &b); + double AssignL1Error(const Baby &b); + double AssignL2Error(const Baby &b); } #endif diff --git a/src/zgamma/KinZfitter.cpp b/src/zgamma/KinZfitter.cpp new file mode 100644 index 0000000..763e482 --- /dev/null +++ b/src/zgamma/KinZfitter.cpp @@ -0,0 +1,633 @@ +/************************************************************************* + * Authors: Tongguang Cheng + *************************************************************************/ +#ifndef KinZfitter_cpp +#define KinZfitter_cpp + +/// KinFitter header +#include "zgamma/KinZfitter.h" + +KinZfitter::KinZfitter(bool isData) { + + PDFName_ = "HZg_ggF_125GeV_ext1_M125_13TeV_powheg2_pythia8"; + debug_ = true; + if(debug_) std::cout << "KinZfitter. The debug flag is ON with "< p4s, TMatrixDSym covMatrix){ + + int ndim = 3*p4s.size(); + if(debug_) cout<<""< 0 ? std::sqrt(dm2) : 0.0); + +} + + +double KinZfitter::masserror( std::vector Lep, std::vector pterr){ + + TLorentzVector compositeParticle ; + for(unsigned int i=0; i selectedLeptons, std::map selectedFsrPhotons, std::map errorLeptons) { + + // reset everything for each event + idsZ1_.clear(); + + p4sZ1_.clear(); + p4sZ1ph_.clear(); + p4sZ1REFIT_.clear(); + p4sZ1phREFIT_.clear(); + + pTerrsZ1_.clear(); + pTerrsZ1ph_.clear(); + pTerrsZ1REFIT_.clear(); + pTerrsZ1phREFIT_.clear(); + + initZs(selectedLeptons, selectedFsrPhotons, errorLeptons); + + if(debug_) cout<<"list ids"<> p >> val) { + if(p=="meanCB") { meanCB_ = val;} + if(p=="sigmaCB") { sigmaCB_ = val;} + if(p=="alphaCB") { alphaCB_ = val;} + if(p=="nCB") { nCB_ = val;} + if(p=="meanGauss1") { meanGauss1_ = val;} + if(p=="sigmaGauss1") { sigmaGauss1_ = val;} + if(p=="f1") { f1_ = val;} + if(p=="meanGauss2") { meanGauss2_ = val; } + if(p=="sigmaGauss2") { sigmaGauss2_ = val;} + if(p=="f2") { f2_ = val;} + if(p=="meanGauss3") { meanGauss3_ = val;} + if(p=="sigmaGauss3") { sigmaGauss3_ = val;} + if(p=="f3") { f3_ = val;} + } + } +} + +///---------------------------------------------------------------------------------------------- +void KinZfitter::initZs(std::map selectedLeptons, std::map selectedFsrPhotons, std::map errorLeptons) { + + if(debug_) cout<<"init leptons"< 0.05) { + pdgId = 13; + pTerr = errorLeptons[il]; + } + else { + pdgId = 11; + pTerr = errorLeptons[il]; + // pTerr = errorLeptons[il]*(p4.Pt()/p4.Et()); + } + if(debug_) cout<<"pdg id "< p4s = GetRefitP4s(); + + TLorentzVector pZ1(0,0,0,0); + + pZ1 = p4s[0] + p4s[1]; + + return pZ1.M(); + +} + + +double KinZfitter::GetMZ1Err() +{ + + vector p4s; + vector pTErrs; + + p4s.push_back(p4sZ1_[0]); + p4s.push_back(p4sZ1_[1]); + + pTErrs.push_back(pTerrsZ1_[0]); + pTErrs.push_back(pTerrsZ1_[1]); + + for(unsigned int ifsr1 = 0; ifsr1 KinZfitter::GetRefitP4s() +{ + + TLorentzVector Z1_1 = p4sZ1REFIT_[0]; + TLorentzVector Z1_2 = p4sZ1REFIT_[1]; + + /// fsr photons + for(unsigned int ifsr1 = 0; ifsr1 p4s; + p4s.push_back(Z1_1); p4s.push_back(Z1_2); + + return p4s; + +} + +vector KinZfitter::GetP4s() +{ + + TLorentzVector Z1_1 = p4sZ1_[0]; + TLorentzVector Z1_2 = p4sZ1_[1]; + + /// fsr photons + for(unsigned int ifsr1 = 0; ifsr1 p4s; + p4s.push_back(Z1_1); + p4s.push_back(Z1_2); + + return p4s; + +} + +void KinZfitter::KinRefitZ1() +{ + + double l1, l2, lph1, lph2; + l1 = 1.0; l2 = 1.0; lph1 = 1.0; lph2 = 1.0; + + PerZ1Likelihood(l1, l2, lph1, lph2); + if(debug_) cout<<"l1 "<=1) { + Z1_ph1 = p4sZ1ph_[0]; pTerrZ1_ph1 = pTerrsZ1ph_[0]; + RECOpTph1 = Z1_ph1.Pt(); + if(debug_) cout<<"put in Z1 fsr photon 1 pT "<getVal()<<" m2 "<getVal()<getVal()<getVal()<=2) + rastmp = new RooArgSet(*pT1RECO, *pT2RECO, *pTph1RECO, *pTph2RECO); + + RooDataSet* pTs = new RooDataSet("pTs", "pTs", *rastmp); + pTs->add(*rastmp); + + //RooAbsReal* nll; + //nll = model->createNLL(*pTs); + //RooMinuit(*nll).migrad(); + + RooFitResult* r = model->fitTo(*pTs, RooFit::Save(), RooFit::PrintLevel(-1)); + const TMatrixDSym& covMatrix = r->covarianceMatrix(); + + const RooArgList& finalPars = r->floatParsFinal(); + for (int i=0 ; iGetName()); + TString name = "Cast Error"; + + if(debug_) cout<<"name list of RooRealVar for covariance matrix "<getVal()/RECOpT1; + l2 = pT2->getVal()/RECOpT2; + double pTerrZ1REFIT1 = pT1->getError(); + double pTerrZ1REFIT2 = pT2->getError(); + + pTerrsZ1REFIT_.push_back(pTerrZ1REFIT1); + pTerrsZ1REFIT_.push_back(pTerrZ1REFIT2); + + if(p4sZ1ph_.size()>=1) { + + if(debug_) cout<<"set refit result for Z1 fsr photon 1"<getVal()/RECOpTph1; + double pTerrZ1phREFIT1 = pTph1->getError(); + if(debug_) cout<<"scale "<getVal()/RECOpTph2; + double pTerrZ1phREFIT2 = pTph2->getError(); + pTerrsZ1phREFIT_.push_back(pTerrZ1phREFIT2); + + } + + //delete nll; + delete r; + delete mZ1; + delete pT1; delete pT2; delete pTph1; delete pTph2; + delete pT1RECO; delete pT2RECO; delete pTph1RECO; delete pTph2RECO; + delete ph1v3Dph2; delete p1v3Dph1; delete p2v3Dph1; delete p1v3Dph2; delete p2v3Dph2; + delete model; + delete pTs; + delete rastmp; + + if(debug_) cout<<"end Z1 refit"< +#include +#include +#include +#include +#include +#include +#include "TError.h" +#include "TColor.h" +#include "TVector3.h" +#include "TLorentzVector.h" +#include "core/baby.hpp" +#include "core/process.hpp" +#include "core/named_func.hpp" +#include "core/plot_maker.hpp" +#include "core/plot_opt.hpp" +#include "core/palette.hpp" +#include "core/table.hpp" +#include "core/hist1d.hpp" +#include "core/utilities.hpp" +#include "zgamma/zg_utilities.hpp" +using namespace std; +using namespace PlotOptTypes; +using namespace ZgUtilities; + +int main() { + gErrorIgnoreLevel = 6000; + Palette colors("txt/colors.txt","default"); + Process::Type sig = Process::Type::signal; + string bfolder("/net/cms17/cms17r0/pico/"); + string ul_path(bfolder+"NanoAODv9/zgamma_signal/2016/signal/merged_zgmc_llg/"); + + NamedFunc kinFit("kinFit", [](const Baby &b) -> NamedFunc::ScalarType{ + double mZ_fit = KinRefit(b); + return mZ_fit; + }); + NamedFunc kinFitH("kinFitH", [](const Baby &b) -> NamedFunc::ScalarType{ + std::vector reFit = RefitP4(b); + TLorentzVector H = reFit[0] + reFit[1] + AssignGamma(b); + return H.M(); + }); + NamedFunc wgt("weight",[](const Baby &b) -> NamedFunc::ScalarType{ + double weight = b.w_lumi(); + return weight*100; + }); + + NamedFunc el_trigs("HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_DZ"); + NamedFunc mu_trigs("HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ || HLT_Mu17_TrkIsoVVL_TkMu8_TrkIsoVVL_DZ"); + NamedFunc trigs(el_trigs || mu_trigs); + NamedFunc mass_cuts("ll_m[llphoton_ill[0]] > 50 && " + "llphoton_m[0]+ll_m[llphoton_ill[0]]>=185 && " + "llphoton_m[0] > 100 && llphoton_m[0] < 180 && " + "photon_pt[llphoton_iph[0]]/llphoton_m[0] >= 15./110"); + NamedFunc baseline("nllphoton > 0"); + vector lep = {"ll_lepid[llphoton_ill[0]] == 11 && " + "el_pt[ll_i1[llphoton_ill[0]]] > 25 && " + "el_pt[ll_i2[llphoton_ill[0]]] > 15 && " + "el_sig[ll_i1[llphoton_ill[0]]] && " + "el_sig[ll_i2[llphoton_ill[0]]]", + "ll_lepid[llphoton_ill[0]] == 13 && " + "mu_pt[ll_i1[llphoton_ill[0]]] > 20 && " + "mu_pt[ll_i2[llphoton_ill[0]]] > 10 && " + "mu_sig[ll_i1[llphoton_ill[0]]] && " + "mu_sig[ll_i2[llphoton_ill[0]]]"}; + NamedFunc pho("photon_pt[llphoton_iph[0]] > 15 && " + "photon_drmin[llphoton_iph[0]] > 0.4 && " + "photon_sig[llphoton_iph[0]]"); + + PlotOpt log_lumi("txt/plot_styles.txt","CMSPaper"); + log_lumi.Title(TitleType::info) + .YAxis(YAxisType::log) + .Stack(StackType::shapes) + .Overflow(OverflowType::none) + .YTitleOffset(1.75) + .AutoYAxis(false) + .UseCMYK(false) + .LeftMargin(0.17) + .LegendColumns(1) + .CanvasWidth(800) + .CanvasHeight(800) + .FileExtensions({"pdf"}); + + PlotOpt lin_lumi = log_lumi().YAxis(YAxisType::linear); + PlotOpt lin_stack = lin_lumi().Stack(StackType::signal_overlay); + PlotOpt log_stack = log_lumi().Stack(StackType::signal_overlay); + vector ops = {lin_stack}; + + auto proc_Red = Process::MakeShared("HToZ#gamma (UL)", sig, + TColor::GetColor("#ff0000"), {ul_path+"*.root"}, trigs); + + auto proc_Blue = Process::MakeShared("HToZ#gamma (UL)", sig, + TColor::GetColor("#0000ff"), {ul_path+"*.root"}, trigs); + + proc_Red->SetLineWidth(3); + proc_Blue->SetLineWidth(3); + + vector> procs_Red = {proc_Red}; + vector> procs_Blue = {proc_Blue}; + + PlotMaker pm; + string lepName[2] = {"el/", "mu/"}; + for(int i(0); i < 2; i++) { + NamedFunc selection = baseline && lep.at(i) && pho && mass_cuts; + pm.Push(Axis(80, 100, 180, "llphoton_m[0]", "m_{ll#gamma} [GeV]", {}), selection, procs_Red, ops).Weight(wgt).Tag(lepName[i]+"llphoton_m"); + pm.Push(Axis(100, 50, 150, "ll_m[llphoton_ill[0]]", "m_{ll} [GeV]", {}), selection, procs_Red, ops).Weight(wgt).Tag(lepName[i]+"ll_m"); + pm.Push(Axis(80, 100, 180, kinFitH, "m_{ll#gamma} [GeV]", {}), selection, procs_Blue, ops).Weight(wgt).Tag(lepName[i]+"llphoton_m_Refit"); + pm.Push(Axis(100, 50, 150, kinFit, "m_{ll} [GeV]", {}), selection, procs_Blue, ops).Weight(wgt).Tag(lepName[i]+"ll_m_Refit"); + } + pm.min_print_ = true; + pm.multithreaded_ = false; + pm.MakePlots(35.9); +} + diff --git a/src/zgamma/zg_utilities.cpp b/src/zgamma/zg_utilities.cpp index 4e5d767..b6044f9 100644 --- a/src/zgamma/zg_utilities.cpp +++ b/src/zgamma/zg_utilities.cpp @@ -5,6 +5,7 @@ #include "core/utilities.hpp" #include "core/palette.hpp" #include "core/baby.hpp" +#include "zgamma/KinZfitter.h" namespace ZgUtilities { using std::string; @@ -33,7 +34,7 @@ namespace ZgUtilities { else il = b.ll_i2()->at(0); l1.SetPtEtaPhiM(b.el_pt() ->at(il), b.el_eta()->at(il), - b.el_phi()->at(il), 0.00511); + b.el_phi()->at(il), 0.000511); } else if(b.ll_lepid()->at(0) == 13){ if(b.mu_charge()->at(b.ll_i1()->at(0)) < 0) il = b.ll_i1()->at(0); @@ -68,7 +69,7 @@ namespace ZgUtilities { else il = b.ll_i1()->at(0); l2.SetPtEtaPhiM(b.el_pt() ->at(il), b.el_eta()->at(il), - b.el_phi()->at(il), 0.00511); + b.el_phi()->at(il), 0.000511); } else if(b.ll_lepid()->at(0) == 13){ if(b.mu_charge()->at(b.ll_i1()->at(0)) < 0) il = b.ll_i2()->at(0); @@ -81,6 +82,86 @@ namespace ZgUtilities { return l2; } + // Returns negative lepton 4-momentum error + double AssignL1Error(const Baby &b) { + double l1Err = 0.0; + double ecalEnergy = 0.0; + double perr = 0.0; + double err2 = 0.0; + int il(-1); + TLorentzVector l1; + if(b.ll_lepid()->at(0) == 11){ + if(b.el_charge()->at(b.ll_i1()->at(0)) < 0) il = b.ll_i1()->at(0); + else il = b.ll_i2()->at(0); + l1.SetPtEtaPhiM(b.el_pt() ->at(il), + b.el_eta()->at(il), + b.el_phi()->at(il), 0.000511); + if (b.el_ecal()->at(il)) { + ecalEnergy = (b.el_etPt()->at(il) + 1.0) * b.el_pt()->at(il); + if (abs(b.el_eta()->at(il)) < 1.5) { + err2 += (5.24e-02*5.24e-02)/ecalEnergy; + err2 += (2.01e-01*2.01e-01)/(ecalEnergy*ecalEnergy); + err2 += 1.00e-02*1.00e-02; + } else { + err2 += (1.46e-01*1.46e-01)/ecalEnergy; + err2 += (9.21e-01*9.21e-01)/(ecalEnergy*ecalEnergy); + err2 += 1.94e-03*1.94e-03; + } + perr = ecalEnergy * sqrt(err2); + } + else { + perr = b.el_energyErr()->at(il); + } + l1Err = perr * l1.Pt() / l1.P(); + } + else if(b.ll_lepid()->at(0) == 13){ + if(b.mu_charge()->at(b.ll_i1()->at(0)) < 0) il = b.ll_i1()->at(0); + else il = b.ll_i2()->at(0); + l1Err = b.mu_ptErr()->at(il); + } + return l1Err; + } + + // Returns positive lepton 4-momentum error + double AssignL2Error(const Baby &b) { + double l2Err = 0.0; + double ecalEnergy = 0.0; + double perr = 0.0; + double err2 = 0.0; + int il(-1); + TLorentzVector l2; + if(b.ll_lepid()->at(0) == 11){ + if(b.el_charge()->at(b.ll_i1()->at(0)) < 0) il = b.ll_i2()->at(0); + else il = b.ll_i1()->at(0); + l2.SetPtEtaPhiM(b.el_pt() ->at(il), + b.el_eta()->at(il), + b.el_phi()->at(il), 0.000511); + if (b.el_ecal()->at(il)) { + ecalEnergy = (b.el_etPt()->at(il) + 1.0) * b.el_pt()->at(il); + if (abs(b.el_eta()->at(il)) < 1.5) { + err2 += (5.24e-02*5.24e-02)/ecalEnergy; + err2 += (2.01e-01*2.01e-01)/(ecalEnergy*ecalEnergy); + err2 += 1.00e-02*1.00e-02; + } else { + err2 += (1.46e-01*1.46e-01)/ecalEnergy; + err2 += (9.21e-01*9.21e-01)/(ecalEnergy*ecalEnergy); + err2 += 1.94e-03*1.94e-03; + } + perr = ecalEnergy * sqrt(err2); + } + else { + perr = b.el_energyErr()->at(il); + } + l2Err = perr * l2.Pt() / l2.P(); + } + else if(b.ll_lepid()->at(0) == 13){ + if(b.mu_charge()->at(b.ll_i1()->at(0)) < 0) il = b.ll_i2()->at(0); + else il = b.ll_i1()->at(0); + l2Err = b.mu_ptErr()->at(il); + } + return l2Err; + } + // Returns Z 4-momentum TLorentzVector AssignZ(const Baby &b, bool gen) { TLorentzVector ll; @@ -234,6 +315,53 @@ namespace ZgUtilities { else phi = acos(cosphi); return phi; } + + double KinRefit(const Baby &b) { + KinZfitter *kinZfitter; + bool isData = false; + kinZfitter = new KinZfitter(isData); + + std::map selectedLeptons; + selectedLeptons[0] = AssignL1(b); + selectedLeptons[1] = AssignL2(b); + std::map errorLeptons; + errorLeptons[0] = AssignL1Error(b); + errorLeptons[1] = AssignL2Error(b); + std::map selectedFsrMap; + // TLorentzVector nullFourVector(0, 0, 0, 0); + // selectedFsrMap[0] = nullFourVector; + // selectedFsrMap[1] = nullFourVector; + + // Need to updated selectedFsrMap to incorporate FSR contribution + kinZfitter->Setup(selectedLeptons, selectedFsrMap, errorLeptons); + kinZfitter->KinRefitZ1(); + double massZ1REFIT = kinZfitter->GetRefitMZ1(); + return massZ1REFIT; + } + + std::vector RefitP4(const Baby &b) { + KinZfitter *kinZfitter; + bool isData = false; + kinZfitter = new KinZfitter(isData); + + std::map selectedLeptons; + selectedLeptons[0] = AssignL1(b); + selectedLeptons[1] = AssignL2(b); + std::map errorLeptons; + errorLeptons[0] = AssignL1Error(b); + errorLeptons[1] = AssignL2Error(b); + std::map selectedFsrMap; + // TLorentzVector nullFourVector(0, 0, 0, 0); + // selectedFsrMap[0] = nullFourVector; + // selectedFsrMap[1] = nullFourVector; + + // Need to updated selectedFsrMap to incorporate FSR contribution + kinZfitter->Setup(selectedLeptons, selectedFsrMap, errorLeptons); + kinZfitter->KinRefitZ1(); + std::vector reFit = kinZfitter->GetRefitP4s(); + return reFit; + } + } diff --git a/txt/variables/pico b/txt/variables/pico index 0cd9371..302f0fc 100644 --- a/txt/variables/pico +++ b/txt/variables/pico @@ -6,6 +6,7 @@ int type bool stitch bool stitch_ht bool stitch_htmet +bool stitch_photon bool stitch_dy #################### Global ################### @@ -56,12 +57,21 @@ std::vector llphoton_pt std::vector llphoton_eta std::vector llphoton_phi std::vector llphoton_m +std::vector llphoton_l1_masserr +std::vector llphoton_l2_masserr +std::vector llphoton_ph_masserr std::vector llphoton_dr std::vector llphoton_dphi std::vector llphoton_deta std::vector llphoton_costhj +std::vector llphoton_costheta +std::vector llphoton_cosTheta +std::vector llphoton_psi std::vector llphoton_iph std::vector llphoton_ill +std::vector llphoton_dijet_dphi +std::vector llphoton_dijet_balance +std::vector llphoton_pTt2 ################### Jets ################## int njet @@ -86,6 +96,7 @@ std::vector jet_puid_disc std::vector jet_ne_emef std::vector jet_qgl std::vector jet_islep +std::vector jet_isvlep std::vector jet_isphoton std::vector jet_isgood std::vector jet_id @@ -117,6 +128,7 @@ std::vector fjet_msoftdrop std::vector fjet_deep_md_hbb_btv std::vector fjet_mva_hbb_btv std::vector fjet_deep_md_hbb_jme +std::vector fjet_deep_md_tvsqcd std::vector fjet_deep_tvsqcd std::vector fjet_subjet_idx1 std::vector fjet_subjet_idx2 @@ -160,6 +172,7 @@ int nvmu std::vector mu_pt std::vector mu_eta std::vector mu_phi +std::vector mu_ptErr std::vector mu_miniso std::vector mu_reliso std::vector mu_dz @@ -167,15 +180,24 @@ std::vector mu_dxy std::vector mu_ip3d std::vector mu_sip3d std::vector mu_id +std::vector mu_mediumid +std::vector mu_tightid +std::vector mu_highptid std::vector mu_sig std::vector mu_charge std::vector mu_pflavor +std::vector mu_fsrphotonid int nel int nvel std::vector el_pt std::vector el_eta +std::vector el_etasc std::vector el_phi +std::vector el_etPt +std::vector el_eminusp +std::vector el_energyErr +std::vector el_phidx std::vector el_miniso std::vector el_reliso std::vector el_dz @@ -184,10 +206,14 @@ std::vector el_ip3d std::vector el_sip3d std::vector el_idmva std::vector el_id +std::vector el_id80 +std::vector el_id90 +std::vector el_idLoose std::vector el_sig std::vector el_ispf std::vector el_charge std::vector el_pflavor +std::vector el_ecal ################## Di-Leptons ################ int nll @@ -195,12 +221,15 @@ std::vector ll_pt std::vector ll_eta std::vector ll_phi std::vector ll_m +std::vector ll_l1_masserr +std::vector ll_l2_masserr std::vector ll_dr std::vector ll_dphi std::vector ll_deta std::vector ll_lepid std::vector ll_i1 std::vector ll_i2 +std::vector ll_charge ################## Photons ################### int nphoton @@ -217,10 +246,23 @@ std::vector photon_pflavor std::vector photon_id std::vector photon_elveto std::vector photon_sig +std::vector photon_id80 +std::vector photon_sieie +std::vector photon_elidx +std::vector photon_jet_mindr +std::vector photon_zeppenfeld + +################# FsrPhotons ################## +int nfsrphoton +std::vector fsrphoton_droveret2 +std::vector fsrphoton_eta +std::vector fsrphoton_phi +std::vector fsrphoton_pt +std::vector fsrphoton_reliso +std::vector fsrphoton_muonidx ################### Tracks ################## int ntk - std::vector tk_pt std::vector tk_eta std::vector tk_phi @@ -230,7 +272,8 @@ std::vector tk_pdgid std::vector tk_miniso_chg std::vector tk_reliso_chg std::vector tk_mt - +std::vector tk_nano_electron +std::vector tk_nano_muon ################### Quality ################## bool pass_jets @@ -245,9 +288,10 @@ bool pass_mubadtrk bool pass_badchhad bool pass_muon_jet # pass_ra2_badmu is for higgsino_angeles compatibility -bool pass_ra2_badmu +bool pass_ra2_badmu bool pass_low_neutral_jet bool pass_htratio_dphi_tight +bool pass_ecalnoisejet bool pass_badcalib bool pass_boosted bool pass @@ -394,6 +438,9 @@ bool HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL bool HLT_Mu17_TrkIsoVVL_TkMu8_TrkIsoVVL bool HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ bool HLT_Mu17_TrkIsoVVL_TkMu8_TrkIsoVVL_DZ +bool HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8 +bool HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8 +bool HLT_Photon175 ################ Systematic variations - to be implemented as needed ##################