diff --git a/config/Input_2018.yml b/config/Input_2018.yml index d05c8fb..950e07e 100644 --- a/config/Input_2018.yml +++ b/config/Input_2018.yml @@ -1,4 +1,4 @@ -lumi: 59740. +gumi: 59740. TriggerChannels: - Triggers_HZZ4l - Triggers_HZZ2l2q @@ -34,27 +34,58 @@ Triggers_HZZ2l2q: Triggers_HZZ2l2nu: # DoubleMu - event.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8 + - event.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8 + - event.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass3p8 + - event.HLT_Mu19_TrkIsoVVL_Mu9_TrkIsoVVL_DZ_Mass8 # Single Mu - - event.HLT_IsoMu20 + #- event.HLT_IsoMu20 + #- event.HLT_IsoMu24 + #- event.HLT_IsoMu27 - event.HLT_IsoMu24 - event.HLT_IsoMu27 + - event.HLT_IsoMu30 + - event.HLT_Mu50 # Double Electron - event.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL - event.HLT_DoubleEle25_CaloIdL_MW # Single Electron - - event.HLT_Ele32_WPTight_Gsf + #- event.HLT_Ele32_WPTight_Gsf # MuEGamma - - event.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ + #- event.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ + #- event.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ + - event.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ + - event.HLT_Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL - event.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ + - event.HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL + - event.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ + - event.HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL + # EGamma + - event.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_DZ + - event.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL + - event.HLT_DiEle27_WPTightCaloOnly_L1DoubleEG + + #Double electron + - event.HLT_DoubleEle33_CaloIdL_MW + - event.HLT_DoubleEle25_CaloIdL_MW + - event.HLT_DoubleEle27_CaloIdL_MW + - event.HLT_DoublePhoton70 + - event.HLT_Ele115_CaloIdVT_GsfTrkIdT + - event.HLT_Ele27_WPTight_Gsf + - event.HLT_Ele32_WPTight_Gsf + - event.HLT_Ele35_WPTight_Gsf + - event.HLT_Ele38_WPTight_Gsf + - event.HLT_Ele40_WPTight_Gsf + - event.HLT_Ele32_WPTight_Gsf_L1DoubleEG + - event.HLT_Photon200 # SinglePhoton - - event.HLT_Photon50_R9Id90_HE10_IsoM - - event.HLT_Photon75_R9Id90_HE10_IsoM - - event.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ300_PFJetsMJJ400DEta3 - - event.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ400_PFJetsMJJ600DEta3 - - event.HLT_Photon90_R9Id90_HE10_IsoM - - event.HLT_Photon120_R9Id90_HE10_IsoM - - event.HLT_Photon165_R9Id90_HE10_IsoM - - event.HLT_Photon300_NoHE + #- event.HLT_Photon50_R9Id90_HE10_IsoM + #- event.HLT_Photon75_R9Id90_HE10_IsoM + #- event.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ300_PFJetsMJJ400DEta3 + #- event.HLT_Photon75_R9Id90_HE10_IsoM_EBOnly_CaloMJJ400_PFJetsMJJ600DEta3 + #- event.HLT_Photon90_R9Id90_HE10_IsoM + #- event.HLT_Photon120_R9Id90_HE10_IsoM + #- event.HLT_Photon165_R9Id90_HE10_IsoM + #- event.HLT_Photon300_NoHE Triggers_HZZ2l2nu_SingleLep: @@ -108,8 +139,8 @@ Electron: pTcut: 25 #7 Etacut: 2.1 #2.5 #Sip3dcut: 4 - Loosedxycut: 0.045 #0.5 - Loosedzcut: 0.2 #1 + Loosedxycut: 0.045 #0.5 # + Loosedzcut: 0.2 #1 #0.2 ttH: WP: 0.8 BDTWP: @@ -129,8 +160,8 @@ Muon: Etacut: 2.4 #Sip3dcut: 4 - Loosedxycut: 0.045 #0.5 - Loosedzcut: 0.2 #1 + Loosedxycut: 0.045 #0.5 #0.045 + Loosedzcut: 0.2 #1 #0.2 Tightdxycut: 0.045 #0.2 Tightdzcut: 0.2 #0.5 TightTrackerLayercut: 5 @@ -166,7 +197,7 @@ HZZ2l2nu: SubLeading_Lep_pT: 25.0 Lep_eta: 2.5 Pt_ll: 10.0 - M_ll_Window: 15.0 + M_ll_Window: 0.0 dPhi_jetMET: 0.0 MZLepcut: down: 60.0 diff --git a/include/H4LTools.h b/include/H4LTools.h index c631938..5deba26 100644 --- a/include/H4LTools.h +++ b/include/H4LTools.h @@ -22,6 +22,7 @@ class H4LTools float HZZ2l2q_Leading_Lep_pT, HZZ2l2q_SubLeading_Lep_pT, HZZ2l2q_Lep_eta, HZZ2l2q_MZLepcutdown, HZZ2l2q_MZLepcutup; float HZZ2l2nu_Leading_Lep_pT, HZZ2l2nu_SubLeading_Lep_pT, HZZ2l2nu_Lep_eta, HZZ2l2nu_Pt_ll, HZZ2l2nu_M_ll_Window, HZZ2l2nu_dPhi_jetMET, HZZ2l2nu_MZLepcutdown, HZZ2l2nu_MZLepcutup; bool DEBUG; + H4LTools(bool isMC_); void InitializeElecut(float elePtcut_, float eleEtacut_, float eleLoosedxycut_, float eleLoosedzcut_, float eleIsocut_, float eleBDTWPLELP_, float eleBDTWPMELP_, float eleBDTWPHELP_, float eleBDTWPLEHP_, float eleBDTWPMEHP_, float eleBDTWPHEHP_) { @@ -101,7 +102,8 @@ class H4LTools btag_deepJet_Tight = btag_deepJet_Tight_; } - void SetElectrons(float Electron_pt_, float Electron_eta_, float Electron_phi_, float Electron_mass_, float Electron_dxy_, float Electron_dz_, + //for v9 + /*void SetElectrons(float Electron_pt_, float Electron_eta_, float Electron_phi_, float Electron_mass_, float Electron_dxy_, float Electron_dz_, float Electron_mvaFall17V2Iso_WP90_, int Electron_pdgId_, float Electron_pfRelIso03_all_) { Electron_pt.push_back(Electron_pt_); @@ -111,13 +113,30 @@ class H4LTools Electron_dxy.push_back(Electron_dxy_); Electron_dz.push_back(Electron_dz_); //Electron_sip3d.push_back(Electron_sip3d_); - //Electron_mvaFall17V2Iso.push_back(Electron_mvaFall17V2Iso_); + //Electron_mvaFall17V2Iso.push_back(Electron_mvaFall17V2Iso_); // no need Electron_mvaFall17V2Iso_WP90.push_back(Electron_mvaFall17V2Iso_WP90_); Electron_pdgId.push_back(Electron_pdgId_); Electron_pfRelIso03_all.push_back(Electron_pfRelIso03_all_); + }*/ + + //for v15 + void SetElectrons(float Electron_pt_, float Electron_eta_, float Electron_phi_, float Electron_mass_, float Electron_dxy_, float Electron_dz_, + float Electron_mvaIso_WP90_, int Electron_pdgId_, float Electron_pfRelIso03_all_) + { + Electron_pt.push_back(Electron_pt_); + Electron_phi.push_back(Electron_phi_); + Electron_eta.push_back(Electron_eta_); + Electron_mass.push_back(Electron_mass_); + Electron_dxy.push_back(Electron_dxy_); + Electron_dz.push_back(Electron_dz_); + //Electron_sip3d.push_back(Electron_sip3d_); + Electron_mvaIso_WP90.push_back(Electron_mvaIso_WP90_); + Electron_pdgId.push_back(Electron_pdgId_); + Electron_pfRelIso03_all.push_back(Electron_pfRelIso03_all_); } - void SetJets(float Jet_pt_, float Jet_eta_, float Jet_phi_, float Jet_mass_, int Jet_jetId_, float Jet_btagDeepFlavB_, + // for v9 + /*void SetJets(float Jet_pt_, float Jet_eta_, float Jet_phi_, float Jet_mass_, int Jet_jetId_, float Jet_btagDeepFlavB_, int Jet_puId_) { Jet_pt.push_back(Jet_pt_); @@ -127,26 +146,61 @@ class H4LTools Jet_btagDeepFlavB.push_back(Jet_btagDeepFlavB_); Jet_jetId.push_back(Jet_jetId_); Jet_puId.push_back(Jet_puId_); // 1 or 0? + }*/ + + //for v15 + void SetJets(float Jet_pt_, float Jet_eta_, float Jet_phi_, float Jet_mass_, float Jet_btagDeepFlavB_, + float Jet_chEmEF_, float Jet_chHEF_, float Jet_neEmEF_, float Jet_neHEF_, float Jet_muEF_, int Jet_nConstituents_, int Jet_neMultiplicity_, int Jet_chMultiplicity_) + { + Jet_pt.push_back(Jet_pt_); + Jet_phi.push_back(Jet_phi_); + Jet_eta.push_back(Jet_eta_); + Jet_mass.push_back(Jet_mass_); + Jet_btagDeepFlavB.push_back(Jet_btagDeepFlavB_); + Jet_chEmEF.push_back(Jet_chEmEF_); + Jet_chHEF.push_back(Jet_chHEF_); + Jet_neEmEF.push_back(Jet_neEmEF_); + Jet_neHEF.push_back(Jet_neHEF_); + Jet_muEF.push_back(Jet_muEF_); + Jet_nConstituents.push_back(Jet_nConstituents_); + Jet_neMultiplicity.push_back(Jet_neMultiplicity_); + Jet_chMultiplicity.push_back(Jet_chMultiplicity_); } void SetFatJets(float Jet_pt_, float Jet_eta_, float Jet_phi_, float Jet_mass_, int Jet_jetId_, float Jet_btagDeepB_, float Jet_PNZvsQCD_) + //void SetFatJets(float Jet_pt_, float Jet_eta_, float Jet_phi_, float Jet_mass_) + { FatJet_pt.push_back(Jet_pt_); FatJet_eta.push_back(Jet_eta_); FatJet_phi.push_back(Jet_phi_); FatJet_SDmass.push_back(Jet_mass_); - FatJet_jetId.push_back(Jet_jetId_); - FatJet_btagDeepB.push_back(Jet_btagDeepB_); - FatJet_PNZvsQCD.push_back(Jet_PNZvsQCD_); // 1 or 0? + FatJet_jetId.push_back(Jet_jetId_); //commented out for v15 + //FatJet_btagDeepB.push_back(Jet_btagDeepB_); + FatJet_PNZvsQCD.push_back(Jet_PNZvsQCD_); // 1 or 0? //commented out for v15 } + void SetGenJets(float GenJet_pt_, float GenJet_eta_, float GenJet_phi_, float GenJet_mass_) + { + GenJet_pt.push_back(GenJet_pt_); + GenJet_eta.push_back(GenJet_eta_); + GenJet_phi.push_back(GenJet_phi_); + GenJet_mass.push_back(GenJet_mass_); + } + void SetMET(float MET_pt_, float MET_phi_, float MET_sumEt_) { MET_pt = MET_pt_; MET_phi = MET_phi_; MET_sumEt = MET_sumEt_; - // std::cout<<"Inside header file: MET_sumEt = " << MET_sumEt_ << "\t" << MET_sumEt << std::endl; + } + + void SetPuppiMET(float MET_pt_, float MET_phi_, float MET_sumEt_) + { + PuppiMET_pt = MET_pt_; + PuppiMET_phi = MET_phi_; + PuppiMET_sumEt = MET_sumEt_; } void SetMuons(float Muon_pt_, float Muon_eta_, float Muon_phi_, float Muon_mass_, bool Muon_isGlobal_, bool Muon_isTracker_, @@ -222,6 +276,9 @@ class H4LTools std::vector MuonFsrPhi(); std::vector SelectedJets(std::vector ele, std::vector mu); std::vector SelectedFatJets(std::vector ele, std::vector mu); + bool PassJetIDv15(unsigned int i, bool isPUPPI); + //std::vector SelectedJets(std::vector ele, std::vector mu, std::vector& genuineJets, std::vector& puJets); + std::vector Zlist; std::vector Zlistnofsr; @@ -264,6 +321,7 @@ class H4LTools bool flag4e; bool flag4mu; bool flag2e2mu; + bool muonpt; bool isBoosted2l2q; bool flag2e; @@ -338,6 +396,7 @@ class H4LTools Electron_dz.clear(); Electron_sip3d.clear(); Electron_mvaFall17V2Iso_WP90.clear(); + Electron_mvaIso_WP90.clear(); Electron_pdgId.clear(); Electron_pfRelIso03_all.clear(); Elechg.clear(); @@ -382,21 +441,39 @@ class H4LTools Jet_btagDeepFlavB.clear(); Jet_jetId.clear(); Jet_puId.clear(); + Jet_chEmEF.clear(); + Jet_chHEF.clear(); + Jet_neEmEF.clear(); + Jet_neHEF.clear(); + Jet_muEF.clear(); + Jet_nConstituents.clear(); + Jet_neMultiplicity.clear(); + Jet_chMultiplicity.clear(); FatJet_pt.clear(); FatJet_phi.clear(); FatJet_eta.clear(); FatJet_SDmass.clear(); - FatJet_btagDeepB.clear(); + //FatJet_btagDeepB.clear(); FatJet_PNZvsQCD.clear(); FatJet_jetId.clear(); + GenJet_pt.clear(); + GenJet_eta.clear(); + GenJet_phi.clear(); + GenJet_mass.clear(); jetidx.clear(); FatJetidx.clear(); + // MET related variables MET_pt = -999.0; MET_phi = -999.0; ////new MET_sumEt = -999.0; + // Puppi MET related variables + PuppiMET_pt = -999.0; + PuppiMET_phi = -999.0; + PuppiMET_sumEt = -999.0; + // FsrPhoton related variables nFsrPhoton = 0; FsrPhoton_dROverEt2.clear(); @@ -408,6 +485,7 @@ class H4LTools // Generator related variables nGenPart = 0; GenPart_pt.clear(); + // Reconstructed variables Zlist.clear(); @@ -467,6 +545,7 @@ class H4LTools etaL2_emu = -999.0; phiL2_emu = -999.0; massL2_emu = -999.0; + DeltaRl1l2 = -999.0; pTj1 = -999.0; etaj1 = -999.0; @@ -502,6 +581,7 @@ class H4LTools flag2l = false; HZZ2l2qNu_isELE = false; HZZ2l2qNu_cutOppositeChargeFlag = false; + muonpt = false; HZZ2l2nu_flag2e_met = false; HZZ2l2nu_flag2l_met = false; @@ -569,10 +649,11 @@ class H4LTools int cutMETlt150; int HZZ2l2nu_cutMETgT100; int HZZ2l2nu_cut2l_met_m40_180, HZZ2l2nu_cut2e_met_m40_180, HZZ2l2nu_cut2mu_met_m40_180; - int cut2e, cut2mu, cut2l, cut2l1J, cut2l2j, cut2l1Jor2j; + int cut2e, cut2mu, cut2l, cut2l1J, cut2l2j, cut2l1Jor2j, cut_mu_pt, cut_mu_eta, cut_mu_mediumid, cut_mu_isglobal_istracker, cut_mu_iso; + int cut_2mu_cutOppositeCharge; int HZZ2l2nu_cut2e_met, HZZ2l2nu_cut2mu_met, HZZ2l2qNu_cut2l; int cut4e, cut4mu, cut2e2mu, cutZZ4e, cutZZ4mu, cutZZ2e2mu, cutm4l4e, cutm4l4mu, cutm4l2e2mu, cutghost2e2mu, cutQCD2e2mu, cutLepPt2e2mu, cutghost4e, cutQCD4e, cutLepPt4e, cutghost4mu, cutQCD4mu, cutLepPt4mu; - float pTL1, etaL1, phiL1, massL1, pTL2, etaL2, phiL2, massL2, pTL3, etaL3, phiL3, massL3, pTL4, etaL4, phiL4, massL4; + float pTL1, etaL1, phiL1, massL1, pTL2, etaL2, phiL2, massL2, pTL3, etaL3, phiL3, massL3, pTL4, etaL4, phiL4, massL4, DeltaRl1l2; float pTL1_emu, etaL1_emu, phiL1_emu, massL1_emu, pTL2_emu, etaL2_emu, phiL2_emu, massL2_emu; float pTj1, etaj1, phij1, mj1, pTj2, etaj2, phij2, mj2; int HZZ2l2qNu_cutOppositeCharge; @@ -592,18 +673,26 @@ class H4LTools int HZZ_emuCR_cutdPhiJetMET; int HZZ_emuCR_cutMETgT100; + private: std::vector Electron_pt, Electron_phi, Electron_eta, Electron_mass, Electron_dxy, Electron_dz, Electron_sip3d; - std::vector Electron_mvaFall17V2Iso_WP90, Electron_pfRelIso03_all; + std::vector Electron_mvaFall17V2Iso_WP90, Electron_pfRelIso03_all, Electron_mvaIso_WP90; std::vector Electron_pdgId; + bool isMC; std::vector Jet_pt, Jet_phi, Jet_eta, Jet_mass, Jet_btagDeepFlavB; std::vector Jet_jetId, Jet_puId; + std::vector Jet_chEmEF, Jet_chHEF, Jet_neEmEF, Jet_neHEF, Jet_muEF; + std::vector Jet_nConstituents, Jet_neMultiplicity, Jet_chMultiplicity; float MET_pt, MET_phi; float MET_sumEt, MT_2l2nu; + float PuppiMET_pt, PuppiMET_phi; + float PuppiMET_sumEt; - std::vector FatJet_pt, FatJet_phi, FatJet_eta, FatJet_SDmass, FatJet_btagDeepB, FatJet_PNZvsQCD; + std::vector FatJet_pt, FatJet_phi, FatJet_eta, FatJet_SDmass, FatJet_PNZvsQCD; + //std::vector FatJet_btagDeepB; std::vector FatJet_jetId; + std::vector GenJet_pt, GenJet_eta, GenJet_phi, GenJet_mass; std::vector Muon_pt, Muon_phi, Muon_eta, Muon_mass, Muon_dxy, Muon_dz, Muon_sip3d, Muon_ptErr, Muon_pfRelIso03_all; std::vector Muon_nTrackerLayers, Muon_genPartIdx, Muon_pdgId, Muon_charge; @@ -676,6 +765,12 @@ H4LTools::H4LTools(int year, bool DEBUG_Main) cut2e_m40_180 = 0; cut2mu_m40_180 = 0; cut2l_m40_180 = 0; + cut_mu_pt = 0; + cut_mu_eta = 0; + cut_mu_mediumid = 0; + cut_mu_isglobal_istracker = 0; + cut_mu_iso = 0; + cut_2mu_cutOppositeCharge = 0; HZZ2l2nu_cut2e_met = 0; HZZ2l2nu_cut2mu_met = 0; @@ -692,5 +787,6 @@ H4LTools::H4LTools(int year, bool DEBUG_Main) HZZ_emuCR_cutbtag = 0; HZZ_emuCR_cutdPhiJetMET = 0; HZZ_emuCR_cutMETgT100 = 0; + } #endif diff --git a/modules/H4LCppModule.py b/modules/H4LCppModule.py index 5c784e0..d91d030 100644 --- a/modules/H4LCppModule.py +++ b/modules/H4LCppModule.py @@ -1,5 +1,6 @@ from PhysicsTools.NanoAODTools.postprocessing.framework.eventloop import Module from PhysicsTools.NanoAODTools.postprocessing.framework.datamodel import Collection,Object +from PhysicsTools.NanoAODTools.postprocessing.modules.common.met_phi_correction import METPhiCorrector, Campaign import ROOT import yaml import json @@ -14,6 +15,7 @@ class HZZAnalysisCppProducer(Module): + #def __init__(self, year, cfgFile, isMC, isFSR, cutFlowJSONFile, channels, DEBUG=False, corrector=None): def __init__(self, year, cfgFile, isMC, isFSR, cutFlowJSONFile, channels, DEBUG=False): self.loadLibraries() self.year = year @@ -26,6 +28,7 @@ def __init__(self, year, cfgFile, isMC, isFSR, cutFlowJSONFile, channels, DEBUG= self.worker = ROOT.H4LTools(self.year, self.DEBUG) self._initialize_worker(self.cfg) self.worker.isFSR = isFSR + #self.corrector = corrector self._initialize_counters() # Alternatively, for dynamic worker attributes @@ -36,7 +39,7 @@ def __init__(self, year, cfgFile, isMC, isFSR, cutFlowJSONFile, channels, DEBUG= self.dynamicCuts_2l2q = ["HZZ2l2qNu_cut2l", "HZZ2l2qNu_cutOppositeCharge", "HZZ2l2qNu_cutpTl1l2", "HZZ2l2qNu_cutETAl1l2", "HZZ2l2qNu_cutmZ1Window", "HZZ2l2qNu_cutZ1Pt", "cut2l1J", "cut2l2j", "cut2l1Jor2j"] - self.dynamicCuts_2l2nu = ["HZZ2l2qNu_cut2l", "HZZ2l2qNu_cutOppositeCharge", "HZZ2l2qNu_cutpTl1l2", + self.dynamicCuts_2l2nu = ["cut_mu_pt", "cut_mu_eta", "cut_mu_mediumid", "cut_mu_isglobal_istracker", "cut_mu_iso", "HZZ2l2qNu_cut2l", "cut_2mu_cutOppositeCharge", "HZZ2l2qNu_cutOppositeCharge", "HZZ2l2qNu_cutpTl1l2", "HZZ2l2qNu_cutETAl1l2", "HZZ2l2qNu_cutmZ1Window", "HZZ2l2qNu_cutZ1Pt", "HZZ2l2nu_cutbtag", "HZZ2l2nu_cutdPhiJetMET", "HZZ2l2nu_cutMETgT100"] self.dynamicCuts_2l2nu_emu_CR = ["HZZemuCR_cut2l", "HZZemuCR_cutpTl1l2", @@ -198,7 +201,7 @@ def beginFile(self, inputFile, outputFile, inputTree, wrappedOutputTree): self.out.branch("pTL4", "F") self.out.branch("etaL4", "F") self.out.branch("phiL4", "F") - + self.out.branch("DeltaRl1l2", "F") # Branches for 4l channel: ZZ kinematics self.out.branch("mass4l", "F") self.out.branch("pT4l", "F") @@ -235,6 +238,9 @@ def beginFile(self, inputFile, outputFile, inputTree, wrappedOutputTree): self.out.branch("etaZ2", "F") self.out.branch("phiZ2", "F") + self.out.branch("pT_MET", "F") + self.out.branch("phi_MET", "F") + # Branches for 2l2q channel self.out.branch("massZ2_2j", "F") self.out.branch("phiZ2_2j", "F") @@ -364,6 +370,14 @@ def initReaders(self, tree): def analyze(self, event): """process event, return True (go to next module) or False (fail, go to next event)""" + #if event.run != 317292 or event.luminosityBlock != 94 or event.event != 143096484: + #if event.Electron_pt.GetSize() > 0: + #return False + #if event.nElectron != 1 or event.nMuon != 1: + #return False + #print("Event electron_pt =", event.Electron_pt) + #print("Event Muon_pt =", event.Muon_pt) + #print("Event MET_pt =", event.MET_pt) if self.DEBUG: print("====== Inside analyze function ==========") # do this check at every event, as other modules might have read @@ -392,7 +406,6 @@ def analyze(self, event): nZXCRFailedLeptons=0 self.passAllEvts += 1 self.CutFlowTable.Fill(0) - massZ2_2j = -999. phiZ2_2j = -999. etaZ2_2j = -999. @@ -473,6 +486,7 @@ def analyze(self, event): eta4l = -999. phi4l = -999. mass4l = -999. + DeltaRl1l2 = -999. #Pz_neutrino = -999. TriggerMap = {} @@ -487,6 +501,7 @@ def analyze(self, event): break if not passedTrig: return keepIt + self.passtrigEvts += 1 self.CutFlowTable.Fill(1) @@ -495,6 +510,7 @@ def analyze(self, event): self.CutFlowTable.Fill(2) else: return keepIt + electrons = Collection(event, "Electron") muons = Collection(event, "Muon") fsrPhotons = Collection(event, "FsrPhoton") @@ -502,6 +518,32 @@ def analyze(self, event): jets = Collection(event, "Jet") FatJets = Collection(event, "FatJet") met = Object(event, "MET", None) + puppimet = Object(event, "PuppiMET", None) + if self.year == 2018: + corrector = METPhiCorrector( + campaign=Campaign.UL_2018, + is_data=False, + is_puppi=False, + ) + if self.year == 2017: + corrector = METPhiCorrector( + campaign=Campaign.UL_2017, + is_data=False, + is_puppi=False, + ) + if self.year == 2016: + corrector = METPhiCorrector( + campaign=Campaign.UL_2016, + is_data=False, + is_puppi=False, + ) + #MET correction for v9 + #corr_pt, corr_phi = corrector( + #met.pt, + #met.phi, + #npv=event.PV_npvs, + #run=event.run + #) # for photon in Photons: # # Keep photons if pT > 55, |eta| < 2.5 and skip the transition region of barrel and endcap @@ -510,14 +552,18 @@ def analyze(self, event): if isMC: genparts = Collection(event, "GenPart") + GenJets = Collection(event, "GenJet") for xg in genparts: self.worker.SetGenParts(xg.pt) for xm in muons: self.worker.SetMuonsGen(xm.genPartIdx) + for xg in GenJets: + self.worker.SetGenJets(xg.pt, xg.eta, xg.phi, xg.mass) for xe in electrons: - self.worker.SetElectrons(xe.pt, xe.eta, xe.phi, xe.mass, xe.dxy, - xe.dz, xe.mvaFall17V2Iso_WP90, xe.pdgId, xe.pfRelIso03_all) + #self.worker.SetElectrons(xe.pt, xe.eta, xe.phi, xe.mass, xe.dxy, + #xe.dz, xe.mvaFall17V2Iso_WP90, xe.pdgId, xe.pfRelIso03_all) #for v9 + self.worker.SetElectrons(xe.pt, xe.eta, xe.phi, xe.mass, xe.dxy, xe.dz, xe.pdgId, xe.mvaIso_WP90, xe.pfRelIso03_all) # for v15 if self.DEBUG: print("Electrons: pT, eta: {}, {}".format(xe.pt, xe.eta)) @@ -530,14 +576,24 @@ def analyze(self, event): for xf in fsrPhotons: self.worker.SetFsrPhotons(xf.dROverEt2,xf.eta,xf.phi,xf.pt,xf.relIso03) - + + # for v9 + #for xj in jets: + #self.worker.SetJets(xj.pt,xj.eta,xj.phi,xj.mass,xj.jetId, xj.btagDeepFlavB, xj.puId) + # for v15 for xj in jets: - self.worker.SetJets(xj.pt,xj.eta,xj.phi,xj.mass,xj.jetId, xj.btagDeepFlavB, xj.puId) + self.worker.SetJets(xj.pt,xj.eta,xj.phi,xj.mass,xj.btagDeepFlavB, xj.chEmEF, xj.neEmEF, xj.chHEF, xj.neHEF, xj.muEF, xj.nConstituents, xj.chMultiplicity, xj.neMultiplicity) - for xj in FatJets: - self.worker.SetFatJets(xj.pt, xj.eta, xj.phi, xj.msoftdrop, xj.jetId, xj.btagDeepB, xj.particleNet_ZvsQCD) + #for xj in FatJets: + #self.worker.SetFatJets(xj.pt, xj.eta, xj.phi, xj.msoftdrop, xj.jetId, xj.btagDeepB, xj.particleNet_ZvsQCD) + #self.worker.SetFatJets(xj.pt, xj.eta, xj.phi, xj.msoftdrop) - self.worker.SetMET(met.pt,met.phi,met.sumEt) + #self.worker.SetMET(corr_pt, corr_phi, met.sumEt) #for v9 + self.worker.SetPuppiMET(puppimet.pt, puppimet.phi, puppimet.sumEt) # for v15 + if self.DEBUG: + print("***** MET: corr_pt, corr_phi, sumEt: {}, {}, {}".format(corr_pt, corr_phi, met.sumEt)) + print("***** MET not corrected: pt, phi, sumEt: {}, {}, {}".format(met.pt, met.phi, met.sumEt)) + print("***** Event branch MET_pt =", event.MET_pt) self.worker.LeptonSelection() foundZZCandidate_4l = False # for 4l @@ -594,9 +650,10 @@ def analyze(self, event): etaL2 = self.worker.etaL2 phiL2 = self.worker.phiL2 massL2 = self.worker.massL2 + DeltaRl1l2 = self.worker.DeltaRl1l2 if pTL2>pTL1: - pTL1, pTl2 = pTL2, pTL1 + pTL1, pTL2 = pTL2, pTL1 etaL1, etaL2 = etaL2, etaL1 phiL1, phiL2 = phiL2, phiL1 massL1,massL2 = massL2, massL1 @@ -615,6 +672,15 @@ def analyze(self, event): phiZ2 = self.worker.Z2.Phi() massZ2 = self.worker.Z2.M() + pTj1 = self.worker.pTj1 + etaj1 = self.worker.etaj1 + phij1 = self.worker.phij1 + mj1 = self.worker.mj1 + pTj2 = self.worker.pTj2 + etaj2 = self.worker.etaj2 + phij2 = self.worker.phij2 + mj2 = self.worker.mj2 + if (foundZZCandidate_2l2q): keepIt = True passZZ2l2qSelection = True @@ -653,6 +719,7 @@ def analyze(self, event): HZZ2l2nu_ZZmT = self.worker.ZZ_metsystem.Mt() HZZ2l2nu_ZZpT = self.worker.ZZ_metsystem.Pt() + #Pz_neutrino = self.worker.Pz_neutrino @@ -715,14 +782,7 @@ def analyze(self, event): etaL4 = self.worker.etaL4 phiL4 = self.worker.phiL4 massL4 = self.worker.massL4 - pTj1 = self.worker.pTj1 - etaj1 = self.worker.etaj1 - phij1 = self.worker.phij1 - mj1 = self.worker.mj1 - pTj2 = self.worker.pTj2 - etaj2 = self.worker.etaj2 - phij2 = self.worker.phij2 - mj2 = self.worker.mj2 + if pTL4>pTL3: pTL3, pTL4 = pTL4, pTL3 @@ -791,6 +851,7 @@ def analyze(self, event): self.out.fillBranch("pTL2",pTL2) self.out.fillBranch("etaL2",etaL2) self.out.fillBranch("phiL2",phiL2) + self.out.fillBranch("DeltaRl1l2",DeltaRl1l2) self.out.fillBranch("pTZ1",pTZ1) self.out.fillBranch("etaZ1",etaZ1) @@ -800,6 +861,8 @@ def analyze(self, event): self.out.fillBranch("etaZ2",etaZ2) self.out.fillBranch("phiZ2",phiZ2) self.out.fillBranch("massZ2",massZ2) + #self.out.fillBranch("pT_MET",corr_pt) #for v9 + #self.out.fillBranch("phi_MET",corr_phi) #for v9 self.out.fillBranch("mass4l",mass4l) self.out.fillBranch("pT4l",pT4l) diff --git a/modules/keep_and_drop_list.py b/modules/keep_and_drop_list.py index 37d911e..d4c4e8e 100644 --- a/modules/keep_and_drop_list.py +++ b/modules/keep_and_drop_list.py @@ -127,5 +127,8 @@ "keep Triggers_HZZ*", "keep *Weight", "keep *Weight*", - "keep Pz_neutrino" + "keep DeltaRl1l2", + "keep Pz_neutrino", + "keep pT_MET", + "keep phi_MET" ] diff --git a/post_proc.py b/post_proc.py index 76862ec..8e016fc 100644 --- a/post_proc.py +++ b/post_proc.py @@ -7,6 +7,18 @@ from PhysicsTools.NanoAODTools.postprocessing.framework.postprocessor import PostProcessor from PhysicsTools.NanoAODTools.postprocessing.modules.common.muonScaleResProducer import * +#from PhysicsTools.NanoAODTools.postprocessing.modules.common.muonScaleResProducer import * +from PhysicsTools.NanoAODTools.postprocessing.modules.common.met_phi_correction import METPhiCorrector, Campaign +from PhysicsTools.NanoAODTools.postprocessing.modules.common.muonScaleResProducer import ( + muonScaleRes2016pre, + muonScaleRes2016, + muonScaleRes2017, + muonScaleRes2018, + muonScaleRes2022, + muonScaleRes2022EE, + muonScaleRes2023, + muonScaleRes2023BPix +) from PhysicsTools.NanoAODTools.postprocessing.modules.jme.jetmetHelperRun2 import createJMECorrector from PhysicsTools.NanoAODTools.postprocessing.modules.btv.btagSFProducer import btagSFProducer from PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer import * @@ -24,7 +36,7 @@ def parse_arguments(): parser.add_argument('-o', '--outputFile', default="skimmed_nano.root", type=str, help="Output file name") parser.add_argument('-outDir', '--outputDir', default=".", type=str, help="Output directory") parser.add_argument('-c', '--cutFlowFile', default="cutFlow.json", type=str, help="Cut flow file name") - parser.add_argument("-n", "--entriesToRun", default=100, type=int, help="Set to 0 if need to run over all entries else put number of entries to run") + parser.add_argument("-n", "--entriesToRun", default=0, type=int, help="Set to 0 if need to run over all entries else put number of entries to run") parser.add_argument("-d", "--DownloadFileToLocalThenRun", default=True, type=bool, help="Download file to local then run") parser.add_argument("--WithSyst", default=False, action="store_true", help="Do not run systematics") parser.add_argument("--DEBUG", default=False, action="store_true", help="Print debug information") @@ -51,7 +63,7 @@ def main(): testfilelist = [] modulesToRun = [] isMC = True - isFSR = True + isFSR = True # set false for now isFiducialAna = True year = None cfgFile = None @@ -97,19 +109,47 @@ def main(): jsonFileName = "data/golden_json/Cert_314472-325175_13TeV_Legacy2018_Collisions18_JSON.txt" sfFileName = "DeepCSV_102XSF_V2.csv" modulesToRun.extend([muonScaleRes2018()]) + #corrector = METPhiCorrector( + #campaign=Campaign.UL_2018, + #is_data=True, + #is_puppi=False, + #) + #corr_pt, corr_phi = corrector( + #uncorr_pt=35.0, + #uncorr_phi=-0.5, + #npv=15, + #) + #corr_pt, corr_phi = corrector(35.0, -0.5, 15, run=1) + #metCorrector=corrector if "UL17" in first_file or "UL2017" in first_file: year = 2017 cfgFile = "config/Input_2017.yml" jsonFileName="data/golden_json/Cert_294927-306462_13TeV_UL2017_Collisions17_GoldenJSON.txt" sfFileName = "DeepCSV_102XSF_V2.csv" modulesToRun.extend([muonScaleRes2017()]) - if "UL16" in first_file or "UL2016" in first_file: + if "20UL16NanoAODAPVv9" in first_file: + year = 2016 + cfgFile = "config/Input_2016.yml" + jsonFileName = "data/golden_json/Cert_271036-284044_13TeV_Legacy2016_Collisions16_JSON.txt" + sfFileName = "DeepCSV_102XSF_V2.csv" + modulesToRun.extend([muonScaleRes2016pre()]) + if "20UL16NanoAODv9" in first_file: year = 2016 cfgFile = "config/Input_2016.yml" jsonFileName = "data/golden_json/Cert_271036-284044_13TeV_Legacy2016_Collisions16_JSON.txt" sfFileName = "DeepCSV_102XSF_V2.csv" modulesToRun.extend([muonScaleRes2016()]) + if "UL2018_NanoAODv15" in first_file: + year = 2018 + cfgFile = "config/Input_2018.yml" + + + if cfgFile is None: + year = 2018 + cfgFile = "config/Input_2018.yml" + modulesToRun.extend([muonScaleRes2018()]) + H4LCppModule = lambda: HZZAnalysisCppProducer(year=year, cfgFile=cfgFile, isMC=isMC, isFSR=isFSR, cutFlowJSONFile=args.cutFlowFile, @@ -125,13 +165,15 @@ def main(): if isMC: GenVarModule = lambda : GenVarsProducer() # FIXME: Gen variable producer module is not working modulesToRun.extend([H4LCppModule(), GenVarModule()]) + #modulesToRun.extend([H4LCppModule()]) if (args.WithSyst): jetmetCorrector = createJMECorrector(isMC=isMC, dataYear=year, jesUncert="All", jetType = "AK4PFchs") - fatJetCorrector = createJMECorrector(isMC=isMC, dataYear=year, jesUncert="All", jetType = "AK8PFPuppi") + #fatJetCorrector = createJMECorrector(isMC=isMC, dataYear=year, jesUncert="All", jetType = "AK8PFPuppi") # btagSF = lambda: btagSFProducer("UL"+str(year), algo="deepjet",selectedWPs=['L','M','T','shape_corr'], sfFileName=sfFileName) # btagSF = lambda: btagSFProducer(era = "UL"+str(year), algo = "deepcsv") - puidSF = lambda: JetSFMaker("%s" % year) - modulesToRun.extend([jetmetCorrector(), fatJetCorrector(), puidSF()]) + #puidSF = lambda: JetSFMaker("%s" % year) + #modulesToRun.extend([jetmetCorrector(), fatJetCorrector(), puidSF()]) + modulesToRun.extend([jetmetCorrector()]) # modulesToRun.extend([jetmetCorrector(), fatJetCorrector(), btagSF(), puidSF()]) # FIXME: No PU weight for 2022 @@ -153,8 +195,9 @@ def main(): modulesToRun.extend([H4LCppModule()]) if (args.WithSyst): jetmetCorrector = createJMECorrector(isMC=isMC, dataYear=year, jesUncert="All", jetType = "AK4PFchs") - fatJetCorrector = createJMECorrector(isMC=isMC, dataYear=year, jesUncert="All", jetType = "AK8PFPuppi") - modulesToRun.extend([jetmetCorrector(), fatJetCorrector()]) + #fatJetCorrector = createJMECorrector(isMC=isMC, dataYear=year, jesUncert="All", jetType = "AK8PFPuppi") + #modulesToRun.extend([jetmetCorrector(), fatJetCorrector()]) + modulesToRun.extend([jetmetCorrector()]) temp_keep_drop_file = create_temp_keep_drop_file(keep_drop_rules_Data_MC) print("DEBUG: Keep and drop file: {}".format(temp_keep_drop_file)) diff --git a/scripts/analysis/mergeNanoAODRootFiles.py b/scripts/analysis/mergeNanoAODRootFiles.py index 1ffdc85..3ce46a7 100644 --- a/scripts/analysis/mergeNanoAODRootFiles.py +++ b/scripts/analysis/mergeNanoAODRootFiles.py @@ -83,10 +83,10 @@ def merge_files(targetFile, filesToMerge): logging.info("Removing temp hadd file {tempTargetFile}".format(tempTargetFile=tempTargetFile)) system_with_terminal_display('rm {tempTargetFile}'.format(tempTargetFile=tempTargetFile)) - system_with_terminal_display('haddnano.py {0} {1}'.format(tempTargetFile, ' '.join(batch))) + system_with_terminal_display('/afs/cern.ch/user/a/avijay/HZZ2l2nu/CMSSW_14_0_2/src/PhysicsTools/NanoAODTools/scripts/haddnano.py {0} {1}'.format(tempTargetFile, ' '.join(batch))) # Final merge - system_with_terminal_display('haddnano.py {0} {1}'.format(targetFile, " ".join(tempTargets))) + system_with_terminal_display('/afs/cern.ch/user/a/avijay/HZZ2l2nu/CMSSW_14_0_2/src/PhysicsTools/NanoAODTools/scripts/haddnano.py {0} {1}'.format(targetFile, " ".join(tempTargets))) # Cleanup for tempTarget in tempTargets: logging.debug("Removing temp hadd file {tempTarget}".format(tempTarget=tempTarget)) @@ -94,7 +94,7 @@ def merge_files(targetFile, filesToMerge): else: logging.info("Files are < 100; merging directly.") logging.info("haddnano.py {0} {1}".format(targetFile, " ".join(filesToMerge))) - system_with_terminal_display('haddnano.py {0} {1}'.format(targetFile, " ".join(filesToMerge))) + system_with_terminal_display('/afs/cern.ch/user/a/avijay/HZZ2l2nu/CMSSW_14_0_2/src/PhysicsTools/NanoAODTools/scripts/haddnano.py {0} {1}'.format(targetFile, " ".join(filesToMerge))) def main(): parser = argparse.ArgumentParser(description="Merge ROOT files using haddnano.py.") diff --git a/scripts/condor/condor_setup_lxplus.py b/scripts/condor/condor_setup_lxplus.py index 8f354a3..92002b6 100644 --- a/scripts/condor/condor_setup_lxplus.py +++ b/scripts/condor/condor_setup_lxplus.py @@ -172,7 +172,7 @@ def main(args): # Create the executable file for condor jobs outScript = open(condor_file_name + ".sh", "w") # Variables for the outScript - entries = 100 if args.debug else 0 + entries = 10000 if args.debug else 0 syst_flag="--WithSyst" if args.WithSyst else "" outScript.write(f"""#!/bin/bash @@ -202,6 +202,7 @@ def main(args): echo "=========================================" output_file=${{4}}_hadd.root export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CMSSW_BASE/src/PhysicsTools/NanoAODTools/python/postprocessing/analysis/nanoAOD_skim/JHUGenMELA/MELA/data/el9_amd64_gcc12 +eval $(external/JHUGenMELA/MELA/setup.sh env) {command} --entriesToRun {entries} --inputFile ${{1}} --outputFile ${{output_file}} --cutFlowFile ${{4}}.json --DownloadFileToLocalThenRun True {syst_flag} echo "====> List root files : " ls -ltrh *.root @@ -226,8 +227,8 @@ def main(args): print("\n#===> Set Proxy Using:") print("voms-proxy-init --voms cms --valid 168:00") print("\n# It is assumed that the proxy is created in file: /tmp/x509up_u48539. Update this in below two lines:") - print("cp /tmp/x509up_u48539 ~/") - print("export X509_USER_PROXY=~/x509up_u48539") + print("cp /tmp/x509up_u153104 ~/") + print("export X509_USER_PROXY=~/x509up_u153104") print("\n#Submit jobs:") print("condor_submit "+condor_file_name+".jdl") # os.system("condor_submit "+condor_file_name+".jdl") diff --git a/src/H4LTools.cc b/src/H4LTools.cc index 429b450..011e838 100644 --- a/src/H4LTools.cc +++ b/src/H4LTools.cc @@ -4,6 +4,13 @@ #include +//H4LTools::H4LTools(bool isMC_) : isMC(isMC_) { + //if (isMC) + //std::cout << "H4LTools: Running in MC mode" << std::endl; + //else + //std::cout << "H4LTools: Running in Data mode" << std::endl; +//} + std::vector H4LTools::goodLooseElectrons2012(){ std::vector LooseElectronindex; for (unsigned int i=0; i H4LTools::goodLooseElectrons2012(){ return LooseElectronindex; } + std::vector H4LTools::goodLooseMuons2012(){ std::vector LooseMuonindex; + //bool muonpt = false; for (unsigned int i=0; i HZZ2l2nu_M_ll_Window) + if (fabs(Z1.M() - Zmass) > 80) { return foundZ1Candidate; } @@ -1023,8 +1181,9 @@ bool H4LTools::GetZ1_2l2qOR2l2nu() phiL2 = Lep2.Phi(); massL2 = Lep2.M(); - if(Lep1.DeltaR(Lep2)<0.3){ - foundZ1Candidate = false; + DeltaRl1l2 = Lep1.DeltaR(Lep2); + if(DeltaRl1l2<0.3){ + return foundZ1Candidate; } jetidx = SelectedJets(tighteleforjetidx, tightmuforjetidx); @@ -1087,19 +1246,34 @@ bool H4LTools::GetZ1_emuCR() std::cout << "##Zlep1pt,Zlep2pt (emu control region): " << ElelistFsr[TightEleindex[0]].Pt() << ", " << MulistFsr[TightMuindex[0]].Pt() << std::endl; Z1 = ElelistFsr[TightEleindex[0]] + MulistFsr[TightMuindex[0]]; + + TLorentzVector ele = ElelistFsr[TightEleindex[0]]; + TLorentzVector mu = MulistFsr[TightMuindex[0]]; + TLorentzVector Lep1, Lep2; - Lep1 = ElelistFsr[TightEleindex[0]]; - Lep2 = MulistFsr[TightMuindex[0]]; - - pTL1 = ElelistFsr[TightEleindex[0]].Pt(); - pTL2 = MulistFsr[TightMuindex[0]].Pt(); - etaL1 = ElelistFsr[TightEleindex[0]].Eta(); - etaL2 = MulistFsr[TightMuindex[0]].Eta(); - phiL1 = ElelistFsr[TightEleindex[0]].Phi(); - phiL2 = MulistFsr[TightMuindex[0]].Phi(); - massL1 = ElelistFsr[TightEleindex[0]].M(); - massL2 = MulistFsr[TightMuindex[0]].M(); + if (ele.Pt() >= mu.Pt()) { + Lep1 = ele; + Lep2 = mu; + } else { + Lep1 = mu; + Lep2 = ele; + } + + pTL1 = Lep1.Pt(); + pTL2 = Lep2.Pt(); + etaL1 = Lep1.Eta(); + etaL2 = Lep2.Eta(); + phiL1 = Lep1.Phi(); + phiL2 = Lep2.Phi(); + massL1 = Lep1.M(); + massL2 = Lep2.M(); + + DeltaRl1l2 = Lep1.DeltaR(Lep2); + if(DeltaRl1l2<0.3){ + return foundZ1_emuCRCandidate; + } + /// pT selection if ((pTL1 < HZZ2l2nu_Leading_Lep_pT || pTL2 < HZZ2l2nu_SubLeading_Lep_pT)) { @@ -1118,8 +1292,7 @@ bool H4LTools::GetZ1_emuCR() HZZemuCR_cutETAl1l2++; if (DEBUG) std::cout << "*****$$$$*****Zlep1eta,Zlep2eta (emu control region): " << etaL1 << ", " << etaL2 << std::endl; - // std::cout << "##HELLO##Z_emu mass: " << Z1_emuCR.M() << std::endl; - // std::cout << "##HELLO#Z_emu Pt: " << Z1_emuCR.Pt() << std::endl; + if (fabs(Z1.M() - Zmass) > 160) { @@ -1130,15 +1303,6 @@ bool H4LTools::GetZ1_emuCR() if (DEBUG) std::cout << "*****$$$$***** Z_emu mass: " << Z1.M() << std::endl; - /* - //side band - if (!(((Z1.M() > 40) && (Z1.M() < 70)) || ((Z1.M() > 110) && (Z1.M() < 200)))) - { - return foundZ1_emuCRCandidate; //UNCOMMENT FOR THE EVENTS IN SIDE BAND REGION - } - HZZemuCR_cutmZ1Window_SB++; - std::cout << "*****$$$$***** Z_emu mass_sideband: " << Z1.M() << std::endl; - */ /// pT selection of dilepton if (Z1.Pt() < 25) { @@ -1169,9 +1333,9 @@ bool H4LTools::ZZSelection_2l2q() { for (unsigned int i = 0; i < FatJetidx.size(); i++) { - if (FatJet_PNZvsQCD[FatJetidx[i]] < 0.9) continue; - if (FatJet_pt[FatJetidx[i]] < 200.0) continue; - // if (FatJet_msoftdrop[FatJetidx[i]] < 40.0) continue; + if (FatJet_PNZvsQCD[FatJetidx[i]] < 0.9) continue; // commented out for v15 + if (FatJet_pt[FatJetidx[i]] < 200.0) continue; //commented out for v15 + // if (FatJet_msoftdrop[FatJetidx[i]] < 40.0) continue; // if (FatJet_msoftdrop[FatJetidx[i]] > 180.0) continue; foundZZCandidate = true; @@ -1179,8 +1343,8 @@ bool H4LTools::ZZSelection_2l2q() cut2l1J++; cut2l1Jor2j++; - boostedJet_PNScore = FatJet_PNZvsQCD[FatJetidx[i]]; - boostedJet_Index = FatJetidx[i]; + boostedJet_PNScore = FatJet_PNZvsQCD[FatJetidx[i]];// commented out for v15 + boostedJet_Index = FatJetidx[i];// commented out for v15 Z2.SetPtEtaPhiM(FatJet_pt[FatJetidx[i]], FatJet_eta[FatJetidx[i]], FatJet_phi[FatJetidx[i]], FatJet_SDmass[FatJetidx[i]]); } @@ -1284,8 +1448,12 @@ bool H4LTools::ZZSelection_2l2nu() { std::cout << "Passed dPhiJetMET cut" << std::endl; std::cout << "MET_pt: " << MET_pt << std::endl; + std::cout << "inside 2l2nu selection loop, MET_pt: " << MET_pt << std::endl; + } + if (DEBUG) { + std::cout << "***** Corrected MET pt inside 2l2nu selection: " << MET_pt << std::endl; + std::cout << "***** Corrected MET phi inside 2l2nu selection: " << MET_phi << std::endl; } - if (MET_pt > 100) { HZZ2l2nu_cutMETgT100++; @@ -1316,7 +1484,66 @@ bool H4LTools::ZZSelection_2l2nu() HZZ2l2qNu_nJets = jetidx.size(); if (DEBUG) std::cout << "Size of jets: [inside 2l2nu] " << HZZ2l2qNu_nJets << std::endl; + for (unsigned int i = 0; i < jetidx.size(); i++){ + if (DEBUG) + std::cout << "DEBUG jets inside 2l2nu selection: Jet_pt.size() = " << Jet_pt.size() << ";" << " JetID = " << Jet_jetId[i] << ";" << "Jet_pt = " << Jet_pt[i] << ";" << " puID = " << Jet_puId[i] << " Jet index = " << i << std::endl; + } + unsigned int jet1index, jet2index; + jet1index = 99; + jet2index = 99; + if(jetidx.size()>0) + { + if(jetidx.size()==1) + { + jet1index = jetidx[0]; + } + if(jetidx.size()==2) + { + jet1index = jetidx[0]; + jet2index = jetidx[1]; + if(Jet_pt[jetidx[1]]>Jet_pt[jetidx[0]]) + { + jet1index = jetidx[1]; + jet2index = jetidx[0]; + } + } + if(jetidx.size()>2) + { + jet1index = jetidx[0]; + jet2index = jetidx[1]; + if(Jet_pt[jetidx[1]]>Jet_pt[jetidx[0]]) + { + jet1index = jetidx[1]; + jet2index = jetidx[0]; + } + for (unsigned int pj=2;pjJet_pt[jet1index])&&(Jet_pt[jetidx[pj]]>Jet_pt[jet2index])){ + jet1index = jetidx[pj]; + } + if(Jet_pt[jetidx[pj]]>Jet_pt[jet2index]){ + jet2index = jetidx[pj]; + } + } + } + } + TLorentzVector Jet1,Jet2; + if(jetidx.size()>0){ + Jet1.SetPtEtaPhiM(Jet_pt[jet1index],Jet_eta[jet1index],Jet_phi[jet1index],Jet_mass[jet1index]); + pTj1 = Jet1.Pt(); + etaj1 = Jet1.Eta(); + phij1 = Jet1.Phi(); + mj1 = Jet1.M(); + if(jetidx.size()>1){ + Jet2.SetPtEtaPhiM(Jet_pt[jet2index],Jet_eta[jet2index],Jet_phi[jet2index],Jet_mass[jet2index]); + pTj2 = Jet2.Pt(); + etaj2 = Jet2.Eta(); + phij2 = Jet2.Phi(); + mj2 = Jet2.M(); + } + } + // Get VBF jets having dEta>4.0 and mjj>500 // If there are more than one pair of VBF jets, select the pair with highest mjj float VBF_jj_mjj = 0.0;